Python语法是如何生成的,解释器又是如何理解它的
我想知道Python语言的语法是怎么生成的,以及解释器是如何理解这些语法的。
在Python中,文件graminit.c
似乎是用来实现语法的,但我不是很明白里面的内容。
更广泛地说,生成语法的不同方法有哪些?在Perl、Python和Lua等语言中,语法的实现有什么不同吗?
2 个回答
2
实现词法分析和语法解析的方法有很多,关键在于识别出模式以及它们是如何组合在一起的。有一些非常不错的Python库可以用来做这件事,从纯Python到用C语言封装的都有。特别是Pyparsing,里面有很多很好的例子。值得注意的是,找到一个纯粹的EBNF/BNF解析器有点困难——用Python代码写一个解析器并不算太糟,但这离原始语法规则还有一步之遥,这可能对你来说很重要。
8
语法通常都是类似的形式:常见的有巴科斯-诺尔形式(BNF)。
而词法分析器和解析器的形式可以差别很大。
词法分析器的工作是把输入的文件拆分成一个个小的单元,叫做“标记”。解析器则利用语法规则来检查这些标记的顺序是否符合规定。
通常,最后的结果是一个抽象语法树(AST),这个树可以用来生成你想要的东西,比如字节码或汇编代码。