如何生成python语法以及解释器如何理解它

时间:2010-10-08 12:11:09

标签: python grammar

我想知道如何生成Python语言的语法以及解释器如何理解它。

在python中,文件graminit.c似乎实现了语法,但我不清楚它。

更广泛地说,生成语法的不同方法是什么,并且在Perl,Python或Lua等语言中如何实现语法之间存在差异。

2 个答案:

答案 0 :(得分:8)

语法通常具有相同的形式:Backus-Naur形式(BNF)是典型的。

Lexer /解析器可以采用非常不同的形式。

词法分析器将输入文件分解为标记。解析器使用语法根据其规则查看令牌流是否“有效”。

通常结果是抽象语法树(AST),然后可以用来生成任何你想要的东西,比如字节码或汇编。

答案 1 :(得分:2)

有许多方法可以实现lexing / parsing,它实际上归结为识别模式以及它们如何组合在一起。有一些非常好的Python包用于执行此操作,范围从纯python到包装的C代码。特别是Pyparsing有许多优秀的例子。有一点值得注意的是,找到一个直接的EBNF / BNF解析器有点难 - 用Python代码编写一个解析器并不是很糟糕,但它比原始语法更进一步,这可能对你很重要。