⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t042ast.g

📁 antlr最新版本V3源代码
💻 G
字号:
grammar t042ast;options {    language = Python;    output = AST;}tokens {    VARDEF;    FLOAT;    EXPR;    BLOCK;    VARIABLE;    FIELD;    CALL;    INDEX;    FIELDACCESS;}@init {self.flag = False}r1    : INT ('+'^ INT)*    ;r2    : 'assert'^ x=expression (':'! y=expression)? ';'!    ;r3    : 'if'^ expression s1=statement ('else'! s2=statement)?    ;r4    : 'while'^ expression statement    ;r5    : 'return'^ expression? ';'!    ;r6    : (INT|ID)+    ;r7    : INT ->     ;r8    : 'var' ID ':' type -> ^('var' type ID)     ;r9    : type ID ';' -> ^(VARDEF type ID)     ;r10    : INT -> {CommonTree(CommonToken(type=FLOAT, text=$INT.text + ".0"))}    ;r11    : expression -> ^(EXPR expression)    | -> EXPR    ;r12    : ID (',' ID)* -> ID+    ;r13    : type ID (',' ID)* ';' -> ^(type ID+)    ;r14    :   expression? statement* type+        -> ^(EXPR expression? statement* type+)    ;r15    : INT -> INT INT    ;r16    : 'int' ID (',' ID)* -> ^('int' ID)+    ;r17    : 'for' '(' start=statement ';' expression ';' next=statement ')' statement        -> ^('for' $start expression $next statement)    ;r18    : t='for' -> ^(BLOCK)    ;r19    : t='for' -> ^(BLOCK[$t])    ;r20    : t='for' -> ^(BLOCK[$t,"FOR"])    ;r21    : t='for' -> BLOCK    ;r22    : t='for' -> BLOCK[$t]    ;r23    : t='for' -> BLOCK[$t,"FOR"]    ;r24    : r=statement expression -> ^($r expression)    ;r25    : r+=statement (',' r+=statement)+ expression -> ^($r expression)    ;r26    : r+=statement (',' r+=statement)+ -> ^(BLOCK $r+)    ;r27    : r=statement expression -> ^($r ^($r expression))    ;r28    : ('foo28a'|'foo28b') ->    ;r29    : (r+=statement)* -> ^(BLOCK $r+)    ;r30    : statement* -> ^(BLOCK statement?)    ;r31    : modifier type ID ('=' expression)? ';'        -> {self.flag == 0}? ^(VARDEF ID modifier* type expression?)        -> {self.flag == 1}? ^(VARIABLE ID modifier* type expression?)        ->                   ^(FIELD ID modifier* type expression?)    ;r32[which]  : ID INT -> {which==1}? ID           -> {which==2}? INT           -> // yield nothing as else-clause  ;r33    :   modifiers! statement    ;r34    :   modifiers! r34a[$modifiers.tree]    //|   modifiers! r33b[$modifiers.tree]    ;r34a[mod]    :   'class' ID ('extends' sup=type)?        ( 'implements' i+=type (',' i+=type)*)?        '{' statement* '}'        -> ^('class' ID {$mod} ^('extends' $sup)? ^('implements' $i+)? statement* )    ;r35    : '{' 'extends' (sup=type)? '}'        ->  ^('extends' $sup)?    ;r36    : 'if' '(' expression ')' s1=statement        ( 'else' s2=statement -> ^('if' ^(EXPR expression) $s1 $s2)        |                     -> ^('if' ^(EXPR expression) $s1)        )    ;r37    : (INT -> INT) ('+' i=INT -> ^('+' $r37 $i) )*     ;r38    : INT ('+'^ INT)*    ;r39    : (primary->primary) // set return tree to just primary        ( '(' arg=expression ')'            -> ^(CALL $r39 $arg)        | '[' ie=expression ']'            -> ^(INDEX $r39 $ie)        | '.' p=primary            -> ^(FIELDACCESS $r39 $p)        )*    ;r40    : (INT -> INT) ( ('+' i+=INT)* -> ^('+' $r40 $i*) ) ';'    ;r41    : (INT -> INT) ( ('+' i=INT) -> ^($i $r41) )* ';'    ;r42    : ids+=ID (','! ids+=ID)*    ;r43 returns [res]    : ids+=ID! (','! ids+=ID!)* {$res = [id.text for id in $ids]}    ;r44    : ids+=ID^ (','! ids+=ID^)*    ;r45    : primary^    ;r46 returns [res]    : ids+=primary! (','! ids+=primary!)* {$res = [id.start.text for id in $ids]}    ;r47    : ids+=primary (','! ids+=primary)*    ;r48    : ids+=. (','! ids+=.)*    ;r49    : .^ ID    ;r50    : ID         -> ^({CommonTree(CommonToken(type=FLOAT, text="1.0"))} ID)    ;/** templates tested:    tokenLabelPropertyRef_tree*/r51 returns [res]    : ID t=ID ID        { $res = $t.tree }    ;/** templates tested:    rulePropertyRef_tree*/r52 returns [res]@after {    $res = $tree}    : ID    ;/** templates tested:    ruleLabelPropertyRef_tree*/r53 returns [res]    : t=primary        { $res = $t.tree }    ;/** templates tested:    ruleSetPropertyRef_tree*/r54 returns [res]@after {    $tree = $t.tree;}    : ID t=expression ID    ;/** backtracking */r55options { backtrack=true; k=1; }    : (modifier+ INT)=> modifier+ expression    | modifier+ statement    ;/** templates tested:    rewriteTokenRef with len(args)>0*/r56    : t=ID* -> ID[$t,'foo']    ;/** templates tested:    rewriteTokenRefRoot with len(args)>0*/r57    : t=ID* -> ^(ID[$t,'foo'])    ;/** templates tested:    ???*/r58    : ({CommonTree(CommonToken(type=FLOAT, text="2.0"))})^    ;primary    : ID    ;expression    : r1    ;statement    : 'fooze'    | 'fooze2'    ;modifiers    : modifier+    ;modifier    : 'public'    | 'private'    ;type    : 'int'    | 'bool'    ;ID : 'a'..'z' + ;INT : '0'..'9' +;WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -