我試圖解析的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