【问题标题】:Antlr Lexer rule excluding tokensAntlr Lexer 规则不包括标记
【发布时间】:2016-11-01 02:16:37
【问题描述】:

这是我的 ANTLR4 语法片段:

词法分析器规则:

AND                 : ('a'|'A') ('n'|'N') ('d'|'D');
OR                  : ('o'|'O') ('r'|'R') ;
NOT                 : ('n'|'N') ('o'|'O') ('t'|'T') ;

TERM                : ('a'..'z'|'A'..'Z'|'0'..'9'|[1-9])+ ;

解析器规则:

negation: NOT;
logical:  AND|OR;
term:     TERM;

search
   : negation? term (logical negation? term)* ;
   ;

基本上我试图让它解析 "you and me" 字符串,以便 TERM 令牌匹配 "you", "me" 我希望 "and" 能够被 AND 规则识别,而不是 TERM 规则。

现在我得到:line 1:4 missing TERM at 'and' 错误。

我知道我的输入同时被 AND 和 TERM 词法分析器规则匹配,但我希望能够指定 TERM 是任何东西除了匹配 AND 规则的东西。

【问题讨论】:

  • 当您在 antlr 中有这种非常典型的关键字/标识符公共前缀歧义时,您应该考虑使用“文字”功能。 (见antlr2.org/doc/options.html#literal
  • 看起来你需要添加一个空格规则。

标签: antlr4 lexer


【解决方案1】:

尝试将以下内容添加到您的词法分析器规则中:

WS : [ \r\n\t\u000C]+ -> skip ;

基本上,这是一个匹配任何空白、制表符、换行符、tr 的标记,而skip 是您告诉 ANTLR 跳过它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多