ANTLR4:词法分析器在词法分析器模式下返回单个标记



我正在尝试将词法分析器模式与ANTLR4一起使用,并使用以下词法分析器语法:

STRING: '"' -> pushMode(STRING_MODE);
mode STRING_MODE;
STRING_CONTENTS: ~('"'|'n'|'r')+ -> type(STRING);
END_STRING: '"' -> type(STRING), popMode;
STRING_UNMATCHED: . -> type(UNMATCHED);
  • 有没有办法为模式中捕获的所有字符返回 STRING 类型的单个标记,包括导致进入模式的字符?
  • 模式何时结束?

我知道我也可以像这样编写字符串令牌:

STRING: '"' (~["nr]|'\"')* '"';

1(more属性会将匹配的文本累积到非more属性规则发出的第一个标记中。

为:

STRING: '"' -> more, pushMode(STRING_MODE);
mode STRING_MODE;
STRING_CONTENTS: ~('"'|'n'|'r')+ -> more ;
END_STRING: '"' -> type(STRING), popMode;

STRINGSTRING_CONTENTS规则匹配的文本将附加到END_STRING规则的文本前面,从而生成包含字符串全文的STRING类型标记。

2(模式语句的"结束"由第一次后续相遇所暗示

  • 解析器规则
  • 另一个模式语句
  • 片段规则
  • EOF学位

最新更新