2014-11-05 61 views
1

我目前在JavaCC grammar上工作ECMAScript 5.1。我对JavaCC有点新鲜,因此对于下面的问题会有所帮助。我怎样才能非递归地重写这个CallExpression?

§11.2左手侧的表达式定义了以下CallExpression生产:

CallExpression : 
    MemberExpression Arguments 
    CallExpression Arguments 
    CallExpression [ Expression ] 
    CallExpression . IdentifierName 

这是离开递归,因此在作为JavaCC中是不起作用。

我想如下(.jj -similar伪代码)重写它的:

CallExpression : 
    MemberExpression Arguments (Arguments | "[" Expression "]" | "." IdentifierName)* 

这是正确的重写?

+0

的问题不是该规则是递归被改写。问题是它是递归的。 – 2014-11-05 12:55:25

+0

@TheodoreNorvell谢谢你,我已经更新了这个问题。 – lexicore 2014-11-05 14:05:45

回答

2

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

A --> B | A C 

可以作为

A --> B (C)*