Различные методы реализации определенного правила синтаксического анализа для компилятора - PullRequest
1 голос
/ 15 апреля 2019

Допустим, у нас есть правило для разбора токенов, которое указывает:

x -> [y[,y]*]

Где скобки '[]' означают, что что-либо в них является необязательным для того, чтобы правило имело место, а * означает0 или большенапример, это может быть:

x : (empty) 
  OR
x : y 
  OR
x : y,y

и т. д. (выше приведены примеры ввода, при котором будет активировано правило 'x', а не то, каким должен быть код)

Я пробовалследующее, которое уже работает

x : y commaY
  |
  ;

commaY : COMMA y commaY
       |
       ;

Я хотел бы знать альтернативные варианты в приведенном выше, которые бы работали, если таковые имеются, для образовательных целей.

Заранее спасибо.

1 Ответ

1 голос
/ 15 апреля 2019

РЕДАКТИРОВАТЬ Мой предыдущий ответ был неверным (как указано в комментариях), но я не могу удалить принятый ответ, поэтому я решил отредактировать его.

Вам понадобится (как минимум) 2 правила для x -> [y[,y]*]. Вот еще одна возможность:

x
 : list
 | /* eps */
 ;

list
 : list ',' y
 | y
 ;
...