2017-01-02 2 views
1

Я хочу иметь грамматику ANTLR для ввода CSV.ANTLR4 регулярное выражение и тильда ANTLR4

  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; 
+0

1) Не должно быть разницы 2) '~' отменяет следующий пункт – Lucero

ответ

1

В правиле лексического анализатора, символы в квадратных скобках определяют набор символов. Таким образом, ["] - это набор с единственным символом ". Являясь множеством, каждый символ либо находится в наборе, либо нет, поэтому определение символа дважды, как в [""], не имеет значения, это то же самое, что и ["].

~ отрицает набор, так ~["] означает любой символ, кроме ".