Fixed parser to allow $ and x.0.thing in variable references
This commit is contained in:
@@ -13,7 +13,7 @@ function id(x) { return x[0]; }
|
||||
value: s => s.slice(1, -1),
|
||||
},
|
||||
name: {
|
||||
match: /[a-zA-Z_#]*[a-ce-zA-Z_#][a-zA-Z0-9_#]*/,
|
||||
match: /[a-zA-Z_#$]*[a-ce-zA-Z_#$][a-zA-Z0-9_#$]*/,
|
||||
type: moo.keywords({
|
||||
'keywords': ['true', 'false'],
|
||||
}),
|
||||
@@ -109,14 +109,16 @@ let ParserRules = [
|
||||
{"name": "parenthesizedExpression", "symbols": [{"literal":"("}, "_", "expression", "_", {"literal":")"}], "postprocess": d => node.parenthesis.create({content: d[2]})},
|
||||
{"name": "parenthesizedExpression", "symbols": ["accessorExpression"], "postprocess": id},
|
||||
{"name": "accessorExpression$subexpression$1", "symbols": [(lexer.has("name") ? {type: "name"} : name)], "postprocess": d => d[0].value},
|
||||
{"name": "accessorExpression$ebnf$1$subexpression$1", "symbols": [{"literal":"."}, (lexer.has("name") ? {type: "name"} : name)], "postprocess": d => d[1].value},
|
||||
{"name": "accessorExpression$ebnf$1$subexpression$1", "symbols": [{"literal":"."}, "keyExpression"], "postprocess": d => d[1]},
|
||||
{"name": "accessorExpression$ebnf$1", "symbols": ["accessorExpression$ebnf$1$subexpression$1"]},
|
||||
{"name": "accessorExpression$ebnf$1$subexpression$2", "symbols": [{"literal":"."}, (lexer.has("name") ? {type: "name"} : name)], "postprocess": d => d[1].value},
|
||||
{"name": "accessorExpression$ebnf$1$subexpression$2", "symbols": [{"literal":"."}, "keyExpression"], "postprocess": d => d[1]},
|
||||
{"name": "accessorExpression$ebnf$1", "symbols": ["accessorExpression$ebnf$1", "accessorExpression$ebnf$1$subexpression$2"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}},
|
||||
{"name": "accessorExpression", "symbols": ["accessorExpression$subexpression$1", "accessorExpression$ebnf$1"], "postprocess":
|
||||
d=> node.accessor.create({name: d[0], path: d[1]})
|
||||
},
|
||||
{"name": "accessorExpression", "symbols": ["valueExpression"], "postprocess": id},
|
||||
{"name": "keyExpression", "symbols": ["name"], "postprocess": d => d[0].name},
|
||||
{"name": "keyExpression", "symbols": ["number"], "postprocess": d => d[0].value},
|
||||
{"name": "valueExpression", "symbols": ["name"], "postprocess": id},
|
||||
{"name": "valueExpression", "symbols": ["number"], "postprocess": id},
|
||||
{"name": "valueExpression", "symbols": ["string"], "postprocess": id},
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
value: s => s.slice(1, -1),
|
||||
},
|
||||
name: {
|
||||
match: /[a-zA-Z_#]*[a-ce-zA-Z_#][a-zA-Z0-9_#]*/,
|
||||
match: /[a-zA-Z_#$]*[a-ce-zA-Z_#$][a-zA-Z0-9_#$]*/,
|
||||
type: moo.keywords({
|
||||
'keywords': ['true', 'false'],
|
||||
}),
|
||||
@@ -138,11 +138,14 @@ parenthesizedExpression ->
|
||||
| accessorExpression {% id %}
|
||||
|
||||
accessorExpression ->
|
||||
(%name {% d => d[0].value %}) ( "." %name {% d => d[1].value %} ):+ {%
|
||||
(%name {% d => d[0].value %}) ( "." keyExpression {% d => d[1] %} ):+ {%
|
||||
d=> node.accessor.create({name: d[0], path: d[1]})
|
||||
%}
|
||||
| valueExpression {% id %}
|
||||
|
||||
keyExpression -> name {% d => d[0].name %}
|
||||
| number {% d => d[0].value %}
|
||||
|
||||
valueExpression ->
|
||||
name {% id %}
|
||||
| number {% id %}
|
||||
|
||||
Reference in New Issue
Block a user