Изменения

Перейти к: навигация, поиск

Предиктивный синтаксический анализ

2123 байта добавлено, 15:28, 24 мая 2015
Общая схема построения парсеров с помощью FIRST и FOLLOW
Пусть <tex>\Gamma</tex> {{---}} LL(1)-грамматика. Построим для нее парсер.
Для каждого нетерминала A : <tex>A \rightarrow \alpha_1 | \mid \alpha_2 | \mid ... | \mid \alpha_k </tex> создадим функцию A() : Node, возвращающую фрагмент дерева разбора, выведенный из нетерминала A.
Здесь Node {{---}} структура вида:
return res
== Пример ==Рассмотрим построение парсера на примере грамматики арифметических выражений.Запишем грамматику. <tex> E \to T + E \mid T \\T \to F \times T \mid F \\F \to n \mid (E)</tex> Данная грамматика не является LL(1)-грамматикой, так как содержит правое ветвление, от него нужно избавиться перед построением парсера: <tex> E \to TE' \\E' \to +TE' \mid \varepsilon \\T \to FT' \\T' \to \times FT' \mid \varepsilon \\F \to n \mid (E)</tex> Теперь грамматика стала LL(1)-грамматикой, построим для нее множества FIRST и FOLLOW (их построение подробно разобрано [[Построение FIRST и FOLLOW#Пример | здесь]]). {| style="background-color:#CCC;margin:0.5px"!style="background-color:#EEE"| Правило!style="background-color:#EEE"| FIRST!style="background-color:#EEE"| FOLLOW|-|style="background-color:#FFF;padding:2px 30px"| <tex>E</tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{\ n,\ (\ \} </tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{\ \$,\ )\ \} </tex>|-|style="background-color:#FFF;padding:2px 30px"| <tex>E'</tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{\ +,\ \varepsilon\ \} </tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{\ \$,\ )\ \} </tex>|-|style="background-color:#FFF;padding:2px 30px"| <tex>T</tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{\ n,\ (\ \} </tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{\ +,\ \$\ ,\ )\ \}</tex>|-|style="background-color:#FFF;padding:2px 30px"| <tex>T'</tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{\ \times,\ \varepsilon\ \} </tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{\ +,\ \$\ ,\ )\ \}</tex>|-|style="background-color:#FFF;padding:2px 30px"| <tex>F</tex>|style="background-color:#FFF;padding:2px 30px"| <tex>\{TODO \ n,\ (\ \} </tex>| t style= Примеры псевдокодов для грамматики арифметических выражений"background-color:#FFF;padding:2px 30px"| <tex>\{\ \times, \ +,\ \$\ ,\ )\ \}</tex>|}   
{{TODO | t = Картинки примеров разбора чего-нибудь типа 1+2*3}}
{{TODO | t = Построение таблицы предиктивного анализа}}
Анонимный участник

Навигация