繁体   English   中英

有没有办法在我们需要的时候避免 g4 将变量名标记为更宽松的规则?

[英]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 相匹配。

如果您希望此上下文中的“日期”是可接受的,那么您需要让您的解析器规则在该解析器规则中接受IDENTIFIERDATE标记。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM