域名解析器的语法

时间:2014-03-01 22:10:27

标签: antlr antlr4

我正试图让域名的语法有限。语法在http://tools.ietf.org/html/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     : [\r\n]+   ;

但是,当我尝试与line 1:0 mismatched input 'abc123' expecting LETDIG匹配时,我会收到abc123。我的语法出了什么问题?

由于

1 个答案:

答案 0 :(得分:0)

所有这些帮助规则都需要成为片段规则。查看关键字“antlr片段规则”,它应该可以帮到你。任何仅用于帮助其他令牌但未发送回解析器的令牌都被视为片段规则。