Antlr 处理带有转义字符的字符串

问题描述 投票:0回答:0

我有以下声明:

RETURN "-\\-";
RETURN '-\n-';

antlr4帮我捡的字符串是:

StringLiteral: "-\\-";
StringLiteral: '-\n-';

我打印这个字符串:

"-\\-";
'-\n-';

但这就是我想要的:

-\-;
-
-;

原因是Antlr使用了函数

escapeWhitespace

std::string& escapeWhitespace(std::string& out, std::string_view in) {
    out.reserve(in.size());  // Best case, no escaping.
    for (const auto &c : in) {
      switch (c) {
        case '\t':
          out.append("\\t");
          break;
        case '\r':
          out.append("\\r");
          break;
        case '\n':
          out.append("\\n");
          break;
        default:
          out.push_back(c);
          break;
      }
    }
    return out;
  }

我实际得到的字符串是

\"-\\\\n-\"
,不知道Antlr有没有提供函数让我获取转义后的字符串?

Antlr 版本:4.11.1 语言:C++

c++ escaping antlr antlr4
© www.soinside.com 2019 - 2024. All rights reserved.