Я пытаюсь понять, как работают парсеры LR1, но у меня возникла странная проблема: что если грамматика содержит эпсилоны? Например: если у меня есть грамматика:
S -> A
A -> a A | B
B -> a
Понятно, с чего начать:
S -> .A
A -> .a A
A -> .B
... и т. Д.
но я не знаю, как это сделать для такой грамматики:
S -> A
A -> a A a | \epsilon
Правильно ли делать:
S -> .A
A -> .a A a
( A -> .\epsilon )
А затем сделать это государство в DFA принятия?
Любая помощь будет принята с благодарностью!