我试图解析的Name=Value
对,其中的值可以包含除空白任何东西(即值可以包含等号)的列表。
名称仅限于通常的标识符字符。ANTLR相当于野牛拒绝行动?
的问题是,“价值”令牌匹配的一切。例如,对于输入:
dude=sweet
解析器将所述整个输入与“值”令牌(和抛出MismatchedTokenException
)相匹配。
bison,是否有可能为令牌分配状态(或者仅仅是为非终止?),以便它们只有在明确过渡到该状态后才成为“符合条件”匹配。
编辑关于它的思考,这不会在工作野牛要么 - 令牌分裂已经发生(在柔性);但是,我认为有一种方式来REJECT
令牌,迫使柔性尝试了第二最佳匹配。
这里是我的ANTLR语法。
grammar command_string;
start
: commandParam* EOF
;
commandParam
: IDENTIFIER '=' CONTINUOUS_VALUE
;
IDENTIFIER
: ('-'|'_'|'a'..'z'|'A'..'Z'|'0'..'9')+
;
CONTINUOUS_VALUE
: ~(ALL_WS)+
;
WS
: (ALL_WS) + { $channel = HIDDEN; }
;
fragment ALL_WS
: ' ' | '\t' | '\r' | '\n'
;
空格是分隔符 - 这就是为什么它不是在价值观的身体允许的。用'='字符开始这个值听起来像是个好主意。我会尝试的。 – 2009-09-04 12:01:38