【问题标题】:Is it possible to distinguish escape sequences in lexer in Antlr4?是否可以在 Antlr4 的词法分析器中区分转义序列?
【发布时间】:2016-12-16 10:52:27
【问题描述】:

我想匹配像 \'\" 这样的序列作为词法分析器元素

ESCAPESEQUECE :
  '\\\"' |
  '\\\'' 
  ;

同时也区分不转义的单个引号

SINGLEQUOTE:
   '\''
   ;

DOUBLEQUOTE:
   '\"'
   ;

最终目标是用解析器识别 MySQL 之类的字符串。

这是可能/正确的方式吗?

【问题讨论】:

  • 你想用 thtis 达到什么目的,你给定的语法有什么问题?
  • @BartKiers 什么是“正常”字符串文字? MySQL 对我来说看起来很正常。

标签: antlr antlr4


【解决方案1】:

回答

是的,完全可以通过使用单独的令牌来实现。

示例

grammar escp;

SINGLE: '\'';
DOUBLE: '\"';
ESCAPED : '\\"' | '\\\'';

char: SINGLE | DOUBLE;
escaped : ESCAPED;

program: (char | escaped)+;

输入字符串 '\"'"\"""'\'\"\' 的 AST 将是:

【讨论】:

  • @BartKiers 作为一个好习惯。在这种情况下,这无关紧要,因为令牌的前缀不同。但是对于相同的前缀和不同的后缀,标记序列很重要。
  • 为什么将单个标记命名为“更专业”?在我看来,他们不那么专业?更复杂的表达式在 Antlr 中是否具有优先权?
  • @Dims 是的,你是对的,它应该是相反的 :) 是的。标记定义的序列可能会改变词法分析器阶段。
猜你喜欢
  • 2017-06-13
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多