我正在尝试为域名提供有限的语法。语法定义见 https://www.rfc-editor.org/rfc/rfc1035 第 2.3.1 节。它的子集如下
<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
<let-dig-hyp> ::= <let-dig> | "-"
<let-dig> ::= <letter> | <digit>
<letter> ::= any one of the 52 alphabetic characters A through Z in upper case and a through z in lower case
<digit> ::= any one of the ten digits 0 through 9
我在下面的尝试。我正在尝试匹配label
grammar Domain;
domain: label NEWLINE;
label: LETDIG (LETDIGHYP+ LETDIG)?;
LETDIGHYP : (LETDIG|'-');
LDHSTR : [0-9a-zA-Z-]+;
LETDIG : [0-9a-zA-Z];
NEWLINE : [rn]+ ;
但是,当我试图与abc123
比赛时,我得到了一个line 1:0 mismatched input 'abc123' expecting LETDIG
。我的语法有什么问题?
谢谢
所有这些
帮助程序规则都需要是片段规则。查看关键字"antlr fragment rules",它应该会让你到达那里。 任何仅用于帮助其他令牌且未发送回解析器的令牌都被视为片段规则。