У меня есть сомнения относительно парсеров lr (0). Например, у меня есть последующие грамматики:LR (0) конфликты с Parser
S -> S N
|
N -> terminalsymbol
Если я пытаюсь построить первое состояние Lr0 автомата, я получаю следующее первое состояние:
S ' -> . S $
S -> . S N
S -> .
Так вот кажется мне глупое сомнение , Поскольку у меня есть «S ->». в первом состоянии, является ли это ситуацией сдвига/уменьшения в парсере lr0? Причина, по которой парсер может перейти к действию сдвига по нетерминалу S, или уменьшить действие пустым переходом (я думаю).
Я уже искал по сети, ища пример с пустыми переходами, но я не нашел его.
Спасибо за ответ. Я новичок в этом. Итак, конфликт не существует, потому что в первом состоянии нет действия сдвига, верно? Когда вы говорите «и только одно действие уменьшения» относительно пустого перехода? – Afaria
Действие сдвига возможно в состоянии, если точка ('.') находится непосредственно перед нетерминалом. Сокращение возможно, если точка находится в конце производства. Если оба являются истинными или существуют два разных сокращения, тогда возникает конфликт. В противном случае все, что вы можете сделать, это то, что вы можете сделать (сдвиг или сокращение, в зависимости от случая), и нет конфликта. – rici
Еще раз спасибо за помощь. Еще один вопрос. Если у меня есть следующая грамматика (S -> num S, S ->), в первом состоянии я получаю конфликт с уменьшением сдвига? из-за символа 'num' является терминалом, поэтому мы можем сдвинуться, и мы можем уменьшить пустым переходом? я думаю, правильно? – Afaria