2012-02-26 71 views
0

所以,我正在設計一個解釋器作爲一個項目的語言。接受的程序可以包含零個或多個聲明,然後是零個或多個聲明。我調用了一個不同的(遞歸)過程來處理這兩種可能性,每個過程在完成時返回True或在出錯時返回False。Python解析輸入作爲解釋器

聲明可以從在該聲明陳述來區分總是與非末端的「類型」(其本身是一個返回真虛假另一過程)開始。

所以我的問題如下。我需要檢查兩個錯誤以及輸入文件開始處的聲明何時完成。以下是從頂層將檢查聲明和語句一個片段:根據你的代碼是否有

while self.declaration(): 
    #Do stuff 
while self.statement(): 
    #Do stuff 

所以你遞歸旅行下來這些函數調用,您最終會返回真或假任何錯誤。但同時,我需要能夠檢查什麼時候沒有更多的聲明,這些聲明會從聲明()循環移動到聲明()循環。

換句話說,在第一循環中,代碼將返回False時都遇到錯誤,當宣佈結束。我該如何解決?

注:兩種功能移動索引(從代碼中提取單個關鍵字)前在節目中,這意味着我不能把額外的檢查,以確定是否「類型」旁邊。

也許我可以在解析器開始前預讀(使用該索引)和統計代碼申報數量,然後調用聲明()爲我所檢測到的申報數量。任何人都可以想出更好的解決方案嗎謝謝你的幫助。

這裏是合法的代碼(無視變量是否會包含任何有用的)樣本:

int c ?     #Declaration 
if (foo < 3) { 
    a is 7 ? 
} 

這裏是非法的代碼示例:

if (foo < 3) { 
    array int [ 3 ] a ? #Declaration 
} 
int c ?     #Declaration 

問題的關鍵是,任何的聲明在接受的程序中製作的應該在所有其他聲明之前。

+0

也許你可以發表你的語言樣本,包括聲明和陳述? – 2012-02-27 00:16:57

回答

0

我最終什麼事做了退出的錯誤,並且不正確的路徑取下來的遞歸樹計數假。這是相當簡單和令人驚訝的準確。