Created
September 7, 2010 20:56
-
-
Save fitzgen/569081 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var FILE = require("file"); | |
| require.paths.unshift(FILE.join(FILE.dirname(module.path), | |
| "jsmacros/vendor/jison/lib")); | |
| var Parser = require("jison").Parser; | |
| require.paths.shift(); | |
| var grammar = { | |
| lex: { | |
| rules: [ | |
| ["macro", "return 'MACRO'"], | |
| ["\\$var", "return 'VAR'"], | |
| ["\\$expr", "return 'EXPR'"], | |
| ["\\$block", "return 'BLOCK'"], | |
| ["\\$gensyms", "return 'GENSYMS'"], | |
| ["[a-zA-z_\\$]+", "return 'ID'"], | |
| [":", "return ':'"], | |
| [",", "return ','"], | |
| ["'", "return '\\''"], | |
| ["{", "return '{'"], | |
| ["}", "return '}'"], | |
| ["\\s+", "/* skip whitespace */"], | |
| ["$", "return 'EOF'"], | |
| ["[\\w=\\-_\\|\\(\\)\\{\\}\\!@#\\$%\\^&\\*\\[\\]]+", "return 'LITERAL'"] | |
| ["\\S+", "return 'OTHER'"] | |
| ] | |
| }, | |
| bnf: { | |
| jsm: [ | |
| ["macrodefs EOF", "return $1"] | |
| ], | |
| macrodefs: [ | |
| ["", "$$ = []"], | |
| ["macro macrodefs", "$$ = $1.concat($2)"] | |
| ], | |
| macro: [ | |
| ["MACRO ID macropattern gensyms { template }", "$$ = [$2, $3, $4, $6]"] | |
| ], | |
| macropattern: [ | |
| ["' LITERAL ' macropattern", "$$ = [$2].concat($4)"], | |
| ["VAR : ID macropattern", "$$ = [[$1, $3]].concat($4)"], | |
| ["EXPR : ID macropattern", "$$ = [[$1, $3]].concat($4)"], | |
| ["BLOCK : ID macropattern", "$$ = [[$1, $3]].concat($4)"], | |
| ["", "$$ = []"] | |
| ], | |
| gensyms: [ | |
| ["", "$$ = []"], | |
| ["GENSYMS ID idlist", "$$ = [$1, $2].concat($3)"] | |
| ], | |
| idlist: [ | |
| ["", "$$ = []"], | |
| [", ID idlist", "$$ = [$2].concat($3)"] | |
| ], | |
| template: [ | |
| ["OTHER template", "$$ = $1 + ' ' + $2"], | |
| ["LITERAL template", "$$ = $1 + ' ' + $2"], | |
| ["VAR template", "$$ = ' $var ' + $2"], | |
| ["EXPR template", "$$ = ' $expr ' + $2"], | |
| ["BLOCK template", "$$ = ' $block ' + $2"], | |
| [": template", "$$ = $1 + $2"], | |
| [", template", "$$ = $1 + $2"], | |
| ["{ template }", "$$ = $1 + $2 + $3"], | |
| ["' template", "$$ = $1 + $2"], | |
| ["GENSYMS template", "$$ = ' $gensyms ' + $2"], | |
| ["MACRO template", "$$ = ' macro ' + $2"], | |
| ["ID template", "$$ = $1 + $2"], | |
| ["", "$$ = ''"] | |
| ] | |
| } | |
| }; | |
| exports.generateParser = function () { | |
| return new Parser(grammar); | |
| }; | |
| exports.parse = function (code) { | |
| return exports.generateParser().parse(code); | |
| }; | |
| print(exports.parse("macro max $var:a $var:b { #a > #b ? #a : #b }")); | |
| print(exports.parse(["macro let $var:thing '=' $expr:val 'in' $block:code $gensyms:oldThing {", | |
| " var oldThing = #thing;", | |
| " #thing = #val;", | |
| " #code", | |
| " thing = oldThing;", | |
| " delete oldThing;", | |
| "}"].join("\n"))); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| fitzgen@shaolin :: (master) :: ~/dev/csnw/jsmacros/lib | |
| $ narwhal jsmacros.js | |
| org.mozilla.javascript.EcmaError: TypeError: Cannot read property "0.0" from undefined (/home/fitzgen/src/narwhal/packages/narwhal-lib/lib/narwhal/sandbox.j\ | |
| s#118) | |
| at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3753) | |
| at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3731) | |
| at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3759) | |
| at org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3778) | |
| at org.mozilla.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:3791) | |
| at org.mozilla.javascript.ScriptRuntime.getObjectElem(ScriptRuntime.java:1436) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_lexer_js_11._c_prepareRules_2(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_lexer_js_11.call(Unknown Source) | |
| at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_lexer_js_11._c_buildActions_5(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_lexer_js_11.call(Unknown Source) | |
| at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2504) | |
| at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:294) | |
| at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:129) | |
| at org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:86) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_lexer_js_11._c_RegExpLexer_7(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_lexer_js_11.call(Unknown Source) | |
| at org.mozilla.javascript.BaseFunction.construct(BaseFunction.java:363) | |
| at org.mozilla.javascript.ScriptRuntime.newObject(ScriptRuntime.java:2423) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_js_8._c_Jison_Generator_9(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_js_8.call(Unknown Source) | |
| at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2504) | |
| at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:294) | |
| at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:129) | |
| at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_util_typal_js_9._c_anonymous_5(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_util_typal_js_9.call(Unknown Source) | |
| at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2504) | |
| at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:294) | |
| at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:129) | |
| at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_util_typal_js_9._c_anonymous_10(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_util_typal_js_9.call(Unknown Source) | |
| at org.mozilla.javascript.BaseFunction.construct(BaseFunction.java:363) | |
| at org.mozilla.javascript.ScriptRuntime.newObject(ScriptRuntime.java:2423) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_js_8._c_Parser_121(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_vendor_jison_lib_jison_js_8.call(Unknown Source) | |
| at org.mozilla.javascript.BaseFunction.construct(BaseFunction.java:363) | |
| at org.mozilla.javascript.ScriptRuntime.newObject(ScriptRuntime.java:2423) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_js_7._c_anonymous_1(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_js_7.call(Unknown Source) | |
| at org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:119) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_js_7._c_anonymous_2(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_js_7.call(Unknown Source) | |
| at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_js_7._c_anonymous_0(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_dev_csnw_jsmacros_lib_jsmacros_js_7.call(Unknown Source) | |
| at org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2504) | |
| at org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:294) | |
| at org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:129) | |
| at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) | |
| at org.mozilla.javascript.gen._home_fitzgen_src_narwhal_engines_rhino_bootstrap_js_1._c_anonymous_6(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_src_narwhal_engines_rhino_bootstrap_js_1.call(Unknown Source) | |
| at org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1702) | |
| at script(/home/fitzgen/src/narwhal/packages/narwhal-lib/lib/narwhal/sandbox.js:118) | |
| at script(/home/fitzgen/src/narwhal/packages/narwhal-lib/lib/narwhal/sandbox.js:241) | |
| at script.narwhal(/home/fitzgen/src/narwhal/narwhal.js:290) | |
| at org.mozilla.javascript.Interpreter.interpret(Interpreter.java:845) | |
| at org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:164) | |
| at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97) | |
| at org.mozilla.javascript.gen._home_fitzgen_src_narwhal_engines_rhino_bootstrap_js_1._c_anonymous_1(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_src_narwhal_engines_rhino_bootstrap_js_1.call(Unknown Source) | |
| at org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) | |
| at org.mozilla.javascript.gen._home_fitzgen_src_narwhal_engines_rhino_bootstrap_js_1._c_script_0(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_src_narwhal_engines_rhino_bootstrap_js_1.call(Unknown Source) | |
| at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:426) | |
| at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3157) | |
| at org.mozilla.javascript.gen._home_fitzgen_src_narwhal_engines_rhino_bootstrap_js_1.call(Unknown Source) | |
| at org.mozilla.javascript.gen._home_fitzgen_src_narwhal_engines_rhino_bootstrap_js_1.exec(Unknown Source) | |
| at org.mozilla.javascript.tools.shell.Main.evaluateScript(Main.java:563) | |
| at org.mozilla.javascript.tools.shell.Main.processFileSecure(Main.java:485) | |
| at org.mozilla.javascript.tools.shell.Main.processFile(Main.java:451) | |
| at org.mozilla.javascript.tools.shell.Main.processSource(Main.java:443) | |
| at org.mozilla.javascript.tools.shell.Main.processFiles(Main.java:196) | |
| at org.mozilla.javascript.tools.shell.Main$IProxy.run(Main.java:117) | |
| at org.mozilla.javascript.Context.call(Context.java:521) | |
| at org.mozilla.javascript.ContextFactory.call(ContextFactory.java:535) | |
| at org.mozilla.javascript.tools.shell.Main.exec(Main.java:179) | |
| at org.mozilla.javascript.tools.shell.Main.main(Main.java:157) | |
| TypeError: Cannot read property "0.0" from undefined |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment