我正在努力验证Rust解析器对用antlr编写的模型的手写内容。我遇到了antlr转义字符串的问题:
[15:48:50]~/src/rust2/src/grammar> grun RustLexer tokens -tokens
"\n"
[@0,0:3='"\n"',<46>,1:0]
和
[15:51:15]~/src/rust2/src/grammar> grun RustLexer tokens -tokens
"
"
[@0,0:2='"\n"',<46>,1:0]
创建相同的字符串内容。有没有办法让antlr在这里以任何其他方式行事?特别是,如果它从文字\
转义为\\
,我可以接受,然后我可以在我的工具中删除它们。目前,我正在丢失有关输入的信息。
答案 0 :(得分:1)
grun
可能正在将"\n"
扩展到换行符,因为词法分析器肯定不会这样做(幸运的是)。
鉴于语法Test
:
grammar Test;
parse
: .*? EOF
;
LINE_BREAK
: '\n'
;
OTHER
: .
;
解析"\n\\n"
:
TestLexer lexer = new TestLexer(new ANTLRInputStream("\n\\n"));
for (Token token : lexer.getAllTokens()) {
System.out.printf("%s -> <%s>%n", TestLexer.ruleNames[token.getType() - 1], token.getText());
}
将打印以下内容:
LINE_BREAK -> <
>
OTHER -> <\>
OTHER -> <n>
B.t.w。,我认为你知道this repository?