我想知道如何生成Python语言的语法以及解释器如何理解它。
在python中,文件graminit.c
似乎实现了语法,但我不清楚它。
更广泛地说,生成语法的不同方法是什么,并且在Perl,Python或Lua等语言中如何实现语法之间存在差异。
答案 0 :(得分:8)
语法通常具有相同的形式:Backus-Naur形式(BNF)是典型的。
Lexer /解析器可以采用非常不同的形式。
词法分析器将输入文件分解为标记。解析器使用语法根据其规则查看令牌流是否“有效”。
通常结果是抽象语法树(AST),然后可以用来生成任何你想要的东西,比如字节码或汇编。
答案 1 :(得分:2)
有许多方法可以实现lexing / parsing,它实际上归结为识别模式以及它们如何组合在一起。有一些非常好的Python包用于执行此操作,范围从纯python到包装的C代码。特别是Pyparsing有许多优秀的例子。有一点值得注意的是,找到一个直接的EBNF / BNF解析器有点难 - 用Python代码编写一个解析器并不是很糟糕,但它比原始语法更进一步,这可能对你很重要。