了解ANTLR / EBNF括号

问题描述 投票:0回答:1

ANTLR Reference Guide关于括号的说明如下:

enter image description here

另一方面,我有以下语法:

fragment LOWERCASE  : [a-z] ;
fragment UPPERCASE  : [A-Z] ;
fragment DIGIT : [0-9] ;

WORD                : (LOWERCASE | UPPERCASE | DIGIT )+;

如果我运行字符串“ asd90”,则将其作为单词匹配,如下所示:

>java org.antlr.v4.gui.TestRig Myg myg -tokens
asd90
[@0,0:4='asd90',<WORD>,1:0]
[@1,5:6='\r\n',<NEWLINE>,1:5]
[@2,7:6='<EOF>',<EOF>,2:0]

这使我感到困惑,因为我期望“ asd90”不匹配,因为在我的语法中,LOWERCASE和DIGIT是2个不同的子规则,因此我希望它不会与“ WORD”匹配。

换句话说,就像“ intvoid”可以用作返回类型,而显然不是这样。

antlr antlr4 bnf ebnf
1个回答
0
投票

您似乎在考虑中想念循环运算符。词法分析器规则WORD可以匹配任何LOWERCASEUPPERCASEDIGITsequence,这意味着通过使用该循环的5次运行(一旦匹配了asd90小写规则,并且一次匹配数字。

本书中的示例没有循环,因此它只能匹配一次,无论是类型还是void

© www.soinside.com 2019 - 2024. All rights reserved.