ANTLR, необязательный ';' в JavaScript - PullRequest
1 голос
/ 20 марта 2010

Я просто играю с 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 в правила парсера, я был бы намного счастливее, если бы лексер просто избавился от них.

1 Ответ

0 голосов
/ 20 марта 2010

Я не уверен, что это будет работать во всех возможных случаях в javascript, но он правильно анализирует ваш пример:

grammar js;

def         : statements ;
statements  : statement (statement)* ;
statement   : expression ';'? ;
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;} ;

alt text http://img249.imageshack.us/img249/7131/parsetree.jpg

...