LL(k)-грамматики, множества FIRST и FOLLOW — различия между версиями
Shersh (обсуждение | вклад) (добавлены определения множеств FIRST и FOLLOW) |
Shersh (обсуждение | вклад) м (→FIRST и FOLLOW) |
||
Строка 31: | Строка 31: | ||
|id=deffirst | |id=deffirst | ||
|definition= | |definition= | ||
− | <tex> \mathrm{FOLLOW}(A) = \{c \mid S \Rightarrow^* \alpha A c \beta \} \cup \{ \$ \mathrm{if} | + | <tex> \mathrm{FOLLOW}(A) = \{c \mid S \Rightarrow^* \alpha A c \beta \} \cup \{ \$ \ \mathrm{if}\ S \Rightarrow^* \alpha A \} </tex> |
}} | }} | ||
Другими словами, <tex> \mathrm{FIRST}(\alpha) </tex> {{---}} все символы (терминалы), с которых могут начинаться всевозможные выводы из <tex> \alpha </tex>, а <tex> \mathrm{FOLLOW}(A) </tex> {{---}} всевозможные символы, которые встречаются после нетерминала <tex> A </tex> во всех правилах грамматики. | Другими словами, <tex> \mathrm{FIRST}(\alpha) </tex> {{---}} все символы (терминалы), с которых могут начинаться всевозможные выводы из <tex> \alpha </tex>, а <tex> \mathrm{FOLLOW}(A) </tex> {{---}} всевозможные символы, которые встречаются после нетерминала <tex> A </tex> во всех правилах грамматики. | ||
=== Примеры === | === Примеры === | ||
{{TODO | t = Какие-нибудь примеры}} | {{TODO | t = Какие-нибудь примеры}} | ||
+ | |||
== Теорема о связи LL(1)-грамматики с множествами FIRST и FOLLOW == | == Теорема о связи LL(1)-грамматики с множествами FIRST и FOLLOW == | ||
{{TODO | t = Теорема об LL(1)-грамматиках}} | {{TODO | t = Теорема об LL(1)-грамматиках}} |
Версия 00:53, 28 июня 2014
Наибольший интерес в построении синтаксических анализаторов (парсеров) представляют LL(1)-грамматики, так как для них возможно построение нисходящих парсеров без возврата, то есть без корректировки выбранных правил в грамматике. LL(1)-грамматики являются подмножеством КС-грамматик. Однако для достаточно большого количества формальных языков можно построить LL(1)-грамматику, например, для языка арифметических выражений и даже для некоторых языков программирования, в частности можно и для языка Java.
Содержание
LL(k)-грамматика
Дадим теперь формально определение LL(k)-грамматики.
Определение: |
Пусть где | — КС-грамматика. Рассмотрим возникновение следующей ситуации во время левостороннего вывода в этой грамматике слова :
Неформально это означает, что если мы уже вывели какой-то префикс разбираемого слова, то, посмотрев на следующие
cимволов, сможем одназначно выбрать правило вывода.TODO: картинка
LL(1)-грамматика является частным случаем. Её определение почти такое же, только вместо строки
один символ .FIRST и FOLLOW
Ключевую роль в построении парсеров для LL(1)-грамматик играю множества
и .Пусть недостижимых правил. Тогда определим и следующим образом:
— символ из алфавита , — строки из нетерминалов и терминалов (возможно пустые), — нетерминалы грамматики (начальное и произвольное соответственно), — символ окончания слова. Также будем считать, что в грамматике нетОпределение: |
Определение: |
Другими словами,
— все символы (терминалы), с которых могут начинаться всевозможные выводы из , а — всевозможные символы, которые встречаются после нетерминала во всех правилах грамматики.Примеры
TODO: Какие-нибудь примеры
Теорема о связи LL(1)-грамматики с множествами FIRST и FOLLOW
TODO: Теорема об LL(1)-грамматиках
TODO: Пара следствий