如果Exception文本本身说它应该匹配,为什么我的输入不匹配?

时间:2013-10-30 19:35:48

标签: regex exception antlr

我正在写一个文本文件,我得到了这个例外:

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';

但问题仍然存在。

2 个答案:

答案 0 :(得分:1)

C匹配的词法分析器规则位于语法BASENOTE之前。当为输入C分配了令牌类型时,该词法分析器规则因其位置而具有优先权。

答案 1 :(得分:0)

好的,我已经意识到使用其他令牌无法定义令牌。修正了 - 一切正常。