ANTLR4:词法分析器在词法分析器模式下返回单个标记
ANTLR4: Lexer returning a single token when in a lexer mode
我正在尝试使用具有以下词法分析器语法的 ANTLR4 词法分析器模式:
STRING: '"' -> pushMode(STRING_MODE);
mode STRING_MODE;
STRING_CONTENTS: ~('"'|'\n'|'\r')+ -> type(STRING);
END_STRING: '"' -> type(STRING), popMode;
STRING_UNMATCHED: . -> type(UNMATCHED);
- 有没有办法 return 为模式中捕获的所有字符(包括导致进入该模式的字符)使用类型为 STRING 的单个令牌?
- 模式什么时候结束?
我知道我也可以这样写字符串标记:
STRING: '"' (~["\n\r]|'\"')* '"';
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) 模式语句的 'end' 隐含在随后第一次遇到
- 解析器规则
- 另一个模式语句
- 片段规则
- EOF
我正在尝试使用具有以下词法分析器语法的 ANTLR4 词法分析器模式:
STRING: '"' -> pushMode(STRING_MODE);
mode STRING_MODE;
STRING_CONTENTS: ~('"'|'\n'|'\r')+ -> type(STRING);
END_STRING: '"' -> type(STRING), popMode;
STRING_UNMATCHED: . -> type(UNMATCHED);
- 有没有办法 return 为模式中捕获的所有字符(包括导致进入该模式的字符)使用类型为 STRING 的单个令牌?
- 模式什么时候结束?
我知道我也可以这样写字符串标记:
STRING: '"' (~["\n\r]|'\"')* '"';
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) 模式语句的 'end' 隐含在随后第一次遇到
- 解析器规则
- 另一个模式语句
- 片段规则
- EOF