2014-11-05 106 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)*