1

我正在对文本文件进行词法分析,但出现此异常:

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

在 antlr 中将 BASENOTE 定义为

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

但问题仍然存在。

4

2 回答 2

1

同样匹配的词法分析器规则C位于BASENOTE您的语法之前。当输入C被分配一个标记类型时,该词法分析器规则因其位置而具有优先权。

于 2013-10-30T19:41:26.870 回答
0

好的,我意识到不能使用其他标记定义标记。解决了这个问题 - 一切正常。

于 2013-10-30T19:52:14.610 回答