diff --git a/code.jaa b/code.jaa index e06648c0..93697844 100644 --- a/code.jaa +++ b/code.jaa @@ -1,5 +1,9 @@ # TODO: switch/case statements # Better block delimiters +# Flow: For loops, while loops, etc. +# Exceptions: throw catch. +# When an if statement is the last thing in a function, need to be able to +# send the return down to the last expression in the if and else bodies. # Functions: square: x => x * x. @@ -11,7 +15,7 @@ odd: x => x % 2 is 0. even: x => x % 2 aint 0. run_loop: => - fire_events(e => e.stopPropagation().) + fire_events( e => e.stopPropagation(). ) listen() wait(). @@ -21,7 +25,7 @@ object_literal: {one: 1, two: 2, three: 3} multiline_object: { pi: 3.14159 list: [1, 2, 3, 4] - three: 3 + three: new Idea() inner_obj: { freedom: => _.freedom(). } @@ -56,6 +60,11 @@ wine &&= cheese # Nested property access and calls. ((moon.turn(360))).shapes[3].move({x: 45, y: 30}).position +# Try/Catch/Finally. +try + all_hell_breaks_loose() + dogs_and_cats_living_together() +catch error + print( error ). - - +try all_hell_breaks_loose() catch error then print(error). \ No newline at end of file diff --git a/documents.jaa b/documents.jaa index ced25b10..957675c5 100644 --- a/documents.jaa +++ b/documents.jaa @@ -8,15 +8,15 @@ dc.model.Document: dc.Model.extend({ # The import process will take care of this in the future, but the inline # version of the summary has all runs of whitespace squeezed out. displaySummary: => - text: this.get('highlight') or this.get('summary') - if text then text.replace(/\s+/g, ' ') else ''.. + text: this.get('highlight') or this.get('summary') or '' + text and text.replace(/\s+/g, ' '). # Return a list of the document's metadata. Think about caching this on the # document by binding to Metadata, instead of on-the-fly. metadata: => docId: this.id _.select(Metadata.models() - datum => _.any(datum.get('instances') + meta => _.any(meta.get('instances') instance => instance.document_id == docId.).). bookmark: pageNumber => diff --git a/grammar.y b/grammar.y index f79aca02..34030f3f 100644 --- a/grammar.y +++ b/grammar.y @@ -10,6 +10,7 @@ token TRUE FALSE NULL token IDENTIFIER PROPERTY_ACCESS token CODE PARAM token NEW RETURN +token TRY CATCH FINALLY THROW prechigh nonassoc UMINUS NOT '!' @@ -51,16 +52,14 @@ rule # All types of expressions in our language Expression: Literal - | Variable + | Value | Call | Assign - | Object | Code | Operation - | Array | If + | Try | Return - | Parenthetical ; # All tokens that can terminate an expression @@ -81,7 +80,7 @@ rule # Assign to a variable Assign: - Variable ":" Expression { result = AssignNode.new(val[0], val[2]) } + Value ":" Expression { result = AssignNode.new(val[0], val[2]) } ; # Assignment within an object literal. @@ -145,11 +144,13 @@ rule | ParamList "," PARAM { result = val[0] << val[2] } ; - Variable: - IDENTIFIER { result = VariableNode.new(val) } - | Variable Accessor { result = val[0] << val[1] } - | Invocation Accessor { result = VariableNode.new(val[0], [val[1]]) } - | Parenthetical Accessor { result = VariableNode.new(val[0], [val[1]]) } + Value: + IDENTIFIER { result = ValueNode.new(val) } + | Array { result = ValueNode.new(val) } + | Object { result = ValueNode.new(val) } + | Parenthetical { result = ValueNode.new(val) } + | Value Accessor { result = val[0] << val[1] } + | Invocation Accessor { result = ValueNode.new(val[0], [val[1]]) } ; Accessor: @@ -179,11 +180,11 @@ rule # A method call. Call: Invocation { result = val[0] } - | NEW Invocation { result = val[0].new_instance } + | NEW Invocation { result = val[1].new_instance } ; Invocation: - Variable "(" ArgList ")" { result = CallNode.new(val[0], val[2]) } + Value "(" ArgList ")" { result = CallNode.new(val[0], val[2]) } ; # An Array. @@ -212,6 +213,13 @@ rule ELSE Expressions "." { result = IfNode.new(val[1], val[3], val[6]) } ; + Try: + TRY Expressions CATCH IDENTIFIER + Terminator Expressions "." { result = TryNode.new(val[1], val[3], val[5]) } + | TRY Expression CATCH IDENTIFIER + THEN Expression "." { result = TryNode.new(val[1], val[3], val[5]) } + ; + Parenthetical: "(" Expressions ")" { result = ParentheticalNode.new(val[1]) } ; diff --git a/lexer.rb b/lexer.rb index 310c70d8..7a9927f2 100644 --- a/lexer.rb +++ b/lexer.rb @@ -3,7 +3,8 @@ class Lexer KEYWORDS = ["if", "else", "then", "true", "false", "null", "and", "or", "is", "aint", "not", - "new", "return"] + "new", "return", + "try", "catch", "finally", "throw"] IDENTIFIER = /\A([a-zA-Z$_]\w*)/ NUMBER = /\A([0-9]+(\.[0-9]+)?)/ diff --git a/nodes.rb b/nodes.rb index 15c18de2..43853d4a 100644 --- a/nodes.rb +++ b/nodes.rb @@ -70,6 +70,7 @@ class CallNode < Node def new_instance @new = true + self end def compile(indent, last=false) @@ -79,7 +80,7 @@ class CallNode < Node end end -class VariableNode < Node +class ValueNode < Node def initialize(name, properties=[]) @name, @properties = name, properties end @@ -243,6 +244,28 @@ class IfNode < Node end end +class TryNode < Node + def initialize(try, error, recovery) + @try, @error, @recovery = try, error, recovery + end + + def line_ending + '' + end + + def compile(indent, last=false) + @try.is_a?(Nodes) ? compile_expressions(indent) : compile_raw(indent) + end + + def compile_expressions(indent) + "try {\n#{@try.compile(indent + TAB)}\n#{indent}} catch (#{@error}) {\n#{@recovery.compile(indent + TAB)}\n#{indent}}" + end + + def compile_raw(indent) + "try {\n#{indent}#{TAB}#{@try.compile(indent)}#{@try.line_ending}\n#{indent}} catch (#{@error}) {\n#{indent}#{TAB}#{@recovery.compile(indent)}#{@recovery.line_ending}\n#{indent}}" + end +end + class ParentheticalNode < Node def initialize(expressions) @expressions = expressions diff --git a/parser.rb b/parser.rb index 8b1bd38a..02a24001 100644 --- a/parser.rb +++ b/parser.rb @@ -11,7 +11,7 @@ require 'racc/parser.rb' class Parser < Racc::Parser -module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 226) +module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 234) def parse(code, show_tokens=false) # @yydebug = true @tokens = Lexer.new.tokenize(code) @@ -26,80 +26,90 @@ module_eval(<<'...end grammar.y/module_eval...', 'grammar.y', 226) ##### State transition tables begin ### clist = [ -'5,83,3,125,20,23,27,31,35,1,3,93,69,12,15,19,83,26,30,83,5,69,69,9,20', -'23,27,31,35,1,3,32,36,12,15,19,83,26,30,83,32,36,133,9,34,8,32,36,18', -'70,25,69,34,81,69,32,36,86,70,70,150,77,129,78,137,8,130,119,18,5,25', -'39,34,20,23,27,31,35,1,3,32,36,12,15,19,69,26,30,70,5,131,70,9,20,23', -'27,31,35,1,3,32,36,12,15,19,,26,30,,32,36,,9,134,8,,79,18,,25,,34,70', -',32,36,81,45,48,32,36,122,,123,8,45,48,18,5,25,,34,20,23,27,31,35,1', -'3,45,48,12,15,19,,26,30,,5,152,,9,20,23,27,31,35,1,3,45,48,12,15,19', -',26,30,65,44,47,,9,,8,32,36,18,,25,,34,129,32,36,65,44,47,50,52,122', -',45,48,8,,141,18,5,25,,34,20,23,27,31,35,1,3,45,48,12,15,19,,26,30,', -'5,45,48,9,20,23,27,31,35,1,3,45,48,12,15,19,,26,30,65,44,47,,9,,8,,', -'18,,25,,34,,,,65,44,47,50,52,32,36,45,48,8,,148,18,5,25,,34,20,23,27', -'31,35,1,3,45,48,12,15,19,,26,30,,5,,,9,20,23,27,31,35,1,3,,,12,15,19', -',26,30,,32,36,,9,,8,94,,18,,25,,34,32,36,,32,36,,140,32,36,155,,,8,', -',18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30,,5,,,9,20,23,27,31', -'35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25,,34,,,,65,44,47,50,52,,,', -',8,,,18,5,25,,34,20,23,27,31,35,1,3,45,48,12,15,19,,26,30,,5,,,9,20', -'23,27,31,35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25,,34,20,23,27,31', -'35,1,,32,36,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30', -',5,,,9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25,,34,,', -',65,44,47,50,52,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,45,48,12,15,19', -',26,30,,5,,,9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25', -',34,,,,,,,,,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30', -',5,,,9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,32,36,,9,,8,,,18,,25,,34', -',,,,,,,,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30,,5', -',,9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,32,36,,9,,8,,,18,,25,,34,', -',,,,,,,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30,,5,', -',9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25,,34,,,,,,', -',,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30,,5,,,9,20', -'23,27,31,35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25,,34,,,,,,,,,,,,', -'8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30,,5,,,9,20,23,27', -'31,35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25,,34,,,,,,,,,,,,,8,,,18', -'5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30,,5,,,9,20,23,27,31,35', -'1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25,,34,,,,,,,,,,,,,8,,,18,5,25', -',34,20,23,27,31,35,1,3,,,12,15,19,,26,30,,5,,,9,20,23,27,31,35,1,3,', -',12,15,19,,26,30,,,,,9,,8,,,18,,25,,34,,,,,,,,,,,,,8,,,18,5,25,,34,20', -'23,27,31,35,1,3,,,12,15,19,,26,30,,5,,,9,20,23,27,31,35,1,3,,,12,15', -'19,,26,30,,,,,9,,8,,,18,,25,,34,,,,,,,,,,,,,8,,,18,5,25,,34,20,23,27', -'31,35,1,3,,,12,15,19,,26,30,,5,,,9,20,23,27,31,35,1,3,,,12,15,19,,26', -'30,,,,,9,,8,,,18,,25,,34,,,,,,,,,,,,,8,,,18,5,25,,34,20,23,27,31,35', -'1,3,,,12,15,19,,26,30,,5,,,9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,', -',,9,,8,,,18,,25,,34,,,,,,,,,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,', -',12,15,19,,26,30,,5,,,9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,,,,9,', -'8,,,18,,25,,34,,,,,,,,,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15', -'19,,26,30,,5,,,9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18', -',25,,34,,,,,,,,,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26', -'30,,5,,,9,20,23,27,31,35,1,3,,,12,15,19,,26,30,,,,,9,,8,,,18,,25,,34', -',,,,,,,,,,,,8,,,18,5,25,,34,20,23,27,31,35,1,3,,,12,15,19,,26,30,,,', -',9,,,,,,,,,,,,146,,,,,,,,,,8,,,18,,25,,34,65,44,47,50,52,54,56,58,60', -'62,63,64,43,46,49,51,53,55,57,59,61,91,,,45,48,,147,,,,,,,,,,,65,44', -'47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,32,36,,45,48', -'65,44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45', -'48,,153,65,44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59', -'61,,,,45,48,65,44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57', -'59,61,,,,45,48,65,44,47,50,52,54,56,58,60,62,63,64,43,,,,,,,,,,,,45', -'48,65,44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,', -',45,48,65,44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61', -',,,45,48,65,44,47,50,52,54,56,58,60,62,63,64,43,,,,,,,,,,,,45,48,65', -'44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45,48', -'65,44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45', -'48,65,44,47,50,52,54,56,58,60,62,63,64,43,,,,,,,,,,,,45,48,65,44,47', -'50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45,48,65,44', -'47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45,48,65', -'44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45,48', -'65,44,47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45', -'48,65,44,47,50,52,54,56,58,60,62,63,64,43,,,,,,,,,,,,45,48,65,44,47', -'50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45,48,65,44', -'47,50,52,54,56,58,60,62,63,64,43,46,49,51,53,55,57,59,61,,,,45,48,65', -'44,47,50,52,54,56,58,60,62,63,64,43,,,,,,,,,,,,45,48,65,44,47,50,52', -'54,56,58,60,62,63,64,43,,,,,,,,,,,,45,48,65,44,47,50,52,54,56,58,60', -'62,63,64,43,,,,,,,,,,,,45,48,65,44,47,50,52,54,56,58,60,62,63,64,43', -'46,49,51,53,55,57,59,61,,,,45,48,65,44,47,50,52,54,56,58,60,62,63,64', -'43,46,49,51,53,55,57,59,61,,,,45,48,65,44,47,50,52,54,56,58,60,62,63', -'64,43,,,,,,,,,,,,45,48' ] - racc_action_table = arr = Array.new(2235, nil) +'9,46,40,158,22,28,31,34,38,2,6,11,15,17,19,21,25,6,138,46,136,7,10,46', +'40,40,9,27,11,15,22,28,31,34,38,2,6,74,77,17,19,21,25,45,11,15,152,7', +'10,26,40,46,36,27,4,93,13,11,15,36,44,4,46,13,101,45,45,147,47,42,42', +'107,71,73,76,26,11,15,36,9,4,59,13,22,28,31,34,38,2,6,140,45,17,19,21', +'25,74,77,11,15,7,10,88,9,89,97,27,22,28,31,34,38,2,6,11,15,17,19,21', +'25,135,138,11,15,7,10,106,139,26,100,27,36,148,4,,13,11,15,74,77,11', +'15,165,71,73,76,79,81,,71,73,76,26,105,,36,9,4,,13,22,28,31,34,38,2', +'6,74,77,17,19,21,25,74,77,11,15,7,10,,9,155,,27,22,28,31,34,38,2,6,11', +'15,17,19,21,25,109,11,15,,7,10,,149,26,,27,36,,4,,13,11,15,74,77,74', +'77,167,71,73,76,79,81,74,77,11,15,26,74,77,36,9,4,,13,22,28,31,34,38', +'2,6,74,77,17,19,21,25,11,15,,,7,10,,100,,9,27,98,,22,28,31,34,38,2,6', +',,17,19,21,25,,11,15,,7,10,26,,,36,27,4,,13,22,28,31,34,38,2,,,,,,,', +'11,15,,,,26,,,36,9,4,,13,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,', +'9,,,27,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,,26,,27,36,,4,,13', +',,,,,,,71,73,76,79,81,,,,,26,,,36,9,4,,13,22,28,31,34,38,2,6,74,77,17', +'19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10', +',,26,,27,36,,4,,13,,,,,,,,,,,,11,15,,,,26,,,36,9,4,,13,22,28,31,34,38', +'2,6,,,17,19,21,25,,,,,7,10,,,,9,27,,,22,28,31,34,38,2,6,,,17,19,21,25', +',11,15,,7,10,26,,,36,27,4,,13,,,,,,,,,,71,73,76,79,81,,,,,26,,,36,9', +'4,,13,22,28,31,34,38,2,6,74,77,17,19,21,25,,,,,7,10,,,,,27,,,,,,,,,', +',,,,,,,11,15,,,,26,,,36,,4,,13,9,160,,,22,28,31,34,38,2,6,,,17,19,21', +'25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,,26,', +'27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9,4,,13,22,28,31,34,38,2,6,,,17', +'19,21,25,,,,,7,10,,,,9,27,,,22,28,31,34,38,2,6,,,17,19,21,25,,11,15', +',7,10,26,,,36,27,4,,13,,,,,,,,,,,,,,,,,,,26,,,36,9,4,,13,22,28,31,34', +'38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17,19,21', +'25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9,4,,13,22,28', +'31,34,38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17', +'19,21,25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9,4,,13', +'22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6', +',,17,19,21,25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9', +'4,,13,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34', +'38,2,6,,,17,19,21,25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,11,15,,', +',26,,,36,9,4,,13,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22', +'28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,', +',,,,,,26,,,36,9,4,,13,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,9,', +',27,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,,26,,27,36,,4,,13,,,', +',,,,,,,,,,,,,26,,,36,9,4,,13,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7', +'10,,,,9,27,,,22,28,31,34,38,2,6,,,17,19,21,25,,11,15,,7,10,26,,,36,27', +'4,,13,,,,,,,,,,,,,,,,,,,26,,,36,9,4,,13,22,28,31,34,38,2,6,,,17,19,21', +'25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,,26,', +'27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9,4,,13,22,28,31,34,38,2,6,,,17', +'19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10', +',,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9,4,,13,22,28,31,34,38,2', +'6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17,19,21,25,,', +',,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9,4,,13,22,28,31,34', +'38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17,19,21', +'25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9,4,,13,22,28', +'31,34,38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6,,,17', +'19,21,25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9,4,,13', +'22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34,38,2,6', +',,17,19,21,25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26,,,36,9', +'4,,13,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,9,,,27,22,28,31,34', +'38,2,6,,,17,19,21,25,,,,,7,10,,,26,,27,36,,4,,13,,,,,,,,,,,,,,,,,26', +',,36,9,4,,13,22,28,31,34,38,2,6,,,17,19,21,25,,,,,7,10,,,,,27,,,,,,', +',153,,,,,,,,,,,,,,26,,,36,,4,,13,71,73,76,79,81,83,85,87,66,68,69,70', +'72,75,78,80,82,84,86,65,67,103,,,74,77,,154,,,,,,,,,,,,,,,71,73,76,79', +'81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65,67,11,15,108,74,77,', +',,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65,67,,,', +'74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65,67', +',,,74,77,,166,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84', +'86,65,67,,,,74,77,,163,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78', +'80,82,84,86,65,67,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,,', +',,,,,,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84', +'86,65,67,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82', +'84,86,65,67,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,,,,,,,,', +',,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65', +'67,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86', +'65,67,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84', +'86,65,67,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,,,,,,,,,,,', +'74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65,67', +',,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65', +'67,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,,,,,,,,,,,,74,77', +'71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65,67,,,,74', +'77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65,67,,', +',74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,75,78,80,82,84,86,65,67', +',,,74,77,71,73,76,79,81,83,85,87,66,68,69,70,72,,,,,,,,,,,,74,77,71', +'73,76,79,81,83,85,87,66,68,69,70,72,,,,,,,,,,,,74,77,71,73,76,79,81', +'83,85,87,66,68,69,70,72,,,,,,,,,,,,74,77,71,73,76,79,81,83,85,87,66', +'68,69,70,72,75,78,80,82,84,86,65,67,,,,74,77,71,73,76,79,81,83,85,87', +'66,68,69,70,72,,,,,,,,,,,,74,77,71,73,76,79,81,83,85,87,66,68,69,70', +'72,75,78,80,82,84,86,65,67,,,,74,77,71,73,76,79,81,83,85,87,66,68,69', +'70,72,75,78,80,82,84,86,65,67,,,,74,77' ] + racc_action_table = arr = Array.new(2620, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -109,89 +119,101 @@ clist = [ end clist = [ -'0,84,15,78,0,0,0,0,0,0,0,39,67,0,0,0,25,0,0,145,5,16,68,0,5,5,5,5,5', -'5,5,73,73,5,5,5,129,5,5,128,0,0,84,5,15,0,25,25,0,67,0,29,0,67,66,82', -'82,25,16,68,145,22,82,22,120,5,82,69,5,152,5,7,5,152,152,152,152,152', -'152,152,11,11,152,152,152,24,152,152,29,8,83,66,152,8,8,8,8,8,8,8,90', -'90,8,8,8,,8,8,,152,152,,8,90,152,,24,152,,152,,152,24,,74,74,24,118', -'118,8,8,74,,74,8,100,100,8,9,8,,8,9,9,9,9,9,9,9,97,97,9,9,9,,9,9,,149', -'149,,9,149,149,149,149,149,149,149,89,89,149,149,149,,149,149,103,103', -'103,,149,,9,132,132,9,,9,,9,132,127,127,113,113,113,113,113,127,,103', -'103,149,,127,149,146,149,,149,146,146,146,146,146,146,146,113,113,146', -'146,146,,146,146,,131,87,87,146,131,131,131,131,131,131,131,41,41,131', -'131,131,,131,131,105,105,105,,131,,146,,,146,,146,,146,,,,107,107,107', -'107,107,136,136,105,105,131,,136,131,122,131,,131,122,122,122,122,122', -'122,122,107,107,122,122,122,,122,122,,17,,,122,17,17,17,17,17,17,17', -',,17,17,17,,17,17,,40,40,,17,,122,40,,122,,122,,122,124,124,,154,154', -',124,17,17,154,,,17,,,17,18,17,,17,18,18,18,18,18,18,18,,,18,18,18,', -'18,18,,19,,,18,19,19,19,19,19,19,19,,,19,19,19,,19,19,,,,,19,,18,,,18', -',18,,18,,,,109,109,109,109,109,,,,,19,,,19,121,19,,19,121,121,121,121', -'121,121,121,109,109,121,121,121,,121,121,,92,,,121,92,92,92,92,92,92', -'92,,,92,92,92,,92,92,,,,,92,,121,,,121,,121,,121,70,70,70,70,70,70,', -'92,92,,,,92,,,92,91,92,,92,91,91,91,91,91,91,91,,,91,91,91,,91,91,,26', -',,91,26,26,26,26,26,26,26,,,26,26,26,,26,26,,,,,26,,91,,,91,,91,,91', -',,,111,111,111,111,111,,,,,26,,,26,81,26,,26,81,81,81,81,81,81,81,111', -'111,81,81,81,,81,81,,30,,,81,30,30,30,30,30,30,30,,,30,30,30,,30,30', -',,,,30,,81,,,81,,81,,81,,,,,,,,,,,,,30,,,30,34,30,,30,34,34,34,34,34', -'34,34,,,34,34,34,,34,34,,79,,,34,79,79,79,79,79,79,79,,,79,79,79,,79', -'79,,34,34,,79,,34,,,34,,34,,34,,,,,,,,,,,,,79,,,79,77,79,,79,77,77,77', -'77,77,77,77,,,77,77,77,,77,77,,65,,,77,65,65,65,65,65,65,65,,,65,65', -'65,,65,65,,77,77,,65,,77,,,77,,77,,77,,,,,,,,,,,,,65,,,65,64,65,,65', -'64,64,64,64,64,64,64,,,64,64,64,,64,64,,42,,,64,42,42,42,42,42,42,42', -',,42,42,42,,42,42,,,,,42,,64,,,64,,64,,64,,,,,,,,,,,,,42,,,42,43,42', -',42,43,43,43,43,43,43,43,,,43,43,43,,43,43,,44,,,43,44,44,44,44,44,44', -'44,,,44,44,44,,44,44,,,,,44,,43,,,43,,43,,43,,,,,,,,,,,,,44,,,44,45', -'44,,44,45,45,45,45,45,45,45,,,45,45,45,,45,45,,46,,,45,46,46,46,46,46', -'46,46,,,46,46,46,,46,46,,,,,46,,45,,,45,,45,,45,,,,,,,,,,,,,46,,,46', -'63,46,,46,63,63,63,63,63,63,63,,,63,63,63,,63,63,,48,,,63,48,48,48,48', -'48,48,48,,,48,48,48,,48,48,,,,,48,,63,,,63,,63,,63,,,,,,,,,,,,,48,,', -'48,49,48,,48,49,49,49,49,49,49,49,,,49,49,49,,49,49,,50,,,49,50,50,50', -'50,50,50,50,,,50,50,50,,50,50,,,,,50,,49,,,49,,49,,49,,,,,,,,,,,,,50', -',,50,51,50,,50,51,51,51,51,51,51,51,,,51,51,51,,51,51,,52,,,51,52,52', -'52,52,52,52,52,,,52,52,52,,52,52,,,,,52,,51,,,51,,51,,51,,,,,,,,,,,', -',52,,,52,53,52,,52,53,53,53,53,53,53,53,,,53,53,53,,53,53,,54,,,53,54', -'54,54,54,54,54,54,,,54,54,54,,54,54,,,,,54,,53,,,53,,53,,53,,,,,,,,', -',,,,54,,,54,55,54,,54,55,55,55,55,55,55,55,,,55,55,55,,55,55,,56,,,55', -'56,56,56,56,56,56,56,,,56,56,56,,56,56,,,,,56,,55,,,55,,55,,55,,,,,', -',,,,,,,56,,,56,57,56,,56,57,57,57,57,57,57,57,,,57,57,57,,57,57,,58', -',,57,58,58,58,58,58,58,58,,,58,58,58,,58,58,,,,,58,,57,,,57,,57,,57', -',,,,,,,,,,,,58,,,58,59,58,,58,59,59,59,59,59,59,59,,,59,59,59,,59,59', -',60,,,59,60,60,60,60,60,60,60,,,60,60,60,,60,60,,,,,60,,59,,,59,,59', -',59,,,,,,,,,,,,,60,,,60,61,60,,60,61,61,61,61,61,61,61,,,61,61,61,,61', -'61,,62,,,61,62,62,62,62,62,62,62,,,62,62,62,,62,62,,,,,62,,61,,,61,', -'61,,61,,,,,,,,,,,,,62,,,62,47,62,,62,47,47,47,47,47,47,47,,,47,47,47', -',47,47,,,,,47,,,,,,,,,,,,135,,,,,,,,,,47,,,47,,47,,47,135,135,135,135', -'135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135', -'38,,,135,135,,135,,,,,,,,,,,38,38,38,38,38,38,38,38,38,38,38,38,38,38', -'38,38,38,38,38,38,38,38,38,,38,38,151,151,151,151,151,151,151,151,151', -'151,151,151,151,151,151,151,151,151,151,151,151,,,,151,151,,151,114', -'114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114', -'114,114,114,,,,114,114,144,144,144,144,144,144,144,144,144,144,144,144', -'144,144,144,144,144,144,144,144,144,,,,144,144,116,116,116,116,116,116', -'116,116,116,116,116,116,116,,,,,,,,,,,,116,116,138,138,138,138,138,138', -'138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,,,,138,138', -'76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,,,,76', -'76,115,115,115,115,115,115,115,115,115,115,115,115,115,,,,,,,,,,,,115', -'115,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,', -',,75,75,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139', -'139,139,139,139,139,139,,,,139,139,117,117,117,117,117,117,117,117,117', -'117,117,117,117,,,,,,,,,,,,117,117,14,14,14,14,14,14,14,14,14,14,14', -'14,14,14,14,14,14,14,14,14,14,,,,14,14,95,95,95,95,95,95,95,95,95,95', -'95,95,95,95,95,95,95,95,95,95,95,,,,95,95,112,112,112,112,112,112,112', -'112,112,112,112,112,112,112,112,112,112,112,112,112,112,,,,112,112,98', -'98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,,,,98,98', -'99,99,99,99,99,99,99,99,99,99,99,99,99,,,,,,,,,,,,99,99,126,126,126', -'126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126', -'126,,,,126,126,101,101,101,101,101,101,101,101,101,101,101,101,101,101', -'101,101,101,101,101,101,101,,,,101,101,102,102,102,102,102,102,102,102', -'102,102,102,102,102,,,,,,,,,,,,102,102,104,104,104,104,104,104,104,104', -'104,104,104,104,104,,,,,,,,,,,,104,104,106,106,106,106,106,106,106,106', -'106,106,106,106,106,,,,,,,,,,,,106,106,108,108,108,108,108,108,108,108', -'108,108,108,108,108,108,108,108,108,108,108,108,108,,,,108,108,110,110', -'110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110', -'110,110,,,,110,110,96,96,96,96,96,96,96,96,96,96,96,96,96,,,,,,,,,,', -',96,96' ] - racc_action_check = arr = Array.new(2235, nil) +'0,144,57,148,0,0,0,0,0,0,0,91,91,0,0,0,0,19,91,50,91,0,0,4,56,3,79,0', +'30,30,79,79,79,79,79,79,79,63,63,79,79,79,79,57,0,0,144,79,79,0,14,100', +'0,79,0,40,0,4,4,19,3,19,99,19,50,56,3,107,4,56,3,60,127,127,127,79,90', +'90,79,78,79,24,79,78,78,78,78,78,78,78,96,14,78,78,78,78,127,127,60', +'60,78,78,33,7,33,46,78,7,7,7,7,7,7,7,94,94,7,7,7,7,89,94,102,102,7,7', +'59,94,78,102,7,78,108,78,,78,161,161,117,117,54,54,161,129,129,129,129', +'129,,125,125,125,7,54,,7,9,7,,7,9,9,9,9,9,9,9,129,129,9,9,9,9,125,125', +'146,146,9,9,,10,146,,9,10,10,10,10,10,10,10,62,62,10,10,10,10,62,134', +'134,,10,10,,134,9,,10,9,,9,,9,164,164,122,122,119,119,164,131,131,131', +'131,131,51,51,147,147,10,53,53,10,13,10,,10,13,13,13,13,13,13,13,131', +'131,13,13,13,13,48,48,,,13,13,,48,,160,13,48,,160,160,160,160,160,160', +'160,,,160,160,160,160,,13,13,,160,160,13,,,13,160,13,,13,45,45,45,45', +'45,45,,,,,,,,160,160,,,,160,,,160,77,160,,160,77,77,77,77,77,77,77,', +',77,77,77,77,,,,,77,77,,21,,,77,21,21,21,21,21,21,21,,,21,21,21,21,', +',,,21,21,,,77,,21,77,,77,,77,,,,,,,,112,112,112,112,112,,,,,21,,,21', +'158,21,,21,158,158,158,158,158,158,158,112,112,158,158,158,158,,,,,158', +'158,,25,,,158,25,25,25,25,25,25,25,,,25,25,25,25,,,,,25,25,,,158,,25', +'158,,158,,158,,,,,,,,,,,,25,25,,,,25,,,25,26,25,,25,26,26,26,26,26,26', +'26,,,26,26,26,26,,,,,26,26,,,,27,26,,,27,27,27,27,27,27,27,,,27,27,27', +'27,,26,26,,27,27,26,,,26,27,26,,26,,,,,,,,,,133,133,133,133,133,,,,', +'27,,,27,157,27,,27,157,157,157,157,157,157,157,133,133,157,157,157,157', +',,,,157,157,,,,,157,,,,,,,,,,,,,,,,,157,157,,,,157,,,157,,157,,157,156', +'156,,,156,156,156,156,156,156,156,,,156,156,156,156,,,,,156,156,,153', +',,156,153,153,153,153,153,153,153,,,153,153,153,153,,,,,153,153,,,156', +',153,156,,156,,156,,,,,,,,,,,,,,,,,153,,,153,35,153,,153,35,35,35,35', +'35,35,35,,,35,35,35,35,,,,,35,35,,,,36,35,,,36,36,36,36,36,36,36,,,36', +'36,36,36,,35,35,,36,36,35,,,35,36,35,,35,,,,,,,,,,,,,,,,,,,36,,,36,76', +'36,,36,76,76,76,76,76,76,76,,,76,76,76,76,,,,,76,76,,42,,,76,42,42,42', +'42,42,42,42,,,42,42,42,42,,,,,42,42,,,76,,42,76,,76,,76,,,,,,,,,,,,', +',,,,42,,,42,44,42,,42,44,44,44,44,44,44,44,,,44,44,44,44,,,,,44,44,', +'75,,,44,75,75,75,75,75,75,75,,,75,75,75,75,,,,,75,75,,,44,,75,44,,44', +',44,,,,,,,,,,,,,,,,,75,,,75,138,75,,75,138,138,138,138,138,138,138,', +',138,138,138,138,,,,,138,138,,137,,,138,137,137,137,137,137,137,137', +',,137,137,137,137,,,,,137,137,,,138,,137,138,,138,,138,,,,,,,,,,,,,', +',,,137,,,137,74,137,,137,74,74,74,74,74,74,74,,,74,74,74,74,,,,,74,74', +',104,,,74,104,104,104,104,104,104,104,,,104,104,104,104,,,,,104,104', +',,74,,104,74,,74,,74,,,,,,,,,,,,104,104,,,,104,,,104,73,104,,104,73', +'73,73,73,73,73,73,,,73,73,73,73,,,,,73,73,,103,,,73,103,103,103,103', +'103,103,103,,,103,103,103,103,,,,,103,103,,,73,,103,73,,73,,73,,,,,', +',,,,,,,,,,,103,,,103,97,103,,103,97,97,97,97,97,97,97,,,97,97,97,97', +',,,,97,97,,81,,,97,81,81,81,81,81,81,81,,,81,81,81,81,,,,,81,81,,,97', +',81,97,,97,,97,,,,,,,,,,,,,,,,,81,,,81,88,81,,81,88,88,88,88,88,88,88', +',,88,88,88,88,,,,,88,88,,,,87,88,,,87,87,87,87,87,87,87,,,87,87,87,87', +',88,88,,87,87,88,,,88,87,88,,88,,,,,,,,,,,,,,,,,,,87,,,87,86,87,,87', +'86,86,86,86,86,86,86,,,86,86,86,86,,,,,86,86,,85,,,86,85,85,85,85,85', +'85,85,,,85,85,85,85,,,,,85,85,,,86,,85,86,,86,,86,,,,,,,,,,,,,,,,,85', +',,85,84,85,,85,84,84,84,84,84,84,84,,,84,84,84,84,,,,,84,84,,83,,,84', +'83,83,83,83,83,83,83,,,83,83,83,83,,,,,83,83,,,84,,83,84,,84,,84,,,', +',,,,,,,,,,,,,83,,,83,82,83,,83,82,82,82,82,82,82,82,,,82,82,82,82,,', +',,82,82,,64,,,82,64,64,64,64,64,64,64,,,64,64,64,64,,,,,64,64,,,82,', +'64,82,,82,,82,,,,,,,,,,,,,,,,,64,,,64,65,64,,64,65,65,65,65,65,65,65', +',,65,65,65,65,,,,,65,65,,66,,,65,66,66,66,66,66,66,66,,,66,66,66,66', +',,,,66,66,,,65,,66,65,,65,,65,,,,,,,,,,,,,,,,,66,,,66,67,66,,66,67,67', +'67,67,67,67,67,,,67,67,67,67,,,,,67,67,,68,,,67,68,68,68,68,68,68,68', +',,68,68,68,68,,,,,68,68,,,67,,68,67,,67,,67,,,,,,,,,,,,,,,,,68,,,68', +'69,68,,68,69,69,69,69,69,69,69,,,69,69,69,69,,,,,69,69,,70,,,69,70,70', +'70,70,70,70,70,,,70,70,70,70,,,,,70,70,,,69,,70,69,,69,,69,,,,,,,,,', +',,,,,,,70,,,70,71,70,,70,71,71,71,71,71,71,71,,,71,71,71,71,,,,,71,71', +',72,,,71,72,72,72,72,72,72,72,,,72,72,72,72,,,,,72,72,,,71,,72,71,,71', +',71,,,,,,,,,,,,,,,,,72,,,72,80,72,,72,80,80,80,80,80,80,80,,,80,80,80', +'80,,,,,80,80,,,,,80,,,,,,,,145,,,,,,,,,,,,,,80,,,80,,80,,80,145,145', +'145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145', +'145,145,52,,,145,145,,145,,,,,,,,,,,,,,,52,52,52,52,52,52,52,52,52,52', +'52,52,52,52,52,52,52,52,52,52,52,52,52,61,52,52,,,,61,61,61,61,61,61', +'61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,,,,61,61,162,162,162,162', +'162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162', +',,,162,162,,162,159,159,159,159,159,159,159,159,159,159,159,159,159', +'159,159,159,159,159,159,159,159,,,,159,159,,159,151,151,151,151,151', +'151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,,,,151', +'151,128,128,128,128,128,128,128,128,128,128,128,128,128,,,,,,,,,,,,128', +'128,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141', +'141,141,141,141,141,,,,141,141,92,92,92,92,92,92,92,92,92,92,92,92,92', +'92,92,92,92,92,92,92,92,,,,92,92,126,126,126,126,126,126,126,126,126', +'126,126,126,126,,,,,,,,,,,,126,126,95,95,95,95,95,95,95,95,95,95,95', +'95,95,95,95,95,95,95,95,95,95,,,,95,95,32,32,32,32,32,32,32,32,32,32', +'32,32,32,32,32,32,32,32,32,32,32,,,,32,32,58,58,58,58,58,58,58,58,58', +'58,58,58,58,58,58,58,58,58,58,58,58,,,,58,58,124,124,124,124,124,124', +'124,124,124,124,124,124,124,,,,,,,,,,,,124,124,150,150,150,150,150,150', +'150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,,,,150,150', +'123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123', +'123,123,123,123,,,,123,123,121,121,121,121,121,121,121,121,121,121,121', +'121,121,,,,,,,,,,,,121,121,110,110,110,110,110,110,110,110,110,110,110', +'110,110,110,110,110,110,110,110,110,110,,,,110,110,111,111,111,111,111', +'111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,,,,111', +'111,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113', +'113,113,113,113,113,,,,113,113,114,114,114,114,114,114,114,114,114,114', +'114,114,114,,,,,,,,,,,,114,114,115,115,115,115,115,115,115,115,115,115', +'115,115,115,,,,,,,,,,,,115,115,116,116,116,116,116,116,116,116,116,116', +'116,116,116,,,,,,,,,,,,116,116,132,132,132,132,132,132,132,132,132,132', +'132,132,132,132,132,132,132,132,132,132,132,,,,132,132,118,118,118,118', +'118,118,118,118,118,118,118,118,118,,,,,,,,,,,,118,118,120,120,120,120', +'120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120', +',,,120,120,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130', +'130,130,130,130,130,130,,,,130,130' ] + racc_action_check = arr = Array.new(2620, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| @@ -201,179 +223,185 @@ clist = [ end racc_action_pointer = [ - -2, nil, nil, nil, nil, 18, nil, 71, 87, 136, - nil, 38, nil, nil, 1876, -10, 8, 294, 343, 363, - nil, nil, 14, nil, 72, 4, 501, nil, nil, 38, - 570, nil, nil, nil, 619, nil, nil, nil, 1588, 11, - 274, 193, 777, 826, 846, 895, 915, 1516, 984, 1033, - 1053, 1102, 1122, 1171, 1191, 1240, 1260, 1309, 1329, 1378, - 1398, 1447, 1467, 964, 757, 708, 41, -1, 9, 55, - 461, nil, nil, -11, 82, 1798, 1746, 688, -12, 639, - nil, 550, 13, 46, -11, nil, nil, 183, nil, 124, - 58, 481, 432, nil, nil, 1902, 2188, 104, 1954, 1980, - 90, 2032, 2058, 156, 2084, 225, 2110, 242, 2136, 380, - 2162, 518, 1928, 173, 1642, 1772, 1694, 1850, 82, nil, - 13, 412, 274, nil, 287, nil, 2006, 150, 27, 24, - nil, 225, 142, nil, nil, 1550, 226, nil, 1720, 1824, - nil, nil, nil, nil, 1668, 7, 205, nil, nil, 156, - nil, 1614, 67, nil, 290, nil ] + -2, nil, nil, 12, 11, nil, nil, 101, nil, 154, + 178, nil, nil, 231, 37, nil, nil, nil, nil, 5, + nil, 334, nil, nil, 81, 411, 464, 490, nil, nil, + -18, nil, 2179, 51, nil, 677, 703, nil, nil, nil, + 43, nil, 780, nil, 833, 284, 57, nil, 204, nil, + 7, 176, 1912, 181, 94, nil, 11, -11, 2205, 126, + 52, 1941, 145, -12, 1475, 1528, 1552, 1605, 1629, 1682, + 1706, 1759, 1783, 1064, 987, 857, 756, 310, 77, 24, + 1836, 1165, 1451, 1398, 1374, 1321, 1297, 1244, 1218, 105, + 30, -35, 2101, nil, 68, 2153, 35, 1141, nil, 50, + 39, nil, 76, 1088, 1011, nil, nil, 55, 120, nil, + 2335, 2361, 351, 2387, 2413, 2439, 2465, 89, 2517, 168, + 2543, 2309, 166, 2283, 2231, 124, 2127, 47, 2049, 118, + 2569, 195, 2491, 507, 152, nil, nil, 934, 910, nil, + nil, 2075, nil, nil, -11, 1870, 129, 181, -1, nil, + 2257, 2023, nil, 624, nil, nil, 600, 543, 387, 1995, + 257, 90, 1967, nil, 167, nil, nil, nil ] racc_action_default = [ - -1, -25, -12, -59, -13, -87, -14, -87, -87, -87, - -15, -2, -57, -16, -3, -87, -17, -87, -78, -87, - -20, -7, -87, -21, -8, -70, -87, -22, -9, -74, - -87, -23, -18, -10, -87, -24, -19, -11, -87, -87, - -87, -30, -5, -87, -87, -87, -87, -87, -87, -87, - -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, - -87, -87, -87, -87, -87, -87, -87, -87, -75, -87, - -87, -62, -64, -6, -87, -79, -28, -87, -87, -87, - -60, -78, -87, -87, -70, -71, -66, -31, -61, -29, - -87, -87, -87, 156, -56, -4, -44, -33, -53, -45, - -34, -54, -46, -35, -47, -36, -48, -37, -49, -38, - -50, -39, -51, -40, -52, -41, -42, -43, -32, -63, - -87, -87, -87, -77, -87, -58, -26, -87, -87, -87, - -68, -87, -87, -67, -86, -87, -87, -65, -81, -80, - -55, -76, -73, -72, -27, -87, -87, -82, -83, -5, - -69, -87, -87, -84, -87, -85 ] + -1, -59, -23, -8, -70, -60, -57, -89, -9, -89, + -89, -16, -10, -89, -74, -17, -11, -55, -12, -89, + -13, -89, -18, -14, -89, -89, -89, -89, -19, -15, + -2, -20, -3, -89, -21, -89, -78, -58, -22, -7, + -89, -61, -78, -64, -89, -89, -89, -66, -89, -71, + -70, -29, -89, -27, -89, -62, -89, -75, -26, -89, + -89, -3, -89, -28, -5, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -6, -89, -79, -63, -89, -24, -89, -89, -68, -89, + -89, -67, -89, -89, -89, -88, 168, -89, -89, -54, + -4, -49, -38, -50, -39, -40, -41, -30, -42, -31, + -51, -43, -32, -52, -44, -33, -45, -34, -46, -35, + -47, -36, -48, -37, -89, -56, -77, -89, -89, -76, + -65, -25, -73, -72, -89, -89, -89, -89, -89, -53, + -81, -80, -69, -89, -82, -83, -5, -89, -89, -89, + -89, -89, -89, -84, -89, -86, -87, -85 ] racc_goto_table = [ - 11, 74, 38, 66, 42, 67, 41, 68, 40, 82, - 120, 142, 143, 7, nil, 75, 76, 73, 84, nil, - nil, nil, nil, 87, nil, nil, nil, 89, 142, nil, - 80, 92, nil, 42, 90, 88, nil, nil, nil, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, nil, 127, nil, 42, 121, 132, nil, - nil, nil, nil, 80, 88, 128, 126, 124, 75, nil, - nil, nil, nil, 42, nil, nil, nil, nil, 135, nil, - nil, nil, 136, nil, nil, nil, nil, nil, nil, nil, + 50, 48, 55, 56, 30, 51, 91, 52, 53, 142, + 143, 57, 94, 96, 24, nil, nil, 54, nil, 58, + nil, nil, nil, 61, nil, 63, 64, nil, nil, 60, + 62, nil, nil, nil, 92, nil, nil, nil, nil, 90, + 92, nil, 95, nil, 99, 55, nil, 102, 104, nil, + 64, nil, nil, nil, 142, nil, 64, nil, 64, nil, + nil, nil, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 64, 137, nil, nil, + 137, nil, 134, nil, nil, 141, nil, nil, 144, nil, + nil, 145, nil, nil, nil, nil, nil, nil, 146, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 42, 138, 139, - 121, nil, nil, nil, nil, 145, nil, nil, 144, 149, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 151, nil, nil, 95, 42, nil, nil, - nil, nil, 154 ] + 64, nil, nil, nil, nil, 150, 151, nil, nil, nil, + nil, nil, 156, 157, nil, nil, nil, nil, nil, nil, + nil, 159, nil, nil, 110, nil, 162, 64, nil, nil, + 64, 161, nil, nil, 164 ] racc_goto_check = [ - 2, 22, 3, 15, 4, 6, 3, 19, 2, 21, - 5, 16, 16, 1, nil, 3, 3, 2, 4, nil, - nil, nil, nil, 3, nil, nil, nil, 3, 16, nil, - 18, 4, nil, 4, 2, 18, nil, nil, nil, 3, + 4, 22, 19, 6, 2, 3, 23, 3, 3, 14, + 14, 20, 23, 5, 1, nil, nil, 2, nil, 3, + nil, nil, nil, 3, nil, 3, 4, nil, nil, 2, + 2, nil, nil, nil, 3, nil, nil, nil, nil, 2, + 3, nil, 3, nil, 4, 19, nil, 22, 4, nil, + 4, nil, nil, nil, 14, nil, 4, nil, 4, nil, + nil, nil, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, nil, 22, nil, 4, 4, 21, nil, - nil, nil, nil, 18, 18, 4, 3, 2, 3, nil, - nil, nil, nil, 4, nil, nil, nil, nil, 3, nil, - nil, nil, 2, nil, nil, nil, nil, nil, nil, nil, + 3, 3, 3, 3, 3, 3, 4, 4, nil, nil, + 4, nil, 2, nil, nil, 3, nil, nil, 4, nil, + nil, 3, nil, nil, nil, nil, nil, nil, 2, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 4, 3, 3, - 4, nil, nil, nil, nil, 4, nil, nil, 3, 4, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 3, nil, nil, 3, 4, nil, nil, - nil, nil, 2 ] + 4, nil, nil, nil, nil, 3, 3, nil, nil, nil, + nil, nil, 4, 4, nil, nil, nil, nil, nil, nil, + nil, 3, nil, nil, 3, nil, 3, 4, nil, nil, + 4, 2, nil, nil, 2 ] racc_goto_pointer = [ - nil, 13, 0, -3, -7, -60, -10, nil, nil, nil, - nil, nil, nil, nil, nil, -12, -117, nil, 6, -8, - nil, -16, -17 ] + nil, 14, 4, -2, -4, -32, -16, nil, nil, nil, + nil, nil, nil, nil, -90, nil, nil, nil, nil, -12, + -8, nil, -3, -30 ] racc_goto_default = [ - nil, nil, nil, 14, 17, 21, 24, 28, 33, 37, - 2, 4, 6, 10, 13, 16, 85, 22, 71, 29, - 72, nil, nil ] + nil, nil, nil, 32, 35, 39, 3, 8, 12, 16, + 18, 20, 23, 29, 49, 33, 37, 1, 5, 41, + 14, 43, nil, nil ] racc_reduce_table = [ 0, 0, :racc_error, - 0, 57, :_reduce_1, - 1, 57, :_reduce_2, - 1, 58, :_reduce_3, - 3, 58, :_reduce_4, - 2, 58, :_reduce_5, - 2, 58, :_reduce_6, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 59, :_reduce_none, - 1, 60, :_reduce_none, - 1, 60, :_reduce_none, - 1, 61, :_reduce_20, - 1, 61, :_reduce_21, - 1, 61, :_reduce_22, - 1, 61, :_reduce_23, - 1, 61, :_reduce_24, - 1, 61, :_reduce_25, - 3, 64, :_reduce_26, - 3, 72, :_reduce_27, + 0, 61, :_reduce_1, + 1, 61, :_reduce_2, + 1, 62, :_reduce_3, + 3, 62, :_reduce_4, + 2, 62, :_reduce_5, + 2, 62, :_reduce_6, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 64, :_reduce_none, + 1, 64, :_reduce_none, + 1, 65, :_reduce_18, + 1, 65, :_reduce_19, + 1, 65, :_reduce_20, + 1, 65, :_reduce_21, + 1, 65, :_reduce_22, + 1, 65, :_reduce_23, + 3, 68, :_reduce_24, + 3, 74, :_reduce_25, + 2, 73, :_reduce_26, + 2, 70, :_reduce_27, 2, 70, :_reduce_28, - 2, 67, :_reduce_29, - 2, 67, :_reduce_30, - 2, 67, :_reduce_31, - 3, 67, :_reduce_32, - 3, 67, :_reduce_33, - 3, 67, :_reduce_34, - 3, 67, :_reduce_35, - 3, 67, :_reduce_36, - 3, 67, :_reduce_37, - 3, 67, :_reduce_38, - 3, 67, :_reduce_39, - 3, 67, :_reduce_40, - 3, 67, :_reduce_41, - 3, 67, :_reduce_42, - 3, 67, :_reduce_43, - 3, 67, :_reduce_44, - 3, 67, :_reduce_45, - 3, 67, :_reduce_46, - 3, 67, :_reduce_47, - 3, 67, :_reduce_48, - 3, 67, :_reduce_49, - 3, 67, :_reduce_50, - 3, 67, :_reduce_51, - 3, 67, :_reduce_52, - 3, 67, :_reduce_53, - 3, 67, :_reduce_54, - 4, 66, :_reduce_55, - 3, 66, :_reduce_56, - 1, 73, :_reduce_57, - 3, 73, :_reduce_58, - 1, 62, :_reduce_59, - 2, 62, :_reduce_60, - 2, 62, :_reduce_61, - 2, 62, :_reduce_62, - 2, 74, :_reduce_63, - 1, 74, :_reduce_64, - 3, 76, :_reduce_65, - 2, 65, :_reduce_66, - 3, 65, :_reduce_67, - 3, 65, :_reduce_68, - 5, 65, :_reduce_69, - 0, 77, :_reduce_70, - 1, 77, :_reduce_71, - 3, 77, :_reduce_72, - 3, 77, :_reduce_73, - 1, 63, :_reduce_74, - 2, 63, :_reduce_75, - 4, 75, :_reduce_76, - 3, 68, :_reduce_77, - 0, 78, :_reduce_78, - 1, 78, :_reduce_79, - 3, 78, :_reduce_80, - 3, 78, :_reduce_81, - 5, 69, :_reduce_82, - 5, 69, :_reduce_83, - 7, 69, :_reduce_84, - 8, 69, :_reduce_85, - 3, 71, :_reduce_86 ] + 2, 70, :_reduce_29, + 3, 70, :_reduce_30, + 3, 70, :_reduce_31, + 3, 70, :_reduce_32, + 3, 70, :_reduce_33, + 3, 70, :_reduce_34, + 3, 70, :_reduce_35, + 3, 70, :_reduce_36, + 3, 70, :_reduce_37, + 3, 70, :_reduce_38, + 3, 70, :_reduce_39, + 3, 70, :_reduce_40, + 3, 70, :_reduce_41, + 3, 70, :_reduce_42, + 3, 70, :_reduce_43, + 3, 70, :_reduce_44, + 3, 70, :_reduce_45, + 3, 70, :_reduce_46, + 3, 70, :_reduce_47, + 3, 70, :_reduce_48, + 3, 70, :_reduce_49, + 3, 70, :_reduce_50, + 3, 70, :_reduce_51, + 3, 70, :_reduce_52, + 4, 69, :_reduce_53, + 3, 69, :_reduce_54, + 1, 75, :_reduce_55, + 3, 75, :_reduce_56, + 1, 66, :_reduce_57, + 1, 66, :_reduce_58, + 1, 66, :_reduce_59, + 1, 66, :_reduce_60, + 2, 66, :_reduce_61, + 2, 66, :_reduce_62, + 2, 79, :_reduce_63, + 1, 79, :_reduce_64, + 3, 81, :_reduce_65, + 2, 77, :_reduce_66, + 3, 77, :_reduce_67, + 3, 77, :_reduce_68, + 5, 77, :_reduce_69, + 0, 82, :_reduce_70, + 1, 82, :_reduce_71, + 3, 82, :_reduce_72, + 3, 82, :_reduce_73, + 1, 67, :_reduce_74, + 2, 67, :_reduce_75, + 4, 80, :_reduce_76, + 3, 76, :_reduce_77, + 0, 83, :_reduce_78, + 1, 83, :_reduce_79, + 3, 83, :_reduce_80, + 3, 83, :_reduce_81, + 5, 71, :_reduce_82, + 5, 71, :_reduce_83, + 7, 71, :_reduce_84, + 8, 71, :_reduce_85, + 7, 72, :_reduce_86, + 7, 72, :_reduce_87, + 3, 78, :_reduce_88 ] -racc_reduce_n = 87 +racc_reduce_n = 89 -racc_shift_n = 156 +racc_shift_n = 168 racc_token_table = { false => 0, @@ -394,46 +422,50 @@ racc_token_table = { :PARAM => 15, :NEW => 16, :RETURN => 17, - :UMINUS => 18, - :NOT => 19, - "!" => 20, - "*" => 21, - "/" => 22, - "%" => 23, - "+" => 24, - "-" => 25, - "<=" => 26, - "<" => 27, - ">" => 28, - ">=" => 29, - "==" => 30, - "!=" => 31, - :IS => 32, - :AINT => 33, - "&&" => 34, - "||" => 35, - :AND => 36, - :OR => 37, - "-=" => 38, - "+=" => 39, - "/=" => 40, - "*=" => 41, - "\n" => 42, - ";" => 43, - ":" => 44, - "||=" => 45, - "&&=" => 46, - "=>" => 47, - "." => 48, - "," => 49, - "[" => 50, - "]" => 51, - "{" => 52, - "}" => 53, - "(" => 54, - ")" => 55 } + :TRY => 18, + :CATCH => 19, + :FINALLY => 20, + :THROW => 21, + :UMINUS => 22, + :NOT => 23, + "!" => 24, + "*" => 25, + "/" => 26, + "%" => 27, + "+" => 28, + "-" => 29, + "<=" => 30, + "<" => 31, + ">" => 32, + ">=" => 33, + "==" => 34, + "!=" => 35, + :IS => 36, + :AINT => 37, + "&&" => 38, + "||" => 39, + :AND => 40, + :OR => 41, + "-=" => 42, + "+=" => 43, + "/=" => 44, + "*=" => 45, + "\n" => 46, + ";" => 47, + ":" => 48, + "||=" => 49, + "&&=" => 50, + "=>" => 51, + "." => 52, + "," => 53, + "[" => 54, + "]" => 55, + "{" => 56, + "}" => 57, + "(" => 58, + ")" => 59 } -racc_nt_base = 56 +racc_nt_base = 60 racc_use_result_var = true @@ -472,6 +504,10 @@ Racc_token_to_s_table = [ "PARAM", "NEW", "RETURN", + "TRY", + "CATCH", + "FINALLY", + "THROW", "UMINUS", "NOT", "\"!\"", @@ -516,18 +552,19 @@ Racc_token_to_s_table = [ "Expression", "Terminator", "Literal", - "Variable", + "Value", "Call", "Assign", - "Object", "Code", "Operation", - "Array", "If", + "Try", "Return", - "Parenthetical", "AssignObj", "ParamList", + "Array", + "Object", + "Parenthetical", "Accessor", "Invocation", "Index", @@ -540,42 +577,42 @@ Racc_debug_parser = false # reduce 0 omitted -module_eval(<<'.,.,', 'grammar.y', 38) +module_eval(<<'.,.,', 'grammar.y', 39) def _reduce_1(val, _values, result) result = Nodes.new([]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 39) +module_eval(<<'.,.,', 'grammar.y', 40) def _reduce_2(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 44) +module_eval(<<'.,.,', 'grammar.y', 45) def _reduce_3(val, _values, result) result = Nodes.new(val) result end .,., -module_eval(<<'.,.,', 'grammar.y', 45) +module_eval(<<'.,.,', 'grammar.y', 46) def _reduce_4(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 46) +module_eval(<<'.,.,', 'grammar.y', 47) def _reduce_5(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 47) +module_eval(<<'.,.,', 'grammar.y', 48) def _reduce_6(val, _values, result) result = val[1] result @@ -604,474 +641,498 @@ module_eval(<<'.,.,', 'grammar.y', 47) # reduce 17 omitted -# reduce 18 omitted - -# reduce 19 omitted +module_eval(<<'.,.,', 'grammar.y', 72) + def _reduce_18(val, _values, result) + result = LiteralNode.new(val[0]) + result + end +.,., module_eval(<<'.,.,', 'grammar.y', 73) - def _reduce_20(val, _values, result) + def _reduce_19(val, _values, result) result = LiteralNode.new(val[0]) result end .,., module_eval(<<'.,.,', 'grammar.y', 74) - def _reduce_21(val, _values, result) + def _reduce_20(val, _values, result) result = LiteralNode.new(val[0]) result end .,., module_eval(<<'.,.,', 'grammar.y', 75) - def _reduce_22(val, _values, result) - result = LiteralNode.new(val[0]) - result - end -.,., - -module_eval(<<'.,.,', 'grammar.y', 76) - def _reduce_23(val, _values, result) + def _reduce_21(val, _values, result) result = LiteralNode.new(true) result end .,., -module_eval(<<'.,.,', 'grammar.y', 77) - def _reduce_24(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 76) + def _reduce_22(val, _values, result) result = LiteralNode.new(false) result end .,., -module_eval(<<'.,.,', 'grammar.y', 78) - def _reduce_25(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 77) + def _reduce_23(val, _values, result) result = LiteralNode.new(nil) result end .,., -module_eval(<<'.,.,', 'grammar.y', 83) - def _reduce_26(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 82) + def _reduce_24(val, _values, result) result = AssignNode.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 88) - def _reduce_27(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 87) + def _reduce_25(val, _values, result) result = AssignNode.new(val[0], val[2], :object) result end .,., -module_eval(<<'.,.,', 'grammar.y', 93) - def _reduce_28(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 92) + def _reduce_26(val, _values, result) result = ReturnNode.new(val[1]) result end .,., +module_eval(<<'.,.,', 'grammar.y', 99) + def _reduce_27(val, _values, result) + result = OpNode.new(val[0], val[1]) + result + end +.,., + module_eval(<<'.,.,', 'grammar.y', 100) - def _reduce_29(val, _values, result) + def _reduce_28(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., module_eval(<<'.,.,', 'grammar.y', 101) - def _reduce_30(val, _values, result) + def _reduce_29(val, _values, result) result = OpNode.new(val[0], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 102) - def _reduce_31(val, _values, result) - result = OpNode.new(val[0], val[1]) +module_eval(<<'.,.,', 'grammar.y', 104) + def _reduce_30(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 105) - def _reduce_32(val, _values, result) + def _reduce_31(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., module_eval(<<'.,.,', 'grammar.y', 106) + def _reduce_32(val, _values, result) + result = OpNode.new(val[1], val[0], val[2]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 108) def _reduce_33(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 107) +module_eval(<<'.,.,', 'grammar.y', 109) def _reduce_34(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 109) +module_eval(<<'.,.,', 'grammar.y', 111) def _reduce_35(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 110) +module_eval(<<'.,.,', 'grammar.y', 112) def _reduce_36(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 112) +module_eval(<<'.,.,', 'grammar.y', 113) def _reduce_37(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 113) +module_eval(<<'.,.,', 'grammar.y', 114) def _reduce_38(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 114) +module_eval(<<'.,.,', 'grammar.y', 116) def _reduce_39(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 115) +module_eval(<<'.,.,', 'grammar.y', 117) def _reduce_40(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 117) +module_eval(<<'.,.,', 'grammar.y', 118) def _reduce_41(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 118) +module_eval(<<'.,.,', 'grammar.y', 119) def _reduce_42(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 119) +module_eval(<<'.,.,', 'grammar.y', 121) def _reduce_43(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 120) +module_eval(<<'.,.,', 'grammar.y', 122) def _reduce_44(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 122) +module_eval(<<'.,.,', 'grammar.y', 123) def _reduce_45(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 123) +module_eval(<<'.,.,', 'grammar.y', 124) def _reduce_46(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 124) +module_eval(<<'.,.,', 'grammar.y', 126) def _reduce_47(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 125) +module_eval(<<'.,.,', 'grammar.y', 127) def _reduce_48(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 127) +module_eval(<<'.,.,', 'grammar.y', 128) def _reduce_49(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 128) +module_eval(<<'.,.,', 'grammar.y', 129) def _reduce_50(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 129) +module_eval(<<'.,.,', 'grammar.y', 130) def _reduce_51(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 130) +module_eval(<<'.,.,', 'grammar.y', 131) def _reduce_52(val, _values, result) result = OpNode.new(val[1], val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 131) +module_eval(<<'.,.,', 'grammar.y', 137) def _reduce_53(val, _values, result) - result = OpNode.new(val[1], val[0], val[2]) - result - end -.,., - -module_eval(<<'.,.,', 'grammar.y', 132) - def _reduce_54(val, _values, result) - result = OpNode.new(val[1], val[0], val[2]) - result - end -.,., - -module_eval(<<'.,.,', 'grammar.y', 138) - def _reduce_55(val, _values, result) result = CodeNode.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 139) - def _reduce_56(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 138) + def _reduce_54(val, _values, result) result = CodeNode.new([], val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 143) - def _reduce_57(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 142) + def _reduce_55(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 144) - def _reduce_58(val, _values, result) +module_eval(<<'.,.,', 'grammar.y', 143) + def _reduce_56(val, _values, result) result = val[0] << val[2] result end .,., +module_eval(<<'.,.,', 'grammar.y', 147) + def _reduce_57(val, _values, result) + result = ValueNode.new(val) + result + end +.,., + module_eval(<<'.,.,', 'grammar.y', 148) - def _reduce_59(val, _values, result) - result = VariableNode.new(val) + def _reduce_58(val, _values, result) + result = ValueNode.new(val) result end .,., module_eval(<<'.,.,', 'grammar.y', 149) - def _reduce_60(val, _values, result) - result = val[0] << val[1] + def _reduce_59(val, _values, result) + result = ValueNode.new(val) result end .,., module_eval(<<'.,.,', 'grammar.y', 150) - def _reduce_61(val, _values, result) - result = VariableNode.new(val[0], [val[1]]) + def _reduce_60(val, _values, result) + result = ValueNode.new(val) result end .,., module_eval(<<'.,.,', 'grammar.y', 151) - def _reduce_62(val, _values, result) - result = VariableNode.new(val[0], [val[1]]) + def _reduce_61(val, _values, result) + result = val[0] << val[1] result end .,., -module_eval(<<'.,.,', 'grammar.y', 155) +module_eval(<<'.,.,', 'grammar.y', 152) + def _reduce_62(val, _values, result) + result = ValueNode.new(val[0], [val[1]]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 156) def _reduce_63(val, _values, result) result = AccessorNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 156) +module_eval(<<'.,.,', 'grammar.y', 157) def _reduce_64(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 160) +module_eval(<<'.,.,', 'grammar.y', 161) def _reduce_65(val, _values, result) result = IndexNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 164) +module_eval(<<'.,.,', 'grammar.y', 165) def _reduce_66(val, _values, result) result = ObjectNode.new([]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 165) +module_eval(<<'.,.,', 'grammar.y', 166) def _reduce_67(val, _values, result) result = ObjectNode.new([]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 166) +module_eval(<<'.,.,', 'grammar.y', 167) def _reduce_68(val, _values, result) result = ObjectNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 168) +module_eval(<<'.,.,', 'grammar.y', 169) def _reduce_69(val, _values, result) result = ObjectNode.new(val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 172) +module_eval(<<'.,.,', 'grammar.y', 173) def _reduce_70(val, _values, result) result = [] result end .,., -module_eval(<<'.,.,', 'grammar.y', 173) +module_eval(<<'.,.,', 'grammar.y', 174) def _reduce_71(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 174) +module_eval(<<'.,.,', 'grammar.y', 175) def _reduce_72(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 175) +module_eval(<<'.,.,', 'grammar.y', 176) def _reduce_73(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 180) +module_eval(<<'.,.,', 'grammar.y', 181) def _reduce_74(val, _values, result) result = val[0] result end .,., -module_eval(<<'.,.,', 'grammar.y', 181) +module_eval(<<'.,.,', 'grammar.y', 182) def _reduce_75(val, _values, result) - result = val[0].new_instance + result = val[1].new_instance result end .,., -module_eval(<<'.,.,', 'grammar.y', 185) +module_eval(<<'.,.,', 'grammar.y', 186) def _reduce_76(val, _values, result) result = CallNode.new(val[0], val[2]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 190) +module_eval(<<'.,.,', 'grammar.y', 191) def _reduce_77(val, _values, result) result = ArrayNode.new(val[1]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 195) +module_eval(<<'.,.,', 'grammar.y', 196) def _reduce_78(val, _values, result) result = [] result end .,., -module_eval(<<'.,.,', 'grammar.y', 196) +module_eval(<<'.,.,', 'grammar.y', 197) def _reduce_79(val, _values, result) result = val result end .,., -module_eval(<<'.,.,', 'grammar.y', 197) +module_eval(<<'.,.,', 'grammar.y', 198) def _reduce_80(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 198) +module_eval(<<'.,.,', 'grammar.y', 199) def _reduce_81(val, _values, result) result = val[0] << val[2] result end .,., -module_eval(<<'.,.,', 'grammar.y', 203) +module_eval(<<'.,.,', 'grammar.y', 204) def _reduce_82(val, _values, result) result = IfNode.new(val[1], val[3]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 205) +module_eval(<<'.,.,', 'grammar.y', 206) def _reduce_83(val, _values, result) result = IfNode.new(val[1], val[3]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 208) +module_eval(<<'.,.,', 'grammar.y', 209) def _reduce_84(val, _values, result) result = IfNode.new(val[1], val[3], val[5]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 211) +module_eval(<<'.,.,', 'grammar.y', 212) def _reduce_85(val, _values, result) result = IfNode.new(val[1], val[3], val[6]) result end .,., -module_eval(<<'.,.,', 'grammar.y', 215) +module_eval(<<'.,.,', 'grammar.y', 217) def _reduce_86(val, _values, result) + result = TryNode.new(val[1], val[3], val[5]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 219) + def _reduce_87(val, _values, result) + result = TryNode.new(val[1], val[3], val[5]) + result + end +.,., + +module_eval(<<'.,.,', 'grammar.y', 223) + def _reduce_88(val, _values, result) result = ParentheticalNode.new(val[1]) result end diff --git a/poignant.jaa b/poignant.jaa new file mode 100644 index 00000000..4c68183e --- /dev/null +++ b/poignant.jaa @@ -0,0 +1,106 @@ +# Examples from the Poignant Guide. + +# ['toast', 'cheese', 'wine'].each { |food| print food.capitalize } + +['toast', 'wine', 'cheese'].each( food => print(food.capitalize()). ) + + + +# class LotteryTicket +# def picks; @picks; end +# def picks=(var); @picks = var; end +# def purchased; @purchased; end +# def purchased=(var); @purchased = var; end +# end + +LotteryTicket: { + get_picks: => this.picks. + set_picks: nums => this.picks: nums. + get_purchase: => this.purchase. + set_purchase: amount => this.purchase: amount. +} + + + +# module WishScanner +# def scan_for_a_wish +# wish = self.read.detect do |thought| +# thought.index( 'wish: ' ) == 0 +# end +# wish.gsub( 'wish: ', '' ) +# end +# end + +WishScanner : { + scan_for_a_wish: => + wish: this.read().detect( thought => thought.index('wish: ') is 0. ) + wish.replace('wish: ', ''). +} + + + +# class Creature +# +# # This method applies a hit taken during a fight. +# def hit( damage ) +# p_up = rand( charisma ) +# if p_up % 9 == 7 +# @life += p_up / 4 +# puts "[#{ self.class } magick powers up #{ p_up }!]" +# end +# @life -= damage +# puts "[#{ self.class } has died.]" if @life <= 0 +# end +# +# # This method takes one turn in a fight. +# def fight( enemy, weapon ) +# if life <= 0 +# puts "[#{ self.class } is too dead to fight!]" +# return +# end +# +# # Attack the opponent +# your_hit = rand( strength + weapon ) +# puts "[You hit with #{ your_hit } points of damage!]" +# enemy.hit( your_hit ) +# +# # Retaliation +# p enemy +# if enemy.life > 0 +# enemy_hit = rand( enemy.strength + enemy.weapon ) +# puts "[Your enemy hit with #{ enemy_hit } points of damage!]" +# self.hit( enemy_hit ) +# end +# end +# +# end + +Creature : { + + # This method applies a hit taken during a fight. + hit: damage => + p_up: Math.rand( this.charisma ) + if p_up % 9 is 7 + this.life += p_up / 4 + puts( "[" + this.name + " magick powers up " + p_up + "!]" ). + this.life -= damage + if this.life <= 0 then puts( "[" + this.name + " has died.]" ).. + + # This method takes one turn in a fight. + fight: enemy, weapon => + if this.life <= 0 then return puts( "[" + this.name + "is too dead to fight!]" ). + + # Attack the opponent. + your_hit: Math.rand( this.strength + weapon ) + puts( "[You hit with " + your_hit + "points of damage!]" ) + enemy.hit( your_hit ) + + # Retaliation. + puts( enemy ) + if enemy.life > 0 + enemy_hit: Math.rand( enemy.strength + enemy.weapon ) + puts( "[Your enemy hit with " + enemy_hit + "points of damage!]" ) + this.hit( enemy_hit ). + this. + +} \ No newline at end of file