Как я могу переписать это 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)*
Другие вопросы по тегам