我怎么能非递归地重写这个CallExpression?

时间:2014-11-05 11:46:50

标签: javascript ecmascript-5 javacc

我目前正致力于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 )*

这是正确的重写吗?

1 个答案:

答案 0 :(得分:2)

是的,这是正确的重写。一般来说

A --> B | A C

可以改写为

A --> B (C)*