我知道在Python中已经有一些关于BNF(Backus Naur Form)语法的模糊相似的问题,但是在我的应用程序方面,这些问题都没有帮助。
我需要为多个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语法进行检查和生成?
看看https://github.com/erikrose/parsimonious
This post包含不需要第三方库的词法扫描程序的示例。它也许不能满足你的所有需求,但你应该能够把它作为满足你需求的基础。
我不知道您的应用程序是否都与词法扫描相关,但如果不是,那么ply是一个相当容易使用的解析器(考虑到您需要广泛了解解析器的工作原理)。
编辑:引用页的备份位于archive.org:
我对grako有很好的经验。
我用它来做parseWKT。
它接受EBNF作为输入并从中生成PEG解析器。
我认为在grako中编写一个BNF到EBNF解析器是很简单的,然后它将从EBNF生成一个解析器
相关问题 更多 >
编程相关推荐