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

时间:2015-03-31 15:12:07

标签: antlr antlr4 antlr4cs

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

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

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

但似乎与报价相符。

我的访客看起来像这样:

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

我知道我可以修剪它,但我怀疑如果可能的话,在词法分析器级别处理它会更快更清洁。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

正如@CoronA所暗示的那样,访问者可能会更加规范。但是,我确实弄清楚如何使用解析规则来执行此操作:

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