1

私は 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。レクサーがそれらを取り除くだけであれば、私はもっと幸せになるでしょう。

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 に答える