我正尝试将ANTLR4与以下词法分析器语法一起使用词法分析器模式:
STRING: '"' -> pushMode(STRING_MODE);
mode STRING_MODE;
STRING_CONTENTS: ~('"'|'\n'|'\r')+ -> type(STRING);
END_STRING: '"' -> type(STRING), popMode;
STRING_UNMATCHED: . -> type(UNMATCHED);
我知道我也可以这样写字符串令牌:
STRING: '"' (~["\n\r]|'\\"')* '"';
答案 0 :(得分:2)
1)more
属性会将匹配的文本累积到非more
属性规则发出的第一个令牌中。
针对:
STRING: '"' -> more, pushMode(STRING_MODE);
mode STRING_MODE;
STRING_CONTENTS: ~('"'|'\n'|'\r')+ -> more ;
END_STRING: '"' -> type(STRING), popMode;
与STRING
和STRING_CONTENTS
规则匹配的文本位于END_STRING
规则的文本之前,从而导致包含字符串完整文本的STRING
型令牌
2)模式语句的“结束”在随后的第一次遇到时暗含