忽略字符串文字匹配中的前导和尾随引号

Ignoring leading and tailing quotes in a string literal match

我想将 'Foo' 匹配为 Foo,而不是 'Foo'

我有以下词法分析器规则:

STRING_LITERAL
 : '\'' ( ~'\'' | '\'\'' )* '\''
 ;

但好像和引号相符。

我的访客是这样的:

public override IFilterExpression VisitLiteral_value(MagicHubFilterParser.Literal_valueContext context) {
    return MakeExpression(context.GetText());
}

我知道那时我可以 trim 它,但我怀疑如果可能的话,在词法分析器级别处理它会更快更干净。

最好的方法是什么?

正如@CoronA 所建议的,在访问者中执行可能更规范。但是,我确实弄清楚了如何使用解析规则来做到这一点:

stringBody : ( ~'\'' | '\'\'' )*;
stringLiteral
  : '\'' body=stringBody '\''
  ;