2011-10-31 122 views
0

我目前在CSCI類,編譯器在我的大學。我必須爲編譯器編寫一個解析器,並且我已經完成了添加減法乘法除法和賦值語句。我的問題是我們現在必須做的不到相等的(< =)和大於等於(> =),我不知道如何寫它的規則... 我在想像的東西像...創建解析器規則

expr LESSTHAN expr     { $1 <= $3 } 

expr GREATERTHAN expr    { $1 >= $3 } 

有什麼建議嗎?

+2

我剛添加了作業標籤。請將它用於作業問題。請注意,提問者的負擔通常高於作業問題。您可能想要提供更多內容來說明您在問題中已經完成的工作。具體來說,你爲什麼在這個操作符上遇到問題,而不是乘法運算符?是什麼讓你不同?它的優先級低於加法(一般),所以結構關係應該遵循模式增加是多重的,因爲更重要的是增加。 – ccoakley

+3

這個問題缺乏所有的上下文。什麼解析器生成器?你現有的語法定義是什麼?這種語言不可知論?請根據情況標籤 – sehe

回答

0

你應該包括一個更精確的問題。以下是一些一般性建議。

關係操作規則的結構應該與算術操作相同。在這兩種情況下你都有二元運算符。區別在於一個返回一個數字,另一個返回一個布爾值。雖然1 + 1 >= 3通常是有效的語法,但其他組合如1 >= 2 => 5很可能無效。當然,也有例外。有些語言允許它作爲多種操作的語法糖。其他人只是定義布爾值只是整數(01)。這取決於你(或你的任務)你想要的語法。

無論如何,你可能不只是想將這些規則附加到expr,而是創建一個新的規則。這樣你可以區分關係和算術表達式。

expr : 
    expr PLUS expr | 
    expr MINUS expr | 
    ... ; 

relational_expr : 
    expr LESSTHAN expr | 
    expr GREATERTHAN expr ; 

assignment : 
    identifier '=' relational_expr | 
    identifier '=' expr   ;