gpt4 book ai didi

antlr4 - 处理以ANTLR4中的转义引号结尾的字符串文字

转载 作者:行者123 更新时间:2023-12-04 22:12:25 29 4
gpt4 key购买 nike

如何编写词法分析器规则以匹配不以转义引号结尾的String文字?

这是我的语法:

lexer grammar StringLexer;

// from The Definitive ANTLR 4 Reference
STRING: '"' (ESC|.)*? '"';
fragment ESC : '\\"' | '\\\\' ;

这是我的java块:
String s = "\"\\\""; // looks like "\"
StringLexer lexer = new StringLexer(new ANTLRInputStream(s));

Token t = lexer.nextToken();

if (t.getType() == StringLexer.STRING) {
System.out.println("Saw a String");
}
else {
System.out.println("Nope");
}

这将输出 Saw a String"\"应该真正匹配 STRING吗?

编辑:280Z28和Bart的解决方案都是很好的解决方案,很遗憾,我只能接受其中一个。

最佳答案

对于正确格式的输入,词法分析器将匹配您期望的文本。但是,使用非贪婪运算符不会阻止它以以下形式匹配某些内容:

'"' .*? '"'

为确保字符串尽可能以最“理智”的方式成为标记,我建议使用以下规则。
StringLiteral
: UnterminatedStringLiteral '"'
;

UnterminatedStringLiteral
: '"' (~["\\\r\n] | '\\' (. | EOF))*
;

如果您的语言允许字符串文字跨越多行,则可能需要修改 UnterminatedStringLiteral以允许匹配行尾字符。

如果不包括 UnterminatedStringLiteral规则,则词法分析器将通过简单地忽略字符串的开头 "字符并继续标记字符串内容来处理未终止的字符串。

关于antlr4 - 处理以ANTLR4中的转义引号结尾的字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24557953/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com