2014-01-24 3 views
0

Я учусь LL/LR разбирает и при чтении LL parser page on Wikipedia, я нашел эту грамматику:Из статьи в Википедии это грамматика LL (0)?

S → F 
S → (S + F) 
F → a 

Из статьи является LL (LL (0) Я предполагаю, что из-за стола); но я нашел доказательство, в котором говорится, что парсер LL (0) не имеет левой рекурсии (в данном случае с S). Итак, как получается, что это правильный LL (0) (или, по крайней мере, это то, что я понял из статьи).

Является ли «нет левой рекурсии» каким-то общим правилом или просто флагом возможно вопрос?

И может ли разборный стол сказать мне точно ли грамматика, над которой я работаю, является LL (0)?

ответ

2

Да, вы можете определить LL (0) грамматику, глядя на таблицу синтаксического анализа, а именно:

  1. Каждый нетерминал связан только с одной правой стороны.
  2. Операции EBNF не используются ?, *, или +.

Многие могут указать дополнительное правило, согласно которому рекурсия не допускается. Однако это тривиально подразумевается предыдущими правилами из-за того, что любая рекурсия приведет к бесконечному циклу.

Ваш пример грамматики не LL (0), потому что для не-терминала s существует 2 произведения.

+0

* S * есть 2 правая сторона. Однако мы знаем, какой из них мы рассматриваем только из одного символа, без дополнительного обзора. – Kaz

Смежные вопросы