2009-09-20 99 views
0
VARIABLE: ... 

UNARYOP: 'not' Expression; // unary operation 
BINARYOP: 'or' VARIABLE; 

Expression : (NIL | INTEGER | UNARYOP) BINARYOP?; 

在上述情況下, '或' 可以通過ANTLR遞歸模糊問題

Expression-> BINARYOP

EXPRESSION-> UNARYOP-> Expression-> BINARYOP達到

有沒有一種系統的方法來消除如上所述的歧義?

回答

1

我認爲消除語法中的歧義是一個非自動解決的任務,因爲如果選擇哪個替代方案是正確的,那麼這是一種「主觀」選擇。

一旦確定了問題,請構建不同的替代樹並添加新的生產規則以禁止無效的分析樹。

恐怕沒有像去除左遞歸一樣的魔術解決方案......也許我錯了。

你的情況,你可以定義

Expression : NIL 
      | INTEGER 
      | VARIABLE 
      | 'not' Expression 
      | Expression 'or' Expression; 

還是要限制「或」右側只有變量?