Я просто играю с ANTLR и решил попробовать с ним разобрать JavaScript. Но я ударил стену, имея дело с дополнительным ';' в нем, где конец оператора отмечен символом новой строки. Можно ли это сделать каким-то простым способом?
Простой пример грамматики, который не работает
grammar optional_newline;
def : statements ;
statements : statement (statement)* ;
statement : expression (';' | '\n') ;
expression : ID | INT | 'var' ID '=' INT ;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
INT : '0'..'9'+ ;
WS : ( ' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;} ;
и я хочу иметь возможность проанализировать это (что может быть проанализировано парсерами JavaScript)
var i =
10
10;
PS: я не хочу помещать WS
в правила парсера, я был бы намного счастливее, если бы лексер просто избавился от них.