1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#!/usr/bin/ruby 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver# encoding: utf-8 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverrequire 'antlr3/test/functional' 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass TestASTConstructingParser < ANTLR3::Test::Functional 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver compile inline_grammar( <<-'END' ) 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver grammar ASTBuilder; 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver options { 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver language = Ruby; 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver output = AST; 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokens { 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver VARDEF; 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver FLOAT; 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPR; 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver BLOCK; 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver VARIABLE; 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver FIELD; 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CALL; 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver INDEX; 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver FIELDACCESS; 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @init { 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @flag = false 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @members { 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver attr_accessor :flag 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def report_error(e) 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # do nothing 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r1 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : INT ('+'^ INT)* 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r2 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'assert'^ x=expression (':'! y=expression)? ';'! 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r3 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'if'^ expression s1=statement ('else'! s2=statement)? 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r4 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'while'^ expression statement 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r5 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'return'^ expression? ';'! 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r6 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : (INT|ID)+ 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r7 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : INT -> 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r8 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'var' ID ':' type -> ^('var' type ID) 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r9 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : type ID ';' -> ^(VARDEF type ID) 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r10 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : INT -> { ANTLR3::AST::CommonTree.new(ANTLR3::CommonToken.create(:type => FLOAT, :text => ($INT.text + ".0")))} 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r11 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : expression -> ^(EXPR expression) 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver | -> EXPR 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r12 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ID (',' ID)* -> ID+ 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r13 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : type ID (',' ID)* ';' -> ^(type ID+) 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r14 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : expression? statement* type+ 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^(EXPR expression? statement* type+) 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r15 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : INT -> INT INT 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r16 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'int' ID (',' ID)* -> ^('int' ID)+ 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r17 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'for' '(' start=statement ';' expression ';' next=statement ')' statement 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^('for' $start expression $next statement) 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r18 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t='for' -> ^(BLOCK) 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r19 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t='for' -> ^(BLOCK[$t]) 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r20 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t='for' -> ^(BLOCK[$t,"FOR"]) 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r21 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t='for' -> BLOCK 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r22 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t='for' -> BLOCK[$t] 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r23 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t='for' -> BLOCK[$t,"FOR"] 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r24 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : r=statement expression -> ^($r expression) 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r25 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : r+=statement (',' r+=statement)+ expression -> ^($r expression) 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r26 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : r+=statement (',' r+=statement)+ -> ^(BLOCK $r+) 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r27 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : r=statement expression -> ^($r ^($r expression)) 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r28 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ('foo28a'|'foo28b') -> 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r29 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : (r+=statement)* -> ^(BLOCK $r+) 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r30 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : statement* -> ^(BLOCK statement?) 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r31 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : modifier type ID ('=' expression)? ';' 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> {@flag == 0}? ^(VARDEF ID modifier* type expression?) 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> {@flag == 1}? ^(VARIABLE ID modifier* type expression?) 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^(FIELD ID modifier* type expression?) 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r32[which] 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ID INT -> {which==1}? ID 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> {which==2}? INT 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> // yield nothing as else-clause 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r33 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : modifiers! statement 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r34 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : modifiers! r34a[$modifiers.tree] 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver //| modifiers! r33b[$modifiers.tree] 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r34a[mod] 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'class' ID ('extends' sup=type)? 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ( 'implements' i+=type (',' i+=type)*)? 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver '{' statement* '}' 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^('class' ID {$mod} ^('extends' $sup)? ^('implements' $i+)? statement* ) 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r35 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : '{' 'extends' (sup=type)? '}' 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^('extends' $sup)? 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r36 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'if' '(' expression ')' s1=statement 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ( 'else' s2=statement -> ^('if' ^(EXPR expression) $s1 $s2) 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver | -> ^('if' ^(EXPR expression) $s1) 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r37 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : (INT -> INT) ('+' i=INT -> ^('+' $r37 $i) )* 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r38 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : INT ('+'^ INT)* 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r39 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : (primary->primary) // set return tree to just primary 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ( '(' arg=expression ')' 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^(CALL $r39 $arg) 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver | '[' ie=expression ']' 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^(INDEX $r39 $ie) 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver | '.' p=primary 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^(FIELDACCESS $r39 $p) 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver )* 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r40 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : (INT -> INT) ( ('+' i+=INT)* -> ^('+' $r40 $i*) ) ';' 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r41 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : (INT -> INT) ( ('+' i=INT) -> ^($i $r41) )* ';' 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r42 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ids+=ID (','! ids+=ID)* 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r43 returns [res] 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ids+=ID! (','! ids+=ID!)* {$res = $ids.map { |id| id.text }} 238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r44 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ids+=ID^ (','! ids+=ID^)* 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r45 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : primary^ 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r46 returns [res] 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ids+=primary! (','! ids+=primary!)* {$res = $ids.map { |id| id.text }} 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r47 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ids+=primary (','! ids+=primary)* 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r48 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ids+=. (','! ids+=.)* 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r49 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : .^ ID 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r50 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ID 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver -> ^({ANTLR3::AST::CommonTree.new(ANTLR3::CommonToken.create(:type => FLOAT, :text => "1.0"))} ID) 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** templates tested: 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tokenLabelPropertyRef_tree 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r51 returns [res] 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ID t=ID ID 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { $res = $t.tree } 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** templates tested: 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver rulePropertyRef_tree 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r52 returns [res] 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @after { 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver $res = $tree 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ID 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** templates tested: 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ruleLabelPropertyRef_tree 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r53 returns [res] 291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t=primary 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { $res = $t.tree } 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** templates tested: 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ruleSetPropertyRef_tree 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r54 returns [res] 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver @after { 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver $tree = $t.tree; 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ID t=expression ID 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** backtracking */ 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r55 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver options { backtrack=true; k=1; } 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : (modifier+ INT)=> modifier+ expression 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver | modifier+ statement 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** templates tested: 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver rewriteTokenRef with len(args)>0 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r56 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t=ID* -> ID[$t,'foo'] 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** templates tested: 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver rewriteTokenRefRoot with len(args)>0 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r57 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : t=ID* -> ^(ID[$t,'foo']) 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** templates tested: 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ??? 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r58 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ({CommonTree.new(CommonToken.create(:type => FLOAT, :text => "2.0"))})^ 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver /** templates tested: 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver rewriteTokenListLabelRefRoot 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */ 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver r59 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : (t+=ID)+ statement -> ^($t statement)+ 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver primary 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : ID 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expression 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : r1 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver statement 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'fooze' 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver | 'fooze2' 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver modifiers 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : modifier+ 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver modifier 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'public' 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver | 'private' 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver type 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : 'int' 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver | 'bool' 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ; 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ID : 'a'..'z' + ; 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver INT : '0'..'9' +; 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver WS: (' ' | '\n' | '\t')+ {$channel = HIDDEN;}; 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver END 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def self.ast_test( opts, &special_test ) 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver input = opts[ :input ] 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver rule = opts[ :rule ] 376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver expected_tree = opts[ :ast ] 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver flag = opts[ :flag ] 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver args = opts[ :arguments ] || [] 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver message = opts[ :message ] || rule.to_s #"should parse %p with rule %s and make tree %s" % [input, rule, expected_tree] 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver example( message ) do 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = ASTBuilder::Lexer.new( input ) 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = ASTBuilder::Parser.new( lexer ) 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser.flag = flag unless flag.nil? 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result = parser.send( rule, *args ) 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if special_test then instance_exec( result, &special_test ) 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver elsif expected_tree then 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result.tree.inspect.should == expected_tree 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else result.tree.should be_nil 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "1 + 2", :rule => :r1, :ast => "(+ 1 2)" 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "assert 2+3", :rule => :r2, :ast => "(assert (+ 2 3))" 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "assert 2+3 : 5", :rule => :r2, :ast => "(assert (+ 2 3) 5)" 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "if 1 fooze", :rule => :r3, :ast => "(if 1 fooze)" 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "if 1 fooze else fooze", :rule => :r3, :ast => "(if 1 fooze fooze)" 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "while 2 fooze", :rule => :r4, :ast => "(while 2 fooze)" 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "return;", :rule => :r5, :ast => "return" 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "return 2+3;", :rule => :r5, :ast => "(return (+ 2 3))" 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "3", :rule => :r6, :ast => "3" 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "3 a", :rule => :r6, :ast => "3 a" 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "3", :rule => :r7, :ast => nil 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "var foo:bool", :rule => :r8, :ast => "(var bool foo)" 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "int foo;", :rule => :r9, :ast => "(VARDEF int foo)" 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "10", :rule => :r10, :ast => "10.0" 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "1+2", :rule => :r11, :ast => "(EXPR (+ 1 2))" 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "", :rule => :r11, :ast => "EXPR" 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "foo", :rule => :r12, :ast => "foo" 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "foo, bar, gnurz", :rule => :r12, :ast => "foo bar gnurz" 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "int foo;", :rule => :r13, :ast => "(int foo)" 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "bool foo, bar, gnurz;", :rule => :r13, :ast => "(bool foo bar gnurz)" 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "1+2 int", :rule => :r14, :ast => "(EXPR (+ 1 2) int)" 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "1+2 int bool", :rule => :r14, :ast => "(EXPR (+ 1 2) int bool)" 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "int bool", :rule => :r14, :ast => "(EXPR int bool)" 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "fooze fooze int bool", :rule => :r14, :ast => "(EXPR fooze fooze int bool)" 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "7+9 fooze fooze int bool", :rule => :r14, :ast => "(EXPR (+ 7 9) fooze fooze int bool)" 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "7", :rule => :r15, :ast => "7 7" 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "int foo", :rule => :r16, :ast => "(int foo)" 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "int foo, bar, gnurz", :rule => :r16, :ast => "(int foo) (int bar) (int gnurz)" 449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "for ( fooze ; 1 + 2 ; fooze ) fooze", :rule => :r17, :ast => "(for fooze (+ 1 2) fooze fooze)" 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "for", :rule => :r18, :ast => "BLOCK" 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "for", :rule => :r19, :ast => "for" 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "for", :rule => :r20, :ast => "FOR" 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "for", :rule => :r21, :ast => "BLOCK" 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "for", :rule => :r22, :ast => "for" 461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "for", :rule => :r23, :ast => "FOR" 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "fooze 1 + 2", :rule => :r24, :ast => "(fooze (+ 1 2))" 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "fooze, fooze2 1 + 2", :rule => :r25, :ast => "(fooze (+ 1 2))" 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "fooze, fooze2", :rule => :r26, :ast => "(BLOCK fooze fooze2)" 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "fooze 1 + 2", :rule => :r27, :ast => "(fooze (fooze (+ 1 2)))" 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "foo28a", :rule => :r28, :ast => nil 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "public int gnurz = 1 + 2;", :rule => :r31, :ast => "(VARDEF gnurz public int (+ 1 2))", :flag => 0 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "public int gnurz = 1 + 2;", :rule => :r31, :ast => "(VARIABLE gnurz public int (+ 1 2))", :flag => 1 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "public int gnurz = 1 + 2;", :rule => :r31, :ast => "(FIELD gnurz public int (+ 1 2))", :flag => 2 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz 32', :rule => :r32, :arguments => [ 1 ], :flag => 2, :ast => 'gnurz' 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz 32', :rule => :r32, :arguments => [ 2 ], :flag => 2, :ast => '32' 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz', :rule => :r32, :arguments => [ 3 ], :flag => 2, :ast => nil 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "public private fooze", :rule => :r33, :ast => "fooze" 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "public class gnurz { fooze fooze2 }", :rule => :r34, :ast => "(class gnurz public fooze fooze2)" 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "public class gnurz extends bool implements int, bool { fooze fooze2 }", :rule => :r34, :ast => "(class gnurz public (extends bool) (implements int bool) fooze fooze2)" 491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "if ( 1 + 2 ) fooze", :rule => :r36, :ast => "(if (EXPR (+ 1 2)) fooze)" 493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "1 + 2 + 3", :rule => :r37, :ast => "(+ (+ 1 2) 3)" 495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "1 + 2 + 3", :rule => :r38, :ast => "(+ (+ 1 2) 3)" 497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "gnurz[1]", :rule => :r39, :ast => "(INDEX gnurz 1)" 499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "gnurz(2)", :rule => :r39, :ast => "(CALL gnurz 2)" 501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "gnurz.gnarz", :rule => :r39, :ast => "(FIELDACCESS gnurz gnarz)" 503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "gnurz.gnarz.gnorz", :rule => :r39, :ast => "(FIELDACCESS (FIELDACCESS gnurz gnarz) gnorz)" 505324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 506324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "1 + 2 + 3;", :rule => :r40, :ast => "(+ 1 2 3)" 507324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 508324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "1 + 2 + 3;", :rule => :r41, :ast => "(3 (2 1))" 509324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 510324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "gnurz, gnarz, gnorz", :rule => :r42, :ast => "gnurz gnarz gnorz" 511324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 512324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => "gnurz, gnarz, gnorz", :rule => :r43 do |result| 513324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result.tree.should be_nil 514324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result.res.should == %w(gnurz gnarz gnorz) 515324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 516324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 517324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz, gnarz, gnorz', :rule => :r44, :ast => '(gnorz (gnarz gnurz))' 518324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 519324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz', :rule => :r45, :ast => 'gnurz' 520324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 521324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz, gnarz, gnorz', :rule => :r46 do |result| 522324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result.tree.should be_nil 523324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result.res.should == %w(gnurz gnarz gnorz) 524324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 525324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 526324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz, gnarz, gnorz', :rule => :r47, :ast => 'gnurz gnarz gnorz' 527324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 528324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz, gnarz, gnorz', :rule => :r48, :ast => 'gnurz gnarz gnorz' 529324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 530324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz gnorz', :rule => :r49, :ast => '(gnurz gnorz)' 531324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 532324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz', :rule => :r50, :ast => '(1.0 gnurz)' 533324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 534324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurza gnurzb gnurzc', :rule => :r51 do |result| 535324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver result.res.inspect.should == 'gnurzb' 536324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver end 537324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 538324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz', :rule => :r52, :ast => 'gnurz' 539324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 540324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurz', :rule => :r53, :ast => 'gnurz' 541324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 542324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'gnurza 1 + 2 gnurzb', :rule => :r54, :ast => '(+ 1 2)' 543324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 544324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'public private 1 + 2', :rule => :r55, :ast => 'public private (+ 1 2)' 545324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 546324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'public fooze', :rule => :r55, :ast => 'public fooze' 547324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 548324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'a b c d', :rule => :r56, :ast => 'foo' 549324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 550324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'a b c d', :rule => :r57, :ast => 'foo' 551324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 552324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ast_test :input => 'a b c fooze', :rule => :r59, :ast => '(a fooze) (b fooze) (c fooze)' 553324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 554324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverend 555