| 
					
				 | 
			
			
				@@ -9,7 +9,8 @@ keyword        = first:identifier last:[:] {return first + last} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 className      = first:[A-Z] others:[a-zA-Z0-9]* {return first + others.join("")} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 string         = ['] val:(("''" {return "'"} / [^'])*) ['] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.ValueNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            ._value_(val.join("").replace(/\"/ig, '"')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._value_(val.join("").replace(/\"/ig, '"')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 symbol         = "#"val:( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -17,24 +18,29 @@ symbol         = "#"val:( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        / node:string {return node._value()})* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       return smalltalk.ValueNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              ._value_(smalltalk.symbolFor(val.join("").replace(/\"/ig, '"'))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 number         = n:(float / integer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.ValueNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._value_(n) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 float          = neg:[-]?int:[0-9]+ "." dec:[0-9]+ {return parseFloat((neg + int.join("") + "." + dec.join("")), 10)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 integer        = neg:[-]?digits:[0-9]+ {return (parseInt(neg+digits.join(""), 10))} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 literalArray   = "#(" ws lits:(lit:literal ws {return lit._value()})* ws ")" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.ValueNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._value_(lits) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 dynamicArray   = "{" ws expressions:expressions? ws "."? "}" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.DynamicArrayNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._nodes_(expressions) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 dynamicDictionary = "#{" ws expressions: expressions? ws "}" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         return smalltalk.DynamicDictionaryNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                               ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                ._nodes_(expressions) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 pseudoVariable = val:( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -42,6 +48,7 @@ pseudoVariable = val:( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  / 'false' {return false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  / 'nil' {return nil}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        return smalltalk.ValueNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                               ._value_(val) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 literal        = pseudoVariable / number / literalArray / dynamicDictionary / dynamicArray / string / symbol / block 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -49,10 +56,12 @@ literal        = pseudoVariable / number / literalArray / dynamicDictionary / dy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 variable       = identifier:varIdentifier { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.VariableNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._value_(identifier) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 classReference = className:className { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.ClassReferenceNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._value_(className) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -90,12 +99,14 @@ expressions    = first:expression others:expressionList* { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 assignment     = variable:variable ws ':=' ws expression:expression { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.AssignmentNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._left_(variable) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._right_(expression) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ret            = '^' ws expression:expression ws '.'? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.ReturnNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._nodes_([expression]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -117,12 +128,14 @@ statements     = ret:ret [.]* {return [ret]} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 sequence       = temps:temps? ws statements:statements? ws { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.SequenceNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._temps_(temps || []) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._nodes_(statements || []) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 block          = '[' ws params:blockParamList? ws sequence:sequence? ws ']' { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.BlockNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._parameters_(params || []) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._nodes_([sequence._asBlockSequenceNode()]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -133,6 +146,7 @@ operand        = literal / reference / subexpression 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 unaryMessage   = ws selector:unarySelector ![:] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.SendNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._selector_(selector) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -156,6 +170,7 @@ unarySend      = receiver:operand ws tail:unaryTail? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 binaryMessage  = ws selector:binarySelector ws arg:(unarySend / operand) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.SendNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._selector_(selector) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._arguments_([arg]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -187,6 +202,7 @@ keywordMessage = ws pairs:(pair:keywordPair ws {return pair})+ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                           args.push(pairs[i].arg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       return smalltalk.SendNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              ._selector_(selector.join("")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              ._arguments_(args) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -204,18 +220,21 @@ cascade        = ws send:(keywordSend / binarySend) messages:(ws ";" ws mess:mes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                          cascade.push(messages[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.CascadeNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._receiver_(send._receiver()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._nodes_(cascade) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 jsStatement    = "<" val:((">>" {return ">"} / [^>])*) ">" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                      return smalltalk.JSStatementNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             ._source_(val.join("")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 method         = ws pattern:(keywordPattern / binaryPattern / unaryPattern) ws sequence:sequence? ws { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       return smalltalk.MethodNode._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                             ._position_((line).__at(column)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              ._selector_(pattern[0]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              ._arguments_(pattern[1]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                              ._nodes_([sequence]) 
			 |