Упражнение 2.1.25 |
Синтаксический разбор
Пример 13.1.29. Рассмотрим контекстно-свободную грамматику из примера 13.1.3. Грамматика с маркером конца строки имеет правила
Соответствующий нисходящий магазинный анализатор M, построенный в теореме 13.1.28, имеет приведенный ниже вид.Определение 13.1.30. Контекстно-свободная грамматика принадлежит классу LL(1), если для любых двух правил и , где , множества и не пересекаются.
Замечание 13.1.31. Первая буква L в названии класса LL(1) означает, что входное слово читается слева направо (left-to-right). Вторая буква L означает, что строится левосторонний вывод (leftmost derivation). Число 1 указывает на то, что на каждом шаге для принятия решения используется один символ неразобранной части входного слова.
Пример 13.1.32. Грамматика из примера 13.1.3 принадлежит классу LL(1), а грамматика из примера 3.1.17 этому классу не принадлежит.
Теорема 13.1.33. МП-автомат M, построенный в теореме 13.1.28 по контекстно-свободной грамматике G, является детерминированным тогда и только тогда, когда грамматика G принадлежит классу LL(1).
Теорема 13.1.34. Грамматики из класса LL(1) порождают только детерминированные контекстно-свободные языки.
Теорема 13.1.35. Пусть контекстно-свободная грамматика не содержит бесполезных символов. Система множеств (где ) состоит из наименьших ( по включению ) множеств, удовлетворяющих следующим условиям:
- если , то для всех и ;
- если , то для всех и ;
- если , то .
Теорема 13.1.36. Пусть контекстно-свободная грамматика не содержит бесполезных символов. Система множеств ( где ) состоит из наименьших ( по включению ) множеств, удовлетворяющих следующим условиям:
- если и , то ;
- если , и , то
Замечание 13.1.37. Теоремы 13.1.35 и 13.1.36 дают алгоритм проверки принадлежности контекстно-свободной грамматики G классу LL(1). Можно предположить, что грамматика G не содержит бесполезных символов (их можно устранить).
Сначала необходимо вычислить значения параллельно для всех слов , являющихся суффиксами правых частей правил грамматики . Для этого постепенно пополняем множества (начав с пустых множеств), используя условия, приведенные в теореме 13.1.35.
Затем необходимо вычислить значения параллельно для всех вспомогательных символов A. Для этого постепенно пополняем множества (начав с пустых множеств), используя условия, приведенные в теореме 13.1.35.
В заключение вычислим значения для всех правил , следуя определению функции , и проверим условия из определения 13.1.30.
Теорема 13.1.38. Пусть даны контекстно-свободная грамматика и символ . Пусть
где множество P0 не содержит правил с левой частью A и ни одно из слов не начинается с символа A. Тогда грамматика G эквивалентна контекстно-свободной грамматике , где A' - новый символ, не принадлежащий множеству , иПример 13.1.39. Если к контекстно-свободной грамматике из примера 13.1.17 два раза применить преобразование из теоремы 13.1.38 (для вспомогательного символа A и для вспомогательного символа B ), то получим эквивалентную грамматику G' с правилами
После упрощения получаем грамматику G'' с правилами Язык L(G'') распознается детерминированным МП-автоматом , где , , , и Можно доказать, что МП-автомат M является нисходящим магазинным анализатором для грамматикиПример 13.1.40. Пусть и . Рассмотрим контекстно-свободную грамматику G с правилами
Грамматика с маркером конца строки имеет правила Соответствующий нисходящий магазинный анализатор M, построенный в теореме 13.1.28, имеет приведенный ниже вид. Легко убедиться, что грамматика G принадлежит классу LL(1) и МП-автомат M является детерминированным.Упражнение 13.1.41. Существует ли детерминированный нисходящий магазинный анализатор для грамматики
Упражнение 13.1.42. Принадлежит ли грамматика
классу LL(1)?Упражнение 13.1.43. Принадлежит ли грамматика
классу LL(1)?