Рассмотрим следующую грамматику:
S → A | B
A → xy
B → xyz
Это то, что я думаю, что парсер LR (0) будет делать с учетом ввода xyz
:
| xyz → shift
x | yz → shift
xy | z → reduce
A | z → shift
Az | → fail
Если мое предположение верно, и мы изменили правило B
следующим образом:
B → Az
теперь грамматика внезапно становится приемлемой парсером LR (0). Я предполагаю, что эта новая грамматика описывает тот же самый набор строк, что и первая грамматика в этом вопросе.
- В чем разница между первой и второй грамматиками?
- Как мы отделяем структурные различия в наших грамматиках от языка, который они описывают?
- Через нормализацию?
- Какая нормализация?
Для дальнейшего уточнения:
Я хочу описать язык для парсера, без структуры грамматики, играющей роль. Я хотел бы получить самое минимальное/фундаментальное описание набора строк. Для грамматик LR (k) я хотел бы свести к минимуму k.