我有一条规则来匹配语法中的一个字符串。我目前需要的是字符串的内容,而不是引号本身,所以我想把引号去掉。
StringLiteral
: UnterminatedStringLiteral '"'
;
UnterminatedStringLiteral
: '"' (~["\\\r\n] | '\\' (. | EOF))*
;
我在 https:/theantlrguy.atlassian.netwikispacesANTLR3pages2687006如何+我+条+引号? 但它是ANTLR的旧版本,我需要把它翻译成Python3。谁有办法解决这个问题?
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])}
;