Я знаю, что уже есть несколько смутно похожих вопросов, касающихся грамматик BNF (Backus-Naur Form) в Python, но ни один из них не очень помогает мне с точки зрения моего приложения.
У меня есть несколько BNF, для которых мне нужно написать код. Код должен иметь возможность как генерировать, так и распознавать допустимые строки с использованием грамматики BNF.
Первый BNF, с которым я работаю, предназначен для всех действительных чисел в Python. Это выглядит следующим образом:
<real number> ::= <sign><natural number> |
<sign><natural number>'.'<digit sequence> |
<sign>'.'<digit><digit sequence> |
<sign><real number>'e'<natural number>
<sign> ::= ‘’ | ‘+’ | ‘-‘
<natural number> ::= ‘0’ | <nonzero digit><digit sequence>
<nonzero digit> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<digit sequence> ::= ‘’ | <digit><digit sequence>
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Любые парсеры BNF, которые я нашел для Python, кажутся чрезвычайно сложными или используют сторонние библиотеки. Есть ли более простой способ проверки и генерации с использованием грамматики BNF в Python?
ast
иtokenize
. - person Jon Clements♦   schedule 24.12.2012