代码之家  ›  专栏  ›  技术社区  ›  vava

ANTLR,可选';'在JavaScript中

  •  1
  • vava  · 技术社区  · 16 年前

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

    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;
    

    附言:我不想把 WS 在解析器规则中,如果lexer去掉这些规则,我会更高兴。

    1 回复  |  直到 16 年前
        1
  •  0
  •   stmax    16 年前

    我不确定这在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