ANTLR4 语法正则表达式和代字号

ANTLR4 grammar regex and tilde

我想要 CSV 输入的 ANTLR 语法。

  1. (~["])+(~['"'])+有什么区别?

  2. 为什么 ~ 很重要?

这是我的语法:

grammar Exercice4;

csv : ligne+
    ;


ligne : exp (',' exp)* ('\n' | EOF)
  ;

exp : ID
    | INT
    | STRING
    ;

INT : '0'..'9'+;

ID : ('0'..'9' | 'a'..'z' | 'A'..'Z')+;

STRING : '"' (~["])+ '"';

WS : [ ,\n, \t, \r] -> skip;

在词法分析器规则中,方括号内的字符定义了一个字符集。所以["]是单个字符"的集合。作为一个集合,每个字符要么在集合中,要么不在集合中,所以定义一个字符两次,如 [""] 没有区别,它与 ["].

相同

~ 取反集合,所以 ~["] 表示 " 之外的任何字符。