Skip to content

Instantly share code, notes, and snippets.

@fitzgen
Created September 7, 2010 20:56
Show Gist options
  • Save fitzgen/569081 to your computer and use it in GitHub Desktop.
Save fitzgen/569081 to your computer and use it in GitHub Desktop.
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")));
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