Как я могу переписать это CallExpression без рекурсии?
В настоящее время я работаю над грамматикой JavaCC для 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 ответ
Решение
Да, это правильное переписывание. В общем
A --> B | A C
может быть переписан как
A --> B (C)*