ANTLR4:在词法分析器模式下,词法分析器返回单个令牌

时间:2018-09-12 21:53:58

标签: 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: '"' (~["\n\r]|'\\"')* '"';

1 个答案:

答案 0 :(得分:2)

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