Изменения

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

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

1460 байт добавлено, 20:07, 24 мая 2015
Нет описания правки
addChild(Node) // функция, подвешивающая поддерево к данному узлу
Тут картинка про строку[[Файл:string_token.png|300px|thumb|right|Рисунок 1.]] 
Токен {{---}} один или несколько нетерминалов, для удобства объединяемые по смыслу в одну логическую единицу.
 
curToken {{---}} текущий токен строки.
 
nextToken() {{---}} записывает в curToken следующий за ним токен.
 
A() : Node
Функции для <tex>T</tex> и <tex>T'</tex> строятся аналогично.
Рассмотрим разбор выражения (1 + 2) * 3.
[[Файл:parse_ex1.png|400px|thumb|right|Рисунок 12. Дерево разбора выражения (1 + 2) * 3]] Рассмотрим дерево разбора для выражения (1 + 2) * 3 и несколько первых шагов алгоритма рекурсивного разбора. Сначала вызывается функция стартового нетерминала грамматики, то есть <tex>Е</tex>. Так как первым токеном является '(', то будет использовано первое правило разбора <tex>TE'</tex>. Поэтому к вершине с меткой <tex>Е</tex> добавятся два ребёнка: <tex>T</tex> и <tex>E'</tex>. А рекурсивный разборщик перейдёт к нетерминалу <tex>T</tex>По-прежнему curToken равен '(', поэтому в <tex>F</tex> сработает второй case, первым ребёнком добавится '(', curToken станет равен <tex>1</tex>, а разборщик перейдёт к нетерминалу <tex>E</tex>. После того как выражение после '(', которое выводится из <tex>E</tex>, будет полностью разобрано, функция рекурсивного разбора для <tex>F</tex> добавит ')' последним сыном к этому нетерминалу. Продолжая в том же духе, мы построим всё дерево разбора данного выражения.
{{TODO | t = Построение таблицы предиктивного анализа}}
Анонимный участник

Навигация