我正在尝试将词法分析器模式与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;
与STRING
和STRING_CONTENTS
规则匹配的文本将附加到END_STRING
规则的文本前面,从而生成包含字符串全文的STRING
类型标记。
2(模式语句的"结束"由第一次后续相遇所暗示
- 解析器规则
- 另一个模式语句
- 片段规则
- EOF学位