这个问题埋在另一个问题的更新部分,现在专门问它。
我正在使用antlr3.4。
我有一个简单的语法试图解析两种类型的文本,该行以“#include”和其他开头。这是我的语法:
cmds
: cmd+
;
cmd
: include_cmd | other_cmd
;
include_cmd
: INCLUDE DOUBLE_QUOTE FILE_NAME DOUBLE_QUOTE
;
other_cmd
: (~INCLUDE)+
;
INCLUDE
: '#include'
;
DOUBLE_QUOTE
: '"'
;
FILE_NAME
: ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')+
;
New_Line
: ('\r' | '\n')+
;
WS
: ('\t' | ' ')+ {$channel = HIDDEN;}
;
但我收到这样的警告:
Decision can match input such as "{DOUBLE_QUOTE..FILE_NAME, New_Line..WS}" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
我想这是因为双引号可以同时匹配 other_cmd 规则和 DOUBLE_QUOTE 规则,但我想知道,一个是解析器规则,另一个是词法分析器规则,这个警告有意义吗?
任何帮助清除此警告?
一个附带问题 - 警告消息只是说替代 1,2,但我并不清楚什么是 1,什么是 2,有没有办法让 antlr 提供更直接的替代方案?