Несколько записей в таблице разбора 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 → ε | б

Надеюсь это поможет!

Другие вопросы по тегам