[英]Is there a way to avoid g4 tokenize a variable name as a laxer rule when we want?
我定义了一些词法分析器规则,如下所示:
DATE: D A T E ;
ID : '&'*? IDENTIFIER ;
IDENTIFIER : [a-zA-Z_] [a-zA-Z_0-9]*;```
但是对于如下所示的编码行:
keep date column1 column2;
因为这里的日期是变量名而不是关键字DATE。 所以我的问题是,我是否可以让 g4 将日期视为 ID 而不是 DATE 的词法分析器规则?
ANTLR 词法分析器绝不会受到您的解析器规则的影响。
它直接针对输入的字符 stream 进行操作,并且,如果多个规则匹配一个字符序列,则这两个规则打破平局。
1 - 匹配最长 stream 个输入字符的规则优先。 (在您的情况下, IDENTIFIER
规则和DATE
规则都匹配“日期”字符序列。
2 - 如果两个规则匹配相同长度的字符序列,则第一个规则“获胜”。 (在您的情况下, DATE
规则首先出现,因此“日期”字符序列将被识别为DATE
标记。
解析规则可能正在寻找IDENTIFIER
完全没有区别; Lexer 在不受解析器规则影响的情况下对输入进行了标记化,并且解析器规则与从 Lexer 生成的标记输入 stream 相匹配。
如果您希望此上下文中的“日期”是可接受的,那么您需要让您的解析器规则在该解析器规则中接受IDENTIFIER
和DATE
标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.