2013-10-30 61 views
1

我樂星的文本文件,我得到這個異常:爲什麼我的輸入不匹配,如果例外文本本身說它應該匹配?

Exception in thread "main" java.lang.RuntimeException: mismatched input 'C' expecting {<EOF>, 'V:', '%', ACCIDENTAL, BASENOTE, 'z', '(', '['} 

隨着BASENOTE在ANTLR被定義爲

BASENOTE : 'C' | 'D' | 'E' | 'F' | 'G' | 'A' | 'B' 
     | 'c' | 'd' | 'e' | 'f' | 'g' | 'a' | 'b'; 

我不明白爲什麼它認爲,「C」是錯誤的因爲它顯然是一個BASENOTE令牌。有人可以照亮它嗎?

編輯: 的BASENOTE前有:

KEYBASENOTE : 'C' | 'D' | 'E' | 'F' | 'G' | 'A' | 'B'; 
METERSHORT : 'C' | 'C|'; 

我改變了BASENOTE說:

BASENOTE : KEYBASENOTE | 'c' | 'd' | 'e' | 'f' | 'g' | 'a' | 'b'; 

但問題仍然存在。

回答

1

一個詞法分析規則也匹配C位於文法的BASENOTE之前。當輸入C被分配了令牌類型時,該詞法分析器規則由於其位置而具有優先權。

+0

在BASENOTE之前有: KEYBASENOTE:'C'| 'D'| 'E'| 'F'| 'G'| 'A'| 'B'; METERSHORT:'C'| 'C |'; 我改變了BASENOTE來說: BASENOTE:KEYBASENOTE | 'c'| 'd'| 'e'| 'f'| 'g'| 'a'| 'B'; 但問題仍然存在。 – Sanuuu

0

好的,我已經意識到令牌不能用其他令牌定義。修正 - 一切正常。