2012-11-25 69 views
2

我有一個關於運算符優先級和相關性的問題。野牛 - 運算符優先級

在每一個例子中,我看到的作品都是這樣expr 'op' expr,例如:http://dinosaur.compilertools.net/bison/bison_8.html

但是,如果我會用野牛%left及其他關聯工具,以及我會用語法類似:

expr|  expr binop expr 
     |  expr relop expr 
     |  expr logical_op expr 

binop: '+' 
     | '-' 
     | '*' 
     | '/' 
     ; 
relop: EE 
     | NE 
     | LE 
     | '<' 
     | GE 
     | '>' 
     ; 
logical_op: AND 
      | OR 
      ; 

將結合性和優先級規則中使用?

還是我需要爲每個操作員編寫明確的expr 'op' expr

我在問,因爲當我嘗試使用像我發佈的那樣的語法時,我會收到有關衝突的警告。

但是,當我手寫我寫產品如expr '+' expr我沒有得到任何警告。

回答

5

要使優先規則生效,終端本身必須出現在模糊的生產中。因此,您不能將終端分組到非終端,並保留使用優先規則的能力。

+0

謝謝您確認我的懷疑。 – Andna

1

我更喜歡添加語法規則(生產)來說明操作符優先級。看到我的回答here

+0

有趣的是,我知道這種使算子優先級被語法反映的技術,但我想使用與野牛一起出現的工具。無論如何感謝提醒我其他可能性 – Andna