【发布时间】:2015-03-01 19:57:11
【问题描述】:
我正在开发 LiveScript 语言的解析器,但在同时解析 key: value 和 (+|-)key 这两种对象属性定义表单时遇到了问题。例如:
prop: "val"
+boolProp
-boolProp
prop2: val2
我有key: value 表单处理这个:
Expression ::= TestExpression
| ParenExpression
| OpExpression
| ObjDefExpression
| PropDefExpression
| LiteralExpression
| ReferenceExpression
PropDefExpression ::= Expression COLON Expression
ObjDefExpression ::= PropDefExpression (NEWLINE PropDefExpression)*
// ... other expressions
但是我尝试将("+"|"-") IDENTIFIER 添加到PropDefExpression 或ObjDefExpression,我得到关于使用左递归的错误。这样做的(正确)方法是什么?
【问题讨论】:
-
您使用的是什么解析器生成器(如果您想发表评论,为什么选择那个而不是生成自底向上解析器的解析器)?
-
我正在为 IntelliJ IDEA IDE 开发 LiveScript 插件,根据他们的tutorial,我正在使用JFlex lexer + GrammarKit parser plugin。而且我对解析器和 IntelliJ 插件开发的了解太少,无法寻找替代方案。
-
很公平。显然 GrammarKit 构建了一个递归下降语法,尽管它的文档有点杂乱无章,所以我可能会遗漏一些东西。我对 livescript 也不太了解,但它似乎不适用于 LL(1) 解析,它的解析器是用 Jison 构建的,它构建自下而上的 LALR(1) 解析器。 (github.com/gkz/LiveScript/blob/master/src/grammar.ls)。简而言之,我想我帮不了你太多。对不起。
标签: recursion context-free-grammar ebnf livescript grammar-kit