2
我試圖解析以下文本格式解析`任何string`:ANTLR4 - 不消耗整個輸入
<identifier> {
<identifier> : <any-text-without-white-space-or-new-line> : <identifier>
<identifier> : <identifier>.<identifier>
}
例如:
john {
name : JohnJohnson.12.453.643-USA[NewYork] : default
reference : something.else
}
我已經創建瞭如下語法:
SPACE : [ \t\r\n]+ -> skip;
LEFT_BRACE : '{';
RIGHT_BRACE : '}';
COLON : ':';
DOT : '.';
ID : [a-z]+
ANY : ~(' '|'\t'|'\r'|'\n')+;
outer : ID LEFT_BRACE inner_first inner_second RIGHT_BRACE EOF;
inner_first : ID COLON (ANY | ID) COLON ID;
inner_second : ID COLON ID DOT ID;
這個語法的問題是<identifier>.<identifier>
在第二行的輸入被識別爲
ANY
,而不是作爲
ID DOT ID
我可以解決這個問題,如果我改變的ANY
的定義:
ANY : ~(' '|'\t'|'\r'|'\n'|'.')+;
但這意味着.
符號不能再作爲第一行中任意文本的一部分。
這看起來像一個雞/雞蛋問題。這是可以解決的嗎?
(FWIW,我讀了偉大的書The Definitive ANTLR 4 Reference
我買前一段時間,但我還沒有找到一個解決辦法呢。)