Несколько записей в таблице разбора LL(1)?
Учитывая эту грамматику:
S → S1 S2
S1 → a | ε
S2 → ab | ε
Поэтому мы имеем
FIRST (S1) = {a, ε}
СЛЕДУЙТЕ ЗА (S1) = {a}
Означает ли это, что в таблице синтаксического анализа у меня будет несколько определений в строке для S1 и столбца для a
?
1 ответ
Да, это правильно. (Тем не менее, обратите внимание, что ваш набор FOLLOW неверен; он также содержит маркер конца ввода $). Проблема здесь в том, что если парсер видит a
, он не может сказать, если это потому, что он хочет использовать деривацию
S → S1 S2 → a S2
Или вывод
S → S1 S2 → S2 → ab
Чтобы это исправить, вы можете заметить, что ваша грамматика генерирует только строки { a, ab, aab }. Таким образом, вы можете построить LL(1) для языковой грамматики, которая напрямую создает эти три строки:
S → aY
Y → ε | Аризона
Z → ε | б
Надеюсь это поможет!