2010-05-15 60 views
1

我嘗試寫一些簡單的規則,我得到這個模棱兩可ANTLR 3含糊

rule: field1 field2; //ambiguity between nsf1 and nsf2 even if I use lookahead k=4 

field1: nsf1 | whatever1...; 
field2: nsf2 | whatever2...; 

nsf1: 'N' 'S' 'F' '1'; //meaning: no such field 1 
nsf2: 'N' 'S' 'F' '2'; //meaning: no such field 2 
  1. 我理解的歧義,但我不明白爲什麼向前看不解決這個問題。

  2. 我有一個簡單的解決方案,但我不喜歡它:

    規則:(NSF1(NSF2 | whatever2)) | (whatever1(nsf2 | whatever2));

有沒有人有更優雅的解決方案?

非常感謝, 克里斯

回答

0

我無法重現你的問題,但我所能做的就是猜什麼「whatever1」和規則「whatever2」是。你能發表更完整的語法嗎?

但是,語法中沒有任何東西不能完全用詞法分析器標記而不是解析器規則來完成。嘗試大寫所有的規則名稱,把它們變成詞法分析標記,看看是否有幫助。

+0

確實存在虛假問題,我的描述中出現錯誤:-( 謝謝 – kcris 2010-05-15 18:44:17