ANTLR 优先规则
示例
几个词法分析器规则可以匹配相同的输入文本。在这种情况下,令牌类型将选择如下:
首先,选择与最长输入匹配的词法分析器规则
如果文本与隐式定义的标记匹配(例如'{'),请使用隐式规则
如果多个词法分析器规则匹配相同的输入长度,请根据定义顺序选择第一个
以下是组合语法:
grammar LexerPriorityRulesExample;
//解析器规则
randomParserRule: 'foo'; //隐式声明的令牌类型
//Lexer规则
BAR: 'bar';
IDENTIFIER: [A-Za-z]+;
BAZ: 'baz';
WS: [ \t\r\n]+ -> skip;给出以下输入:
aaa foo bar baz barz
将从词法分析器生成以下令牌序列:
IDENTIFIER 'foo' BAR IDENTIFIER IDENTIFIER
aaa是类型IDENTIFIER
只有IDENTIFIER规则可以匹配此令牌,没有歧义。
foo是类型'foo'
解析器规则randomParserRule引入了隐式'foo'令牌类型,该类型比IDENTIFIER规则优先。
bar是类型BAR
该文本与在BAR规则之前定义的IDENTIFIER规则匹配,因此具有优先权。
baz是类型IDENTIFIER
该文本与BAZ规则匹配,但也与IDENTIFIER规则匹配。后者是按之前定义的那样选择的BAR。
给定语法,BAZ它将永远无法匹配,因为该IDENTIFIER规则已经涵盖了所有BAZ可以匹配的内容。
barz是类型IDENTIFIER
该BAR规则可以匹配此字符串(bar)的前3个字符,但是该IDENTIFIER规则将匹配4个字符。当IDENTIFIER匹配更长的子字符串时,将选择BAR。
根据经验,应在更通用的规则之前定义特定的规则。如果规则只能匹配先前定义的规则已覆盖的输入,则将永远不会使用该规则。
隐式定义的规则(例如)的'foo'行为就像在所有其他词法分析器规则之前定义的一样。
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下