gpt4 book ai didi

escaping - 如何使用 ANTLR 4 转义转义字符?

转载 作者:行者123 更新时间:2023-12-02 19:07:01 24 4
gpt4 key购买 nike

许多语言用某种引号绑定(bind)字符串,如下所示:

“罗布·马尔达很聪明。”

ANTLR 4 可以使用如下的词法分析器规则来匹配这样的字符串:

引用字符串:'"'.*?'"';

要在字符串中使用某些字符,必须对它们进行转义,也许像这样:

“Rob\“Taco 指挥官”Malda 很聪明。”

ANTLR 4 也可以匹配该字符串;

转义字符串:'"' ('\\"|.)*? '"';

(摘自《The Definitive ANTLR 4 Reference》第 96 页)

这是我的问题:假设转义字符与字符串分隔符相同。例如:

“罗布”“塔科指挥官”“马尔达很聪明。”

(这在 Powershell 中是完全合法的。)

什么词法分析器规则会匹配这个?我认为这会起作用:

转义字符串:'"' ('""'|.)*? '"';

但事实并非如此。词法分析器将转义字符 " 标记为字符串分隔符的结尾。

最佳答案

使用~运算符否定某些字符:

EscapedString : '"' ( '""' | ~["] )* '"';

或者,如果字符串中不能有换行符,请执行以下操作:

EscapedString : '"' ( '""' | ~["\r\n] )* '"';

您不想使用非贪婪运算符,否则 "" 永远不会被消耗,并且 "a""b" 将被标记为 “a”“b” 而不是单个标记。

关于escaping - 如何使用 ANTLR 4 转义转义字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800106/

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