1

我只是在玩 ANTLR,并决定尝试用它解析 JavaScript。但是我在处理可选的';'时碰壁了 在其中, where 语句结束由换行符标记。它可以以某种直接的方式完成吗?

只是一个不起作用的简单语法示例

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解析器规则,如果词法分析器摆脱那些我会更开心。

4

1 回答 1

0

我不确定这是否适用于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;} ;

替代文字 http://img249.imageshack.us/img249/7131/parsetree.jpg

于 2010-03-20T15:24:54.420 回答