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