2011-04-10 96 views
0

我有一個關於編寫遞歸下降分析來檢查pascal語法的問題。 我有這個代碼,例如:pascal語法分析器中的遞歸下降分析

a := c ; 

我看到一個,c是變量。 :=和; - 是終端。這個表達我可以檢查。但是,如果我有這樣的smth:

a := c + 1 - d ; 

我有問題如何編寫此表達式的遞歸下降解析。

對於第一個例子我在C#寫這樣的:

if ((!parsing(current_token, "var")) || (!current_token, ":=")) || ( !parsing(current_token, "var") && !parsing(current_token, "const") ) || (!current_token, "term"))) show_error(); 

我怎麼能寫第二個例子嗎? 謝謝。在帕斯卡爾

+0

這是一個家庭作業?請適當標記以便您得到適當的回覆 – sehe 2011-04-10 19:26:01

回答

0

變量賦值有以下BNF

variable := expression 

所以,你需要分析以下的:=標記的表達。當你標記代碼時,你需要確定什麼是有效的下一個標記,所以在這種情況下,你會發現你有一個變量後跟一個:=運算符,所以你現在應該回到你的表達式解析器函數中。

編寫一個好的表達式解析器對解析任何有價值的語言都很重要, For循環,如果語句,Case語句等

我做了一個快速BING,發現這個BNF爲帕斯卡這可能有助於

http://www2.informatik.uni-halle.de/lehre/pascal/sprache/pas_bnf.html