1
我创建了一个示例语法和生成的Java源代码并编译它们并执行我的示例语法,但出现如下错误。ANTLR4:没有可行的替代输入错误
C:\devEnvironments\antlr>java org.antlr.v4.runtime.misc.TestRig mytest.RuleTest
column_spec -tree
aaa.bbb.ccc
^Z
line 1:0 no viable alternative at input 'aaa.bbb.ccc\r\n'
(column_spec aaa.bbb.ccc\r\n)
以下是我的规则源代码。
grammar RuleTest;
@header {
package mytest;
}
column_spec:
((schema_name DOT)? table_name DOT)? column_name ;
ID:
('A'..'Z' | 'a'..'z' | '_' | '$') ('A'..'Z' | 'a'..'z' | '_' | '$' | '0'..'9')*
;
// identifiers --- http://dev.mysql.com/doc/refman/5.6/en/identifiers.html --------------
schema_name : ID;
table_name : ID;
engine_name : ID;
column_name : ID;
view_name : ID;
parser_name : ID;
index_name : ID;
partition_name : ID;
partition_logical_name : ID;
constraint_symbol_name : ID;
foreign_key_symbol_name : ID;
collation_name : ID;
event_name : ID;
user_name : ID;
function_name : ID;
procedure_name : ID;
server_name : ID;
wrapper_name : ID;
alias : (AS_SYM)? ANY_STRING;
ANY_STRING:
~(' ')+;
DOT : '.' ;
AS_SYM : 'as';
WS : [ \t\r\n]+ -> skip ;
我不知道为什么'\ r','\ n'字符没有被跳过,为什么会发生这种错误? 我用antlr 4.4版本。
为了增强Sams的答案:创建一个匹配一个或多个ANY_STRING_CHAR并在先前使用过ANY_STRING的地方使用它的规则'anyString'。 – Onur 2014-09-08 06:39:22