我目前正致力于JavaCC grammar ECMAScript 5.1。我对JavaCC有些新意,所以我希望对以下问题提供一些帮助。
§11.2左侧表达式定义了以下CallExpression
作品:
CallExpression :
MemberExpression Arguments
CallExpression Arguments
CallExpression [ Expression ]
CallExpression . IdentifierName
这是左递归,因此在JavaCC中不能正常工作。
我正在考虑将其重写如下(.jj
- 类似的伪代码):
CallExpression :
MemberExpression Arguments ( Arguments | "[" Expression "]" | "." IdentifierName )*
这是正确的重写吗?
答案 0 :(得分:2)
是的,这是正确的重写。一般来说
A --> B | A C
可以改写为
A --> B (C)*