2010-10-08 29 views
4

我想知道如何生成Python語言的語法以及解釋器如何理解它。如何生成python語法以及解釋器如何理解它

在python中,文件graminit.c似乎實現了語法,但我不清楚它。

更廣泛地說,生成語法的方法有哪些,語法如Perl,Python或Lua等語言如何實現方面存在差異。

回答

8

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

Lexer /解析器可以採取非常不同的形式。

詞法分析器將輸入文件分解爲標記。解析器使用語法根據其規則查看令牌流是否爲「有效」。

通常結果是一個抽象語法樹(AST),然後可以用它來生成任何你想要的東西,比如字節碼或彙編。

+0

誰提出了新的問題,小的反響。我知道語言的描述形式,但不知道他們被稱爲BNF。 我猜AST樹和它的源代碼是由Lexer生成的。你有典型的例子嗎? – ohe 2010-10-08 12:28:22

+0

我認識的所有人都是基於Java的:ANTLR,Bison,JavaCC。不知道Python。 – duffymo 2010-10-08 12:42:46

+0

我的意思是,你有BNF/AST語法實現的典型和簡單的例子。 – ohe 2010-10-08 14:56:54

2

有很多方法來實現lexing/parsing,它確實歸結爲識別模式以及它們如何組合在一起。有幾個很好的Python包可以完成這個工作,從純Python到包裝C代碼。特別是Pyparsing有很多很好的例子。值得注意的一件事,找到一個直接的EBNF/BNF解析器有點困難 - 用Python代碼編寫解析器並不可怕,但它離原始語法更遠了一步,這對您可能很重要。