Грамматику, которую будет распознавать наш парсер, можно описать так:
Грамматику, которую будет распознавать наш парсер, можно описать так:
[variable]
[(]
tokens: (, ), num, var, -, +, /, *, set, end Это довольно типичная грамматика простого языка выражений, допускающая произвольную вложенность выражений (некоторые примеры выражений можно найти в конце листинга модуля testparser, представленного в примере 19.15). Анализируемые строки представляют собой выражение или присваивание значения переменной (set). В выражениях участвуют числа, переменные и операторы +, -, * и /. Поскольку в грамматике factor вложен в expr, то * и / имеют более высокий приоритет (то есть связывают сильнее), чем + и -. Выражения могут заключаться в круглые скобки, чтобы переопределять старшинство операций, и все операторы являются левоассоциативными (например, выражение 1-2-3 интерпретируется как (1-2)-3). |
term -> <number> term -> <variable> term -> '(' <expr> ')' |
[number, variable, ( ] |
[END, ) ] [+] [-] |
[number, variable, ( ] |
[set] |
![]() |
![]() |
||||||||||||
![]() |
![]() |
||||||||||||
![]() |
![]() |
||||||||||||
![]() |
![]() |
||||||||||||
![]() |
|||||||||||||
![]() |
![]() |
||||||||||||
![]() |
бор возможных последующих лексем, чтобы знать, когда остановиться. Обычно лексемы распознаются обработчиком строк (лек си че ским ана- ли за тором, или «сканером»), а обработчик более высокого уровня (син- так си че ский ана ли за тор, или «парсер») использует поток лексем для предсказания и прохода грамматических правил и подстрок.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011