2013-05-05 102 views
1

我正在學習龍書,迫不及待地寫了一個表達式解析器。解析算術表達式

爲了處理負數輸入,我的詞法分析器在滿足符號' - '時讀取數字以返回數字標記。

「-4 + 2」 會得到(-4號)(+,運營商)(2號)

但後來我發現,它不能做的事情一樣容易「4 2「,因爲

(4,數字)(-2,數字) 這是一個錯誤的語法。

我的解決方案之一是在評估表達式之前進行一些預處理,例如,如果第一個標記是減號,則附加零。 我想知道你們如何處理這種情況?

謝謝。

+1

把它作爲'( - ,operator),(4,number),(+ operator),(2,number)'並判斷'-'是一元減數還是後面的二進制減法? – 2013-05-05 16:14:42

回答

2

我詞法讀取時滿足符號位「 - 」返回一個負數

不要。一元運算符應該由解析器處理,而不是詞法分析器。

我的解決方案之一是在評估表達式之前進行一些預處理,例如,如果第一個標記是減號,則附加零。

編號修復問題。

當你在洞裏時,停止挖掘。

+0

偉大的意見!謝謝! – babel92 2013-05-07 20:38:33

3

您應該擁有以下語法,但不能將"-" number轉換爲令牌。

number := DIGIT+ 

unary := number 
unary := "-" unary 

expr := expr "+" unary 
expr := expr "-" unary 
... 

由於有一元表達式,它不是運算符優先級語法。你應該用更復雜的解析器解析它。

+0

謝謝!這有助於很多! – babel92 2013-05-07 20:37:56

+0

請注意,此語法不完整。它缺少'期限'和'因素'和'主要'。 – EJP 2013-05-07 21:59:32