首页 > 解决方案 > 如何使用 C++ 运行时从 CSS 中提取 ANTLR4 引用字符串

问题描述

我正在使用来自https://github.com/antlr/grammars-v4/tree/master/css3的 ANTLR4 和 CSS 语法。它大部分都在工作,但是当我在 CSS 中使用带引号的字符串时遇到了问题。例如,使用以下 CSS

.b1
{
  font-family: "Gill Sans", serif;
}

我想提取“Gill Sans”和“serif”,两者都没有引号。当在字符串周围使用引号时,解析器会生成 a KnownTermContext,然后有一个String()返回 a 的方法antlr4::tree::TerminalNode*。该返回对象的getText()方法返回字符串,包括引号。似乎String()仅在引用字符串时才有效,因此理论上我可以在这种情况下手动删除引号,但在使用像 ANTLR 这样的解析器时似乎没有必要这样做。

有没有办法提取删除引号的字符串,或者在这种情况下由调用者来删除引号?

标签: c++cssantlr4

解决方案


[...] 还是由调用者在这种情况下删除引号?

是的,这是正确的。ANTLR 中没有办法从标记中去除字符(即没有目标特定代码)。这可以在遍历侦听器或访问者中的解析树时完成。


推荐阅读