python - 如何在Python中实现巴科斯范式

标签 python parsing grammar bnf

我知道已经有一些与 Python 中的 BNF(Backus-Naur 形式)语法相关的模糊相似的问题,但它们对我的应用程序没有太大帮助。

我有多个 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

我发现的用于 Python 的任何 BNF 解析器似乎都异常复杂,或者使用外部库。在 Python 中使用 BNF 语法检查和生成是否有任何更简单的方法?

最佳答案

This post包含一个不需要第三方库的词法扫描器示例。它可能无法满足您的所有需求,但您应该能够将其用作满足您需求的基础。

我不知道您的应用程序是否都与词汇扫描有关 - 但如果不是,ply是一个相当容易使用的解析器(前提是您需要广泛了解解析器的工作原理)。

关于python - 如何在Python中实现巴科斯范式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013792/

相关文章:

python - Plotly:如何交替背景网格颜色?

parsing - 将字符串解析为 f64 和 i64

java - 我应该使用什么 xml 解析器?

haskell - 关注点分离 : when is it best to disassociate semantics from syntax?

python - 使用 Flask 转储 HTTP 请求

python - 如何退出递归数学公式并仍然得到答案

python - 查找 pandas 数据框中先前连续出现与当前行值不同的值的次数

html - Xidel 提取标签内的数据——原始输出

parsing - 解析器表达式语法 - 如何匹配不包括单个字符的任何字符串?

parsing - 表达解析器语法和左联想