2009-11-21 52 views
9

嘿,這是我在Stack Overflow上的第一個問題,我想知道是否我可以問那些比我更瞭解Python和Parser Generators的人的建議。對Python解析器生成器的建議

我已經給了一個任務,我必須爲簡單的C語言創建一個解析器。我可以使用任何編程語言和工具來創建解析器,但我同時學習Python,因此它是我的首選。

我的解析器必須遵循幾個限制。首先,它必須能夠在包含以下信息的文本文件閱讀:

kind1 : spelling1 
kind2 : spelling2 
kind3 : spelling3 
     . 
     . 
     . 
kindn : spellingn 

其中每一種和拼寫指的是語言的令牌類型和值。該文件是通過語言的詞法分析器添加代碼示例的結果。

其次,我必須能夠自定義解析器的輸出。理想情況下,我想輸出一個已將類型轉換爲文本的文件:拼寫列表轉換爲另一個將傳遞給語言編譯器以轉換爲MIPS彙編代碼的令牌序列。下面是這種事情的一個小例子,我想解析器能夠產生:

%function int test 
    %variable int x 
    %variable int y 
%begin 
    %if %id y , %id x > %do 
    %begin 
    %return %num 0 
    %end 
    %return %num 1 
%end 

這將是一個很大的幫助,如果有人能在現有的Python解析器生成勸我,如果我能在上面的例子中實現我正在尋找的東西。

回答

10

PyParsing是一個生成解析器的python工具。有一個lot of interesting examples

容易上手:

from pyparsing import Word, alphas 

# define grammar 
greet = Word(alphas) + "," + Word(alphas) + "!" 

# input string 
hello = "Hello, World!" 

# parse input string 
print hello, "->", greet.parseString(hello) 
5

它看起來像一個pyparsing工作給我。而且它也使操作輸出變得相對容易。

+0

感謝您的建議。我一定會看看PyParsing。 – greenie 2009-11-21 18:10:09

1

我建議你看看雲雀:https://github.com/erezsh/lark

它可以分析所有的上下文無關文法,它會自動建立一個AST(與線&列號),並接受EBNF格式,它是語法簡單寫,它被認爲是標準。