ANTLR4 Python3 从字符串中删除引号。

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

我有一条规则来匹配语法中的一个字符串。我目前需要的是字符串的内容,而不是引号本身,所以我想把引号去掉。

StringLiteral
  : UnterminatedStringLiteral '"'
  ;

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

我在 https:/theantlrguy.atlassian.netwikispacesANTLR3pages2687006如何+我+条+引号? 但它是ANTLR的旧版本,我需要把它翻译成Python3。谁有办法解决这个问题?

antlr antlr4
1个回答
0
投票

ANTLR3的语法。

STRING: '\"' CHARS '\"' {setText(getText().substring(1, getText().length()-1));} ;

在ANTLR4中仍然有效 如果你想把这段Java代码移植到Python中,可以这样做。

StringLiteral
  : UnterminatedStringLiteral '"' {self.text = self.text[1:-1]}
  ;

如果你也想去掉引号 \ 用来转义其他字符的,这样做。

grammar YourGrammarName;

@lexer::header {
import re
}

...

StringLiteral
  : UnterminatedStringLiteral '"' {self.text = re.sub(r'\\(.)', '\\1', self.text[1:-1])}
  ;
© www.soinside.com 2019 - 2024. All rights reserved.