From f9f0186d95704f63a66bff0334507c984cd5944d Mon Sep 17 00:00:00 2001 From: Stefan Zermatten Date: Wed, 3 Feb 2021 00:39:11 +0200 Subject: [PATCH] Fixed error where parser was not creating accessor nodes correctly --- app/imports/parser/grammar.js | 9 ++++++--- app/imports/parser/grammar.ne | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/imports/parser/grammar.js b/app/imports/parser/grammar.js index 4d0b0a78..69266b63 100644 --- a/app/imports/parser/grammar.js +++ b/app/imports/parser/grammar.js @@ -116,11 +116,14 @@ let ParserRules = [ {"name": "arrayExpression", "symbols": ["parenthesizedExpression"], "postprocess": id}, {"name": "parenthesizedExpression", "symbols": [{"literal":"("}, "_", "expression", "_", {"literal":")"}], "postprocess": d => new ParenthesisNode({content: d[2]})}, {"name": "parenthesizedExpression", "symbols": ["accessorExpression"], "postprocess": id}, - {"name": "accessorExpression$ebnf$1$subexpression$1", "symbols": [{"literal":"."}, "name"], "postprocess": d => d[1].name}, + {"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", "symbols": ["accessorExpression$ebnf$1$subexpression$1"]}, - {"name": "accessorExpression$ebnf$1$subexpression$2", "symbols": [{"literal":"."}, "name"], "postprocess": d => d[1].name}, + {"name": "accessorExpression$ebnf$1$subexpression$2", "symbols": [{"literal":"."}, (lexer.has("name") ? {type: "name"} : name)], "postprocess": d => d[1].value}, {"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": ["name", "accessorExpression$ebnf$1"], "postprocess": d=> new AccessorNode({name: d[0], path: d[1]})}, + {"name": "accessorExpression", "symbols": ["accessorExpression$subexpression$1", "accessorExpression$ebnf$1"], "postprocess": + d=> new AccessorNode({name: d[0], path: d[1]}) + }, {"name": "accessorExpression", "symbols": ["valueExpression"], "postprocess": id}, {"name": "valueExpression", "symbols": ["name"], "postprocess": id}, {"name": "valueExpression", "symbols": ["number"], "postprocess": id}, diff --git a/app/imports/parser/grammar.ne b/app/imports/parser/grammar.ne index 5f9016be..066299ae 100644 --- a/app/imports/parser/grammar.ne +++ b/app/imports/parser/grammar.ne @@ -144,7 +144,9 @@ parenthesizedExpression -> | accessorExpression {% id %} accessorExpression -> - name ( "." name {% d => d[1].name %} ):+ {% d=> new AccessorNode({name: d[0], path: d[1]}) %} + (%name {% d => d[0].value %}) ( "." %name {% d => d[1].value %} ):+ {% + d=> new AccessorNode({name: d[0], path: d[1]}) + %} | valueExpression {% id %} valueExpression ->