在ANTLR语法中,对解析器和词法规则的调用顺序是什么?例如,在下面的语法中,
223
总是被识别为APLHANUMERIC而不是数字。
digit : F_DIGIT+;
alpha : APLHANUMERIC;
APLHANUMERIC : (LOWERCASE | UPPERCASE | F_DIGIT | '_')+ ;
fragment LOWERCASE : [a-z] ;
fragment UPPERCASE : [A-Z] ;
fragment F_DIGIT : [0-9] ;发布于 2021-09-13 19:07:55
以下是对以下评论的一点阐述:
Tokenizer (AKA )将始终处理输入流,生成一个令牌流,以便解析器规则在识别源结构时使用。
唯一的“调用顺序”是托卡器在解析器之前运行(显然是必要的,因为解析器对解析器产生的令牌起作用)。
对于lexer规则,所有规则都在逻辑上应用于输入流。如果您有多个能够与输入中的下一个字符匹配的Lexer规则,则将使用两个规则。
1-如果一个Lexer规则匹配一组较长的字符,那么它将用于生成令牌。
2-如果多条规则匹配输入流中相同数量的字符,那么第一个出现在语法中的规则将“获胜”。
fragments不是词汇规则。它们只是一种方便,您可以利用它们来编写词法规则,以避免重复和帮助可读性。
在解析器中,选择起始规则,然后解析器处理该规则的内容(递归地调用构成该规则的规则及其子规则,等等)。唯一涉及的“顺序”是ANTLR将按顺序对规则中的顶级备选方案进行评估,这可以用于处理诸如算术表达式中适当的运算符优先级等问题。
https://stackoverflow.com/questions/69165802
复制相似问题