diff options
author | Brice Figureau <brice-puppet@daysofwonder.com> | 2008-09-26 23:03:39 +0200 |
---|---|---|
committer | James Turnbull <james@lovedthanlost.net> | 2008-10-01 01:35:03 +1000 |
commit | 4cf9710bd27fdb5f0720f4d8478ef940e7c4ba59 (patch) | |
tree | e2db8d91c8e1d45bb9413899ff6566a712264b0a | |
parent | cfa230a2d7b0c5e57cc0379785bd2025520f1c35 (diff) | |
download | puppet-4cf9710bd27fdb5f0720f4d8478ef940e7c4ba59.tar.gz puppet-4cf9710bd27fdb5f0720f4d8478ef940e7c4ba59.tar.xz puppet-4cf9710bd27fdb5f0720f4d8478ef940e7c4ba59.zip |
Add parser for arbitrary expressions
The expressions can be used in if 'test' and in the
right side of assignements.
The expressions can contain any number of sub-expressions
combined by either arithmetic operators, comparison operators,
or boolean operators.
Random Usage Examples:
$result = ((( $two + 2) / $one) + 4 * 5.45) - (6 << 7) + (0x800 + -9)
or
if ($a < 10) and ($a + 10 != 200) {
...
}
-rw-r--r-- | CHANGELOG | 2 | ||||
-rw-r--r-- | lib/puppet/parser/grammar.ra | 87 | ||||
-rw-r--r-- | lib/puppet/parser/lexer.rb | 14 | ||||
-rw-r--r-- | lib/puppet/parser/parser.rb | 1564 | ||||
-rwxr-xr-x | spec/unit/parser/lexer.rb | 36 | ||||
-rwxr-xr-x | spec/unit/parser/parser.rb | 48 | ||||
-rw-r--r-- | test/data/snippets/arithmetic_expression.pp | 8 | ||||
-rw-r--r-- | test/data/snippets/ifexpression.rb | 6 |
8 files changed, 1116 insertions, 649 deletions
@@ -1,4 +1,6 @@ 0.24.x + Fixed #1585 - Allow complex 'if' and variable expressions + Fixed #1564 - Saving File#checksum to state.yaml broken Fixed #1603 - Added support for running Puppet inside a Rack application diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra index 07666acb4..b44cd0612 100644 --- a/lib/puppet/parser/grammar.ra +++ b/lib/puppet/parser/grammar.ra @@ -9,7 +9,19 @@ token FALSE EQUALS APPENDS LESSEQUAL NOTEQUAL DOT COLON LLCOLLECT RRCOLLECT token QMARK LPAREN RPAREN ISEQUAL GREATEREQUAL GREATERTHAN LESSTHAN token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSNAME CLASSREF -token NOT OR AND UNDEF PARROW +token NOT OR AND UNDEF PARROW PLUS MINUS TIMES DIV LSHIFT RSHIFT UMINUS + +prechigh + right NOT + nonassoc UMINUS + left TIMES DIV + left MINUS PLUS + left LSHIFT RSHIFT + left NOTEQUAL ISEQUAL + left GREATEREQUAL GREATERTHAN LESSTHAN LESSEQUAL + left AND + left OR +preclow rule program: statements { @@ -283,7 +295,7 @@ resourcename: quotedtext | variable | array -assignment: VARIABLE EQUALS rvalue { +assignment: VARIABLE EQUALS expression { if val[0] =~ /::/ raise Puppet::ParseError, "Cannot assign to variables in other namespaces" end @@ -292,7 +304,7 @@ assignment: VARIABLE EQUALS rvalue { result = ast AST::VarDef, :name => variable, :value => val[2] } -append: VARIABLE APPENDS rvalue { +append: VARIABLE APPENDS expression { variable = ast AST::Name, :value => val[0] result = ast AST::VarDef, :name => variable, :value => val[2], :append => true } @@ -395,7 +407,7 @@ resourceref: NAME LBRACK rvalue RBRACK { result = ast AST::ResourceReference, :type => val[0], :title => val[2] } -ifstatement: IF iftest LBRACE statements RBRACE else { +ifstatement: IF expression LBRACE statements RBRACE else { args = { :test => val[1], :statements => val[3] @@ -413,9 +425,70 @@ else: # nothing result = ast AST::Else, :statements => val[2] } -# Currently we only support a single value, but eventually one assumes -# we'll support operators and such. -iftest: rvalue +# Unlike yacc/bison, it seems racc +# gives tons of shift/reduce warnings +# with the following syntax: +# +# expression: ... +# | expression arithop expressio { ... } +# +# arithop: PLUS | MINUS | DIVIDE | TIMES ... +# +# So I had to develop the expression by adding one rule +# per operator :-( + +expression: rvalue + | expression PLUS expression { + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression MINUS expression { + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression DIV expression { + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression TIMES expression { + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression LSHIFT expression { + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression RSHIFT expression { + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | MINUS expression =UMINUS { + result = ast AST::Minus, :value => val[1] +} + | expression NOTEQUAL expression { + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression ISEQUAL expression { + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression GREATERTHAN expression { + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression GREATEREQUAL expression { + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression LESSTHAN expression { + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression LESSEQUAL expression { + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | NOT expression { + result = ast AST::Not, :value => val[1] +} + | expression AND expression { + result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | expression OR expression { + result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2] +} + | LPAREN expression RPAREN { + result = val[1] +} casestatement: CASE rvalue LBRACE caseopts RBRACE { options = val[3] diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb index 71210d919..5dd036e52 100644 --- a/lib/puppet/parser/lexer.rb +++ b/lib/puppet/parser/lexer.rb @@ -126,12 +126,22 @@ class Puppet::Parser::Lexer '\\' => :BACKSLASH, '=>' => :FARROW, '+>' => :PARROW, + '+' => :PLUS, + '-' => :MINUS, + '/' => :DIV, + '*' => :TIMES, + '<<' => :LSHIFT, + '>>' => :RSHIFT, %r{([a-z][-\w]*::)+[a-z][-\w]*} => :CLASSNAME, %r{((::){0,1}[A-Z][-\w]*)+} => :CLASSREF ) TOKENS.add_tokens "Whatever" => :DQTEXT, "Nomatter" => :SQTEXT, "alsonomatter" => :BOOLEAN + TOKENS.add_token :NUMBER, %r{\b(?:0[xX][0-9A-Fa-f]+|0?\d+(?:\.\d+)?(?:[eE]-?\d+)?)\b} do |lexer, value| + [TOKENS[:NAME], value] + end + TOKENS.add_token :NAME, %r{[a-z0-9][-\w]*} do |lexer, value| string_token = self # we're looking for keywords here @@ -145,10 +155,6 @@ class Puppet::Parser::Lexer [string_token, value] end - TOKENS.add_token :NUMBER, %r{[0-9]+} do |lexer, value| - [TOKENS[:NAME], value] - end - TOKENS.add_token :COMMENT, %r{#.*}, :skip => true TOKENS.add_token :RETURN, "\n", :skip => true, :incr_line => true, :skip_text => true diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb index 69225cc2b..b8aa4b5ed 100644 --- a/lib/puppet/parser/parser.rb +++ b/lib/puppet/parser/parser.rb @@ -29,7 +29,7 @@ module Puppet class Parser < Racc::Parser -module_eval <<'..end grammar.ra modeval..id7dbe8301d1', 'grammar.ra', 644 +module_eval <<'..end grammar.ra modeval..id272fb19b12', 'grammar.ra', 717 # It got too annoying having code in a file that needs to be compiled. require 'puppet/parser/parser_support' @@ -41,524 +41,687 @@ require 'puppet/parser/parser_support' # $Id$ -..end grammar.ra modeval..id7dbe8301d1 +..end grammar.ra modeval..id272fb19b12 ##### racc 1.4.5 generates ### racc_reduce_table = [ 0, 0, :racc_error, - 1, 53, :_reduce_1, - 1, 53, :_reduce_none, - 1, 54, :_reduce_none, - 2, 54, :_reduce_4, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 1, 56, :_reduce_none, - 4, 64, :_reduce_18, - 3, 64, :_reduce_19, - 2, 64, :_reduce_20, - 1, 70, :_reduce_none, - 1, 70, :_reduce_none, - 1, 71, :_reduce_none, - 3, 71, :_reduce_24, - 1, 73, :_reduce_none, - 1, 73, :_reduce_none, - 1, 73, :_reduce_none, - 1, 73, :_reduce_none, - 1, 73, :_reduce_none, - 1, 73, :_reduce_none, - 1, 73, :_reduce_none, - 1, 73, :_reduce_32, - 1, 72, :_reduce_none, - 3, 72, :_reduce_34, - 5, 57, :_reduce_35, - 5, 57, :_reduce_36, - 5, 57, :_reduce_37, - 5, 68, :_reduce_38, - 2, 58, :_reduce_39, - 1, 89, :_reduce_40, - 2, 89, :_reduce_41, - 2, 59, :_reduce_42, - 3, 90, :_reduce_43, - 3, 90, :_reduce_44, - 1, 91, :_reduce_none, - 1, 91, :_reduce_none, - 3, 91, :_reduce_47, - 1, 92, :_reduce_none, - 3, 92, :_reduce_49, - 1, 93, :_reduce_none, - 1, 93, :_reduce_none, - 3, 94, :_reduce_52, - 3, 94, :_reduce_53, - 1, 95, :_reduce_none, - 1, 95, :_reduce_none, - 4, 97, :_reduce_56, - 1, 83, :_reduce_none, - 3, 83, :_reduce_58, - 0, 84, :_reduce_none, - 1, 84, :_reduce_none, - 1, 99, :_reduce_61, - 1, 74, :_reduce_62, - 1, 76, :_reduce_63, - 1, 98, :_reduce_none, - 1, 98, :_reduce_none, + 1, 60, :_reduce_1, + 1, 60, :_reduce_none, + 1, 61, :_reduce_none, + 2, 61, :_reduce_4, + 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, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 1, 63, :_reduce_none, + 4, 71, :_reduce_18, + 3, 71, :_reduce_19, + 2, 71, :_reduce_20, + 1, 77, :_reduce_none, + 1, 77, :_reduce_none, + 1, 78, :_reduce_none, + 3, 78, :_reduce_24, + 1, 80, :_reduce_none, + 1, 80, :_reduce_none, + 1, 80, :_reduce_none, + 1, 80, :_reduce_none, + 1, 80, :_reduce_none, + 1, 80, :_reduce_none, + 1, 80, :_reduce_none, + 1, 80, :_reduce_32, + 1, 79, :_reduce_none, + 3, 79, :_reduce_34, + 5, 64, :_reduce_35, + 5, 64, :_reduce_36, + 5, 64, :_reduce_37, + 5, 75, :_reduce_38, + 2, 65, :_reduce_39, + 1, 96, :_reduce_40, + 2, 96, :_reduce_41, + 2, 66, :_reduce_42, + 3, 97, :_reduce_43, + 3, 97, :_reduce_44, 1, 98, :_reduce_none, 1, 98, :_reduce_none, - 1, 98, :_reduce_none, - 1, 98, :_reduce_none, - 3, 60, :_reduce_70, - 3, 69, :_reduce_71, - 0, 85, :_reduce_72, - 1, 85, :_reduce_73, - 3, 85, :_reduce_74, - 3, 102, :_reduce_75, - 3, 103, :_reduce_76, - 1, 104, :_reduce_none, - 1, 104, :_reduce_none, - 0, 88, :_reduce_79, - 1, 88, :_reduce_80, - 3, 88, :_reduce_81, + 3, 98, :_reduce_47, + 1, 99, :_reduce_none, + 3, 99, :_reduce_49, + 1, 100, :_reduce_none, + 1, 100, :_reduce_none, + 3, 101, :_reduce_52, + 3, 101, :_reduce_53, + 1, 102, :_reduce_none, + 1, 102, :_reduce_none, + 4, 104, :_reduce_56, + 1, 90, :_reduce_none, + 3, 90, :_reduce_58, + 0, 91, :_reduce_none, + 1, 91, :_reduce_none, + 1, 106, :_reduce_61, + 1, 81, :_reduce_62, + 1, 83, :_reduce_63, 1, 105, :_reduce_none, - 3, 105, :_reduce_83, - 1, 96, :_reduce_none, - 1, 96, :_reduce_none, - 1, 96, :_reduce_none, - 1, 96, :_reduce_none, - 1, 96, :_reduce_none, - 1, 96, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 1, 101, :_reduce_none, - 4, 78, :_reduce_100, - 3, 78, :_reduce_101, - 1, 80, :_reduce_102, - 1, 80, :_reduce_103, - 1, 77, :_reduce_104, - 4, 81, :_reduce_105, - 4, 81, :_reduce_106, - 6, 62, :_reduce_107, - 0, 108, :_reduce_none, - 4, 108, :_reduce_109, - 1, 107, :_reduce_none, - 5, 61, :_reduce_111, - 1, 109, :_reduce_none, - 2, 109, :_reduce_113, - 5, 110, :_reduce_114, - 4, 110, :_reduce_115, - 1, 111, :_reduce_none, - 3, 111, :_reduce_117, - 3, 79, :_reduce_118, - 1, 113, :_reduce_none, - 4, 113, :_reduce_120, - 1, 115, :_reduce_none, - 3, 115, :_reduce_122, - 3, 114, :_reduce_123, - 1, 112, :_reduce_none, - 1, 112, :_reduce_none, - 1, 112, :_reduce_none, - 1, 112, :_reduce_none, - 1, 112, :_reduce_none, + 1, 105, :_reduce_none, + 1, 105, :_reduce_none, + 1, 105, :_reduce_none, + 1, 105, :_reduce_none, + 1, 105, :_reduce_none, + 3, 67, :_reduce_70, + 3, 76, :_reduce_71, + 0, 92, :_reduce_72, + 1, 92, :_reduce_73, + 3, 92, :_reduce_74, + 3, 109, :_reduce_75, + 3, 111, :_reduce_76, 1, 112, :_reduce_none, 1, 112, :_reduce_none, - 1, 112, :_reduce_131, - 1, 116, :_reduce_132, - 3, 116, :_reduce_133, - 2, 63, :_reduce_134, - 6, 65, :_reduce_135, - 5, 65, :_reduce_136, - 6, 66, :_reduce_137, - 5, 66, :_reduce_138, - 6, 67, :_reduce_139, - 5, 67, :_reduce_140, - 1, 87, :_reduce_none, - 1, 82, :_reduce_none, - 1, 82, :_reduce_none, - 1, 119, :_reduce_none, - 3, 119, :_reduce_145, - 1, 121, :_reduce_none, - 1, 121, :_reduce_none, - 1, 121, :_reduce_none, - 1, 121, :_reduce_none, - 0, 55, :_reduce_150, - 0, 122, :_reduce_151, - 1, 117, :_reduce_none, - 3, 117, :_reduce_153, - 3, 117, :_reduce_154, - 1, 123, :_reduce_none, - 3, 123, :_reduce_156, - 3, 124, :_reduce_157, - 1, 124, :_reduce_158, - 3, 124, :_reduce_159, - 1, 124, :_reduce_160, - 1, 120, :_reduce_none, - 2, 120, :_reduce_162, + 0, 95, :_reduce_79, + 1, 95, :_reduce_80, + 3, 95, :_reduce_81, + 1, 113, :_reduce_none, + 3, 113, :_reduce_83, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 103, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 1, 110, :_reduce_none, + 4, 85, :_reduce_100, + 3, 85, :_reduce_101, + 1, 87, :_reduce_102, + 1, 87, :_reduce_103, + 1, 84, :_reduce_104, + 4, 88, :_reduce_105, + 4, 88, :_reduce_106, + 6, 69, :_reduce_107, + 0, 115, :_reduce_none, + 4, 115, :_reduce_109, + 1, 108, :_reduce_none, + 3, 108, :_reduce_111, + 3, 108, :_reduce_112, + 3, 108, :_reduce_113, + 3, 108, :_reduce_114, + 3, 108, :_reduce_115, + 3, 108, :_reduce_116, + 2, 108, :_reduce_117, + 3, 108, :_reduce_118, + 3, 108, :_reduce_119, + 3, 108, :_reduce_120, + 3, 108, :_reduce_121, + 3, 108, :_reduce_122, + 3, 108, :_reduce_123, + 2, 108, :_reduce_124, + 3, 108, :_reduce_125, + 3, 108, :_reduce_126, + 3, 108, :_reduce_127, + 5, 68, :_reduce_128, + 1, 116, :_reduce_none, + 2, 116, :_reduce_130, + 5, 117, :_reduce_131, + 4, 117, :_reduce_132, 1, 118, :_reduce_none, - 2, 118, :_reduce_164, - 1, 125, :_reduce_none, + 3, 118, :_reduce_134, + 3, 86, :_reduce_135, + 1, 120, :_reduce_none, + 4, 120, :_reduce_137, + 1, 122, :_reduce_none, + 3, 122, :_reduce_139, + 3, 121, :_reduce_140, + 1, 119, :_reduce_none, + 1, 119, :_reduce_none, + 1, 119, :_reduce_none, + 1, 119, :_reduce_none, + 1, 119, :_reduce_none, + 1, 119, :_reduce_none, + 1, 119, :_reduce_none, + 1, 119, :_reduce_148, + 1, 123, :_reduce_149, + 3, 123, :_reduce_150, + 2, 70, :_reduce_151, + 6, 72, :_reduce_152, + 5, 72, :_reduce_153, + 6, 73, :_reduce_154, + 5, 73, :_reduce_155, + 6, 74, :_reduce_156, + 5, 74, :_reduce_157, + 1, 94, :_reduce_none, + 1, 89, :_reduce_none, + 1, 89, :_reduce_none, + 1, 126, :_reduce_none, + 3, 126, :_reduce_162, + 1, 128, :_reduce_none, + 1, 128, :_reduce_none, + 1, 128, :_reduce_none, + 1, 128, :_reduce_none, + 0, 62, :_reduce_167, + 0, 129, :_reduce_168, + 1, 124, :_reduce_none, + 3, 124, :_reduce_170, + 3, 124, :_reduce_171, + 1, 130, :_reduce_none, + 3, 130, :_reduce_173, + 3, 131, :_reduce_174, + 1, 131, :_reduce_175, + 3, 131, :_reduce_176, + 1, 131, :_reduce_177, + 1, 127, :_reduce_none, + 2, 127, :_reduce_179, 1, 125, :_reduce_none, - 1, 75, :_reduce_167, - 3, 100, :_reduce_168, - 2, 100, :_reduce_169, - 1, 106, :_reduce_none, - 1, 106, :_reduce_none, - 0, 86, :_reduce_none, - 1, 86, :_reduce_173 ] + 2, 125, :_reduce_181, + 1, 132, :_reduce_none, + 1, 132, :_reduce_none, + 1, 82, :_reduce_184, + 3, 107, :_reduce_185, + 2, 107, :_reduce_186, + 1, 114, :_reduce_none, + 1, 114, :_reduce_none, + 0, 93, :_reduce_none, + 1, 93, :_reduce_190 ] -racc_reduce_n = 174 +racc_reduce_n = 191 -racc_shift_n = 279 +racc_shift_n = 314 racc_action_table = [ - 77, 57, 60, 246, 167, 105, 77, 57, 60, 101, - 199, 235, -124, 167, 241, 203, 77, 57, 60, 234, - 54, 92, 77, 57, 60, 94, 131, 240, 208, 209, - 104, 47, 77, 57, 60, 59, 63, 47, 95, 68, - 131, 59, 63, 137, 55, 68, 166, 47, 65, 211, - 55, 59, 178, 47, 65, 68, -125, 59, 63, 173, - 116, 68, 96, 47, 65, -126, 55, 59, 119, -128, - 65, 68, 77, 57, 60, 147, 116, 208, 209, 147, - 65, 213, 77, 57, 60, 147, 47, 40, 41, 212, - 47, 151, 54, 57, 60, 151, 47, 35, 77, 57, - 60, 151, 188, 47, 4, 9, 172, 59, 63, 199, - 9, 68, 50, 47, 203, -125, 55, 59, 63, 204, - 65, 68, 42, 47, 205, 43, 55, 59, 63, 47, - 65, 68, 35, 59, 63, 51, 55, 68, 167, 4, - 65, 147, 55, 77, 57, 60, 65, 33, 34, 77, - 57, 60, 47, 171, 40, 41, 35, 151, -127, 77, - 57, 60, -129, 4, 214, 77, 57, 60, 208, 209, - 40, 41, 57, 60, 47, 77, 57, 60, 59, 63, - 47, 171, 68, -124, 59, 63, -130, 55, 68, 42, - 47, 65, 43, 55, 59, 63, 47, 65, 68, -125, - 59, 63, 219, 55, 68, 42, 47, 65, 43, 55, - 59, 63, 111, 65, 68, 77, 57, 60, 92, 55, - 191, 262, -127, 65, -124, 77, 57, 60, 135, 57, - 60, 35, 57, 60, 159, 189, 224, 225, 4, 191, - 192, 145, 57, 60, 145, 228, 47, 131, 57, 60, - 59, 63, 127, 133, 68, 231, 47, 54, 132, 55, - 59, 63, 47, 65, 68, -126, 59, 63, 168, 55, - 68, -141, 47, 65, 51, 55, 59, 178, 47, 65, - 68, 238, 59, 178, 239, 116, 68, 57, 60, 65, - -126, 116, 242, 57, 60, 65, 129, 245, -128, 138, - -129, 111, 94, 57, 60, -127, 171, 91, 165, 263, - 265, 90, 163, 57, 60, 139, 140, 47, 46, 57, - 60, 59, 178, 47, -129, 68, -126, 59, 178, 51, - 116, 68, -124, 47, 65, -127, 116, 59, 178, 184, - 65, 68, -125, 47, 57, 60, 116, 59, 178, 47, - 65, 68, 45, 59, 63, 272, 116, 68, -173, 273, - 65, 51, 55, 160, 57, 60, 65, 179, 143, 145, - 183, 57, 60, nil, 47, 237, nil, nil, 59, 178, - nil, nil, 68, nil, nil, nil, nil, 116, nil, nil, - nil, 65, nil, nil, 47, nil, 278, nil, 59, 178, - nil, 47, 68, nil, nil, 59, 178, 116, nil, 68, - nil, 65, nil, nil, 116, 257, nil, 20, 65, 24, - 26, nil, 1, 5, nil, 12, nil, 18, nil, 22, - nil, 27, nil, nil, 4, 9, 20, 243, 24, 26, - nil, 1, 5, nil, 12, nil, 18, nil, 22, nil, - 27, nil, nil, 4, 9, nil, 270, nil, 20, nil, - 24, 26, nil, 1, 5, nil, 12, nil, 18, nil, - 22, nil, 27, nil, nil, 4, 9, 20, 233, 24, - 26, nil, 1, 5, nil, 12, nil, 18, nil, 22, - nil, 27, nil, nil, 4, 9, nil, 277, nil, 20, - nil, 24, 26, nil, 1, 5, nil, 12, nil, 18, - nil, 22, nil, 27, nil, nil, 4, 9, 20, 274, - 24, 26, nil, 1, 5, nil, 12, nil, 18, nil, - 22, nil, 27, nil, nil, 4, 9, nil, 217, nil, - 20, nil, 24, 26, nil, 1, 5, nil, 12, nil, - 18, nil, 22, nil, 27, nil, nil, 4, 9, 20, - 215, 24, 26, nil, 1, 5, nil, 12, nil, 18, - nil, 22, nil, 27, nil, nil, 4, 9, nil, 256, - nil, 20, nil, 24, 26, nil, 1, 5, nil, 12, - nil, 18, nil, 22, nil, 27, nil, nil, 4, 9, - 20, nil, 24, 26, nil, 1, 5, nil, 12, nil, - 18, nil, 22, nil, 27, nil, nil, 4, 9, 20, - nil, 24, 26, nil, 1, 5, nil, 12, nil, 18, - nil, 22, nil, 27, nil, nil, 4, 9, 20, nil, - 24, 26, nil, 1, 5, nil, 12, nil, 18, nil, - 22, nil, 27, nil, nil, 4, 9, 20, nil, 24, - 26, nil, 1, 5, nil, 12, nil, 18, nil, 22, - nil, 27, nil, nil, 4, 9, 20, nil, 24, 26, - nil, 1, 5, nil, 12, nil, 18, nil, 22, nil, - 27, nil, nil, 4, 9 ] + 75, 54, 57, 270, 178, 39, 40, 283, 88, 237, + 51, 178, 89, 238, 244, 282, 286, 235, 236, 245, + 72, 75, 54, 57, 135, 90, 39, 40, 235, 236, + 135, 45, 39, 40, 129, 56, 59, 235, 236, 66, + 41, 72, 154, 44, 52, 76, 177, 162, 62, 92, + 146, 84, 45, 75, 54, 57, 56, 59, 45, 126, + 66, 41, 178, 167, 44, 52, 76, 41, 188, 62, + 44, 249, 84, 72, 75, 54, 57, 288, 156, 157, + 158, 144, 145, 147, 45, 198, 54, 57, 56, 59, + 287, 233, 66, 8, 72, 154, -141, 52, 76, 232, + 162, 62, 137, 146, 84, 45, 75, 54, 57, 56, + 59, 45, 252, 66, 37, 105, 167, 37, 52, 76, + 183, 4, 62, 37, 4, 84, 72, 75, 54, 57, + 4, 156, 157, 158, 144, 145, 147, 45, -143, 211, + 256, 56, 59, 212, 213, 66, 136, 72, 154, 258, + 52, 76, 161, 162, 62, 161, 146, 84, 45, 75, + 54, 57, 56, 59, 45, 244, 66, 54, 57, 167, + 245, 52, 76, 33, 34, 62, 212, 296, 84, 72, + 75, 54, 57, -145, 156, 157, 158, 144, 145, 147, + 45, 158, 144, 135, 56, 59, 158, 144, 66, 51, + 72, 154, 263, 52, 76, -146, 162, 62, 266, 146, + 84, 45, 75, 54, 57, 56, 59, 45, -142, 66, + 229, -142, 167, -147, 52, 76, 88, -144, 62, -146, + -141, 84, 72, 75, 54, 57, 134, 156, 157, 158, + 144, 145, 147, 45, -158, -145, 132, 56, 59, -143, + 161, 66, 269, 72, 37, 172, 52, 76, 173, 108, + 62, 4, 8, 84, 45, 89, 105, 174, 56, 59, + 155, 284, 66, 156, 157, 158, 144, 52, 76, 150, + 154, 62, 285, -144, 84, 180, 100, 184, 146, 148, + 151, 153, 188, 186, 75, 54, 57, 156, 157, 158, + 144, 145, 147, 156, 157, 158, 144, 145, 147, -141, + 196, 299, 149, 152, 72, -141, 156, 157, 158, 144, + 145, 147, -144, -142, -146, 45, 75, 54, 57, 56, + 59, -143, 300, 66, 156, 157, 158, 144, 52, 76, + 188, 71, 62, 193, 191, 84, 72, 75, 54, 57, + 38, -143, 307, -190, 308, 35, 189, 45, -142, -144, + nil, 56, 59, nil, nil, 66, nil, 72, nil, nil, + 52, 76, nil, nil, 62, nil, nil, 84, 45, 75, + 54, 57, 56, 59, nil, nil, 66, nil, nil, nil, + nil, 52, 76, nil, nil, 62, nil, nil, 84, 72, + 75, 54, 57, nil, nil, nil, nil, nil, nil, nil, + 45, nil, nil, nil, 56, 59, nil, nil, 66, nil, + 72, nil, nil, 52, 76, nil, nil, 62, nil, nil, + 84, 45, 75, 54, 57, 56, 59, nil, nil, 66, + nil, nil, nil, nil, 52, 76, nil, nil, 62, nil, + nil, 84, 72, 75, 54, 57, nil, nil, nil, nil, + nil, nil, nil, 45, nil, nil, nil, 56, 59, nil, + nil, 66, nil, 72, nil, nil, 52, 76, nil, nil, + 62, nil, nil, 84, 45, 75, 54, 57, 56, 59, + nil, nil, 66, nil, nil, nil, nil, 52, 76, nil, + nil, 62, nil, nil, 84, 72, 75, 54, 57, nil, + nil, nil, nil, nil, nil, nil, 45, 75, 54, 57, + 56, 59, nil, nil, 66, nil, 72, nil, nil, 52, + 76, nil, nil, 62, nil, nil, 84, 45, 75, 54, + 57, 56, 59, nil, nil, 66, nil, nil, 45, nil, + 52, 76, 56, 116, 62, nil, 66, 84, 72, nil, + nil, 111, 75, 54, 57, 62, nil, nil, nil, 45, + nil, nil, nil, 56, 59, nil, nil, 66, 75, 54, + 57, 141, 52, 76, nil, nil, 62, nil, nil, 84, + nil, nil, nil, 45, 75, 54, 57, 56, 59, nil, + nil, 66, nil, nil, nil, nil, 52, nil, nil, 45, + 62, nil, nil, 56, 59, nil, nil, 66, 75, 54, + 57, nil, 52, nil, nil, 45, 62, nil, nil, 56, + 59, nil, nil, 66, 75, 54, 57, nil, 52, nil, + nil, nil, 62, nil, 75, 54, 57, nil, nil, 45, + 75, 54, 57, 56, 59, nil, nil, 66, nil, nil, + nil, nil, 52, nil, nil, 45, 62, nil, nil, 56, + 59, nil, nil, 66, nil, 45, nil, nil, 52, 56, + 59, 45, 62, 66, nil, 56, 59, nil, 52, 66, + nil, nil, 62, nil, 52, 75, 54, 57, 62, nil, + nil, 51, 54, 57, nil, nil, nil, nil, nil, nil, + nil, 75, 54, 57, nil, nil, nil, 75, 54, 57, + nil, 48, nil, nil, nil, nil, 45, 75, 54, 57, + 56, 59, 45, nil, 66, nil, 56, 59, nil, 52, + 66, nil, 45, 62, 49, 52, 56, 59, 45, 62, + 66, nil, 56, 195, nil, 52, 66, nil, 45, 62, + nil, 111, 56, 59, nil, 62, 66, 54, 57, 54, + 57, 52, nil, nil, nil, 62, nil, nil, nil, nil, + nil, nil, nil, 54, 57, 54, 57, nil, nil, 281, + nil, nil, nil, nil, nil, nil, nil, 45, nil, 45, + nil, 56, 195, 56, 195, 66, nil, 66, 54, 57, + 111, nil, 111, 45, 62, 45, 62, 56, 195, 56, + 195, 66, nil, 66, nil, 49, 111, nil, 111, nil, + 62, nil, 62, 54, 57, 54, 57, nil, 45, nil, + nil, nil, 56, 195, nil, nil, 66, nil, nil, 54, + 57, 111, nil, nil, nil, 62, 54, 57, nil, 205, + nil, nil, nil, 45, nil, 45, nil, 56, 195, 56, + 195, 66, nil, 66, nil, nil, 111, nil, 111, 45, + 62, nil, 62, 56, 195, nil, 45, 66, 54, 57, + 56, 195, 111, nil, 66, nil, 62, nil, nil, 111, + nil, nil, nil, 62, 54, 57, nil, nil, 131, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 45, nil, + nil, nil, 56, 59, 200, nil, 66, nil, nil, nil, + 49, 52, nil, nil, 45, 62, nil, nil, 56, 59, + nil, nil, 66, 150, 154, nil, 49, 52, nil, nil, + nil, 62, 146, 148, 151, 153, 150, 154, nil, nil, + nil, nil, nil, nil, 209, 146, 148, 151, 153, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 156, 157, 158, 144, 145, 147, nil, nil, nil, 149, + 152, 150, 154, 156, 157, 158, 144, 145, 147, nil, + 146, 148, 151, 153, 150, 154, nil, nil, nil, nil, + nil, nil, nil, 146, 148, 151, 153, nil, nil, nil, + nil, nil, nil, nil, 149, 152, nil, nil, 156, 157, + 158, 144, 145, 147, nil, nil, 293, nil, 152, 150, + 154, 156, 157, 158, 144, 145, 147, nil, 146, 148, + 151, 153, nil, nil, nil, nil, nil, 16, nil, 23, + 27, 291, 1, 5, nil, 10, nil, 13, nil, 20, + nil, 28, 149, 152, 4, 8, 156, 157, 158, 144, + 145, 147, 16, 290, 23, 27, nil, 1, 5, nil, + 10, nil, 13, nil, 20, nil, 28, nil, nil, 4, + 8, nil, 268, nil, 16, nil, 23, 27, nil, 1, + 5, nil, 10, nil, 13, nil, 20, nil, 28, nil, + nil, 4, 8, 16, 305, 23, 27, nil, 1, 5, + nil, 10, nil, 13, nil, 20, nil, 28, nil, nil, + 4, 8, nil, 310, nil, 16, nil, 23, 27, nil, + 1, 5, nil, 10, nil, 13, nil, 20, nil, 28, + nil, nil, 4, 8, 16, 262, 23, 27, nil, 1, + 5, nil, 10, nil, 13, nil, 20, nil, 28, nil, + nil, 4, 8, nil, 312, nil, 16, nil, 23, 27, + nil, 1, 5, nil, 10, nil, 13, nil, 20, nil, + 28, nil, nil, 4, 8, 16, 255, 23, 27, nil, + 1, 5, nil, 10, nil, 13, nil, 20, nil, 28, + nil, nil, 4, 8, nil, 313, nil, 16, nil, 23, + 27, nil, 1, 5, nil, 10, nil, 13, nil, 20, + nil, 28, nil, nil, 4, 8, 16, nil, 23, 27, + nil, 1, 5, nil, 10, nil, 13, nil, 20, nil, + 28, nil, nil, 4, 8, 16, nil, 23, 27, nil, + 1, 5, nil, 10, nil, 13, nil, 20, nil, 28, + nil, nil, 4, 8, 16, nil, 23, 27, nil, 1, + 5, nil, 10, nil, 13, nil, 20, nil, 28, nil, + nil, 4, 8, 16, nil, 23, 27, nil, 1, 5, + nil, 10, nil, 13, nil, 20, nil, 28, nil, nil, + 4, 8, 16, nil, 23, 27, nil, 1, 5, nil, + 10, nil, 13, nil, 20, nil, 28, nil, nil, 4, + 8 ] racc_action_check = [ - 228, 228, 228, 207, 111, 44, 54, 54, 54, 36, - 241, 195, 83, 119, 201, 241, 168, 168, 168, 195, - 63, 30, 92, 92, 92, 30, 119, 201, 207, 207, - 44, 228, 46, 46, 46, 228, 228, 54, 30, 228, - 63, 54, 54, 82, 228, 54, 111, 168, 228, 149, - 54, 168, 168, 92, 54, 168, 85, 92, 92, 128, - 168, 92, 30, 46, 168, 80, 92, 46, 46, 75, - 92, 46, 167, 167, 167, 95, 46, 149, 149, 147, - 46, 153, 166, 166, 166, 96, 95, 105, 105, 153, - 147, 95, 18, 18, 18, 147, 96, 6, 20, 20, - 20, 96, 133, 167, 6, 6, 126, 167, 167, 140, - 133, 167, 18, 166, 140, 125, 167, 166, 166, 142, - 167, 166, 105, 18, 144, 105, 166, 18, 18, 20, - 166, 18, 5, 20, 20, 18, 18, 20, 145, 5, - 18, 210, 20, 22, 22, 22, 20, 1, 1, 242, - 242, 242, 210, 146, 12, 12, 26, 210, 123, 238, - 238, 238, 74, 26, 156, 34, 34, 34, 156, 156, - 104, 104, 139, 139, 22, 33, 33, 33, 22, 22, - 242, 122, 22, 121, 242, 242, 73, 22, 242, 12, - 238, 22, 12, 242, 238, 238, 34, 242, 238, 72, - 34, 34, 164, 238, 34, 104, 33, 238, 104, 34, - 33, 33, 165, 34, 33, 190, 190, 190, 71, 33, - 230, 230, 70, 33, 69, 77, 77, 77, 77, 24, - 24, 101, 50, 50, 101, 136, 169, 170, 101, 136, - 136, 171, 235, 235, 172, 174, 190, 178, 138, 138, - 190, 190, 50, 66, 190, 185, 77, 188, 64, 190, - 77, 77, 50, 190, 77, 58, 50, 50, 120, 77, - 50, 55, 235, 77, 50, 50, 235, 235, 138, 50, - 235, 199, 138, 138, 200, 235, 138, 132, 132, 235, - 118, 138, 203, 260, 260, 138, 53, 206, 52, 86, - 49, 45, 38, 213, 213, 84, 227, 29, 107, 233, - 234, 27, 106, 212, 212, 88, 89, 132, 17, 131, - 131, 132, 132, 260, 248, 132, 250, 260, 260, 132, - 132, 260, 251, 213, 132, 253, 260, 213, 213, 131, - 260, 213, 254, 212, 179, 179, 213, 212, 212, 131, - 213, 212, 15, 131, 131, 261, 212, 131, 262, 263, - 212, 131, 131, 102, 129, 129, 131, 129, 91, 94, - 130, 197, 197, nil, 179, 197, nil, nil, 179, 179, - nil, nil, 179, nil, nil, nil, nil, 179, nil, nil, - nil, 179, nil, nil, 129, nil, 276, nil, 129, 129, - nil, 197, 129, nil, nil, 197, 197, 129, nil, 197, - nil, 129, nil, nil, 197, 218, nil, 276, 197, 276, - 276, nil, 276, 276, nil, 276, nil, 276, nil, 276, - nil, 276, nil, nil, 276, 276, 218, 204, 218, 218, - nil, 218, 218, nil, 218, nil, 218, nil, 218, nil, - 218, nil, nil, 218, 218, nil, 244, nil, 204, nil, - 204, 204, nil, 204, 204, nil, 204, nil, 204, nil, - 204, nil, 204, nil, nil, 204, 204, 244, 193, 244, - 244, nil, 244, 244, nil, 244, nil, 244, nil, 244, - nil, 244, nil, nil, 244, 244, nil, 275, nil, 193, - nil, 193, 193, nil, 193, 193, nil, 193, nil, 193, - nil, 193, nil, 193, nil, nil, 193, 193, 275, 265, - 275, 275, nil, 275, 275, nil, 275, nil, 275, nil, - 275, nil, 275, nil, nil, 275, 275, nil, 163, nil, - 265, nil, 265, 265, nil, 265, 265, nil, 265, nil, - 265, nil, 265, nil, 265, nil, nil, 265, 265, 163, - 160, 163, 163, nil, 163, 163, nil, 163, nil, 163, - nil, 163, nil, 163, nil, nil, 163, 163, nil, 216, - nil, 160, nil, 160, 160, nil, 160, 160, nil, 160, - nil, 160, nil, 160, nil, 160, nil, nil, 160, 160, - 216, nil, 216, 216, nil, 216, 216, nil, 216, nil, - 216, nil, 216, nil, 216, nil, nil, 216, 216, 273, - nil, 273, 273, nil, 273, 273, nil, 273, nil, 273, - nil, 273, nil, 273, nil, nil, 273, 273, 32, nil, - 32, 32, nil, 32, 32, nil, 32, nil, 32, nil, - 32, nil, 32, nil, nil, 32, 32, 137, nil, 137, - 137, nil, 137, 137, nil, 137, nil, 137, nil, 137, - nil, 137, nil, nil, 137, 137, 0, nil, 0, 0, - nil, 0, 0, nil, 0, nil, 0, nil, 0, nil, - 0, nil, nil, 0, 0 ] + 33, 33, 33, 231, 105, 129, 129, 241, 17, 170, + 59, 116, 17, 171, 288, 241, 246, 171, 171, 288, + 33, 158, 158, 158, 116, 17, 10, 10, 231, 231, + 59, 33, 126, 126, 42, 33, 33, 170, 170, 33, + 129, 158, 220, 129, 33, 33, 105, 92, 33, 17, + 220, 33, 158, 144, 144, 144, 158, 158, 92, 42, + 158, 10, 161, 92, 10, 158, 158, 126, 160, 158, + 126, 175, 158, 144, 76, 76, 76, 247, 220, 220, + 220, 220, 220, 220, 144, 134, 23, 23, 144, 144, + 247, 165, 144, 134, 76, 223, 77, 144, 144, 165, + 162, 144, 71, 223, 144, 76, 145, 145, 145, 76, + 76, 162, 179, 76, 27, 180, 162, 108, 76, 76, + 108, 27, 76, 5, 108, 76, 145, 72, 72, 72, + 5, 223, 223, 223, 223, 223, 223, 145, 70, 140, + 185, 145, 145, 140, 140, 145, 68, 72, 221, 187, + 145, 145, 188, 90, 145, 189, 221, 145, 72, 154, + 154, 154, 72, 72, 90, 174, 72, 173, 173, 90, + 174, 72, 72, 1, 1, 72, 265, 265, 72, 154, + 84, 84, 84, 67, 221, 221, 221, 221, 221, 221, + 154, 227, 227, 195, 154, 154, 226, 226, 154, 198, + 84, 218, 199, 154, 154, 65, 234, 154, 206, 218, + 154, 84, 16, 16, 16, 84, 84, 234, 63, 84, + 159, 79, 234, 80, 84, 84, 61, 60, 84, 81, + 58, 84, 16, 146, 146, 146, 53, 218, 218, 218, + 218, 218, 218, 16, 52, 82, 50, 16, 16, 87, + 89, 16, 230, 146, 24, 94, 16, 16, 95, 36, + 16, 24, 24, 16, 146, 97, 35, 99, 146, 146, + 85, 244, 146, 217, 217, 217, 217, 146, 146, 85, + 85, 146, 245, 78, 146, 106, 28, 109, 85, 85, + 85, 85, 260, 112, 153, 153, 153, 224, 224, 224, + 224, 224, 224, 216, 216, 216, 216, 216, 216, 113, + 133, 268, 85, 85, 153, 271, 85, 85, 85, 85, + 85, 85, 273, 274, 275, 153, 152, 152, 152, 153, + 153, 277, 282, 153, 215, 215, 215, 215, 153, 153, + 114, 15, 153, 130, 127, 153, 152, 147, 147, 147, + 6, 125, 295, 296, 299, 2, 119, 152, 118, 115, + nil, 152, 152, nil, nil, 152, nil, 147, nil, nil, + 152, 152, nil, nil, 152, nil, nil, 152, 147, 148, + 148, 148, 147, 147, nil, nil, 147, nil, nil, nil, + nil, 147, 147, nil, nil, 147, nil, nil, 147, 148, + 149, 149, 149, nil, nil, nil, nil, nil, nil, nil, + 148, nil, nil, nil, 148, 148, nil, nil, 148, nil, + 149, nil, nil, 148, 148, nil, nil, 148, nil, nil, + 148, 149, 156, 156, 156, 149, 149, nil, nil, 149, + nil, nil, nil, nil, 149, 149, nil, nil, 149, nil, + nil, 149, 156, 34, 34, 34, nil, nil, nil, nil, + nil, nil, nil, 156, nil, nil, nil, 156, 156, nil, + nil, 156, nil, 34, nil, nil, 156, 156, nil, nil, + 156, nil, nil, 156, 34, 151, 151, 151, 34, 34, + nil, nil, 34, nil, nil, nil, nil, 34, 34, nil, + nil, 34, nil, nil, 34, 151, 150, 150, 150, nil, + nil, nil, nil, nil, nil, nil, 151, 38, 38, 38, + 151, 151, nil, nil, 151, nil, 150, nil, nil, 151, + 151, nil, nil, 151, nil, nil, 151, 150, 157, 157, + 157, 150, 150, nil, nil, 150, nil, nil, 38, nil, + 150, 150, 38, 38, 150, nil, 38, 150, 157, nil, + nil, 38, 177, 177, 177, 38, nil, nil, nil, 157, + nil, nil, nil, 157, 157, nil, nil, 157, 75, 75, + 75, 75, 157, 157, nil, nil, 157, nil, nil, 157, + nil, nil, nil, 177, 51, 51, 51, 177, 177, nil, + nil, 177, nil, nil, nil, nil, 177, nil, nil, 75, + 177, nil, nil, 75, 75, nil, nil, 75, 285, 285, + 285, nil, 75, nil, nil, 51, 75, nil, nil, 51, + 51, nil, nil, 51, 266, 266, 266, nil, 51, nil, + nil, nil, 51, nil, 88, 88, 88, nil, nil, 285, + 178, 178, 178, 285, 285, nil, nil, 285, nil, nil, + nil, nil, 285, nil, nil, 266, 285, nil, nil, 266, + 266, nil, nil, 266, nil, 88, nil, nil, 266, 88, + 88, 178, 266, 88, nil, 178, 178, nil, 88, 178, + nil, nil, 88, nil, 178, 20, 20, 20, 178, nil, + nil, 13, 13, 13, nil, nil, nil, nil, nil, nil, + nil, 210, 210, 210, nil, nil, nil, 186, 186, 186, + nil, 13, nil, nil, nil, nil, 20, 284, 284, 284, + 20, 20, 13, nil, 20, nil, 13, 13, nil, 20, + 13, nil, 210, 20, 13, 13, 210, 210, 186, 13, + 210, nil, 186, 186, nil, 210, 186, nil, 284, 210, + nil, 186, 284, 284, nil, 186, 284, 205, 205, 283, + 283, 284, nil, nil, nil, 284, nil, nil, nil, nil, + nil, nil, nil, 132, 132, 239, 239, nil, nil, 239, + nil, nil, nil, nil, nil, nil, nil, 205, nil, 283, + nil, 205, 205, 283, 283, 205, nil, 283, 233, 233, + 205, nil, 283, 132, 205, 239, 283, 132, 132, 239, + 239, 132, nil, 239, nil, 132, 132, nil, 239, nil, + 132, nil, 239, 294, 294, 232, 232, nil, 233, nil, + nil, nil, 233, 233, nil, nil, 233, nil, nil, 172, + 172, 233, nil, nil, nil, 233, 136, 136, nil, 136, + nil, nil, nil, 294, nil, 232, nil, 294, 294, 232, + 232, 294, nil, 232, nil, nil, 294, nil, 232, 172, + 294, nil, 232, 172, 172, nil, 136, 172, 48, 48, + 136, 136, 172, nil, 136, nil, 172, nil, nil, 136, + nil, nil, nil, 136, 135, 135, nil, nil, 48, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 48, nil, + nil, nil, 48, 48, 135, nil, 48, nil, nil, nil, + 48, 48, nil, nil, 135, 48, nil, nil, 135, 135, + nil, nil, 135, 222, 222, nil, 135, 135, nil, nil, + nil, 135, 222, 222, 222, 222, 138, 138, nil, nil, + nil, nil, nil, nil, 138, 138, 138, 138, 138, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + 222, 222, 222, 222, 222, 222, nil, nil, nil, 138, + 138, 101, 101, 138, 138, 138, 138, 138, 138, nil, + 101, 101, 101, 101, 219, 219, nil, nil, nil, nil, + nil, nil, nil, 219, 219, 219, 219, nil, nil, nil, + nil, nil, nil, nil, 101, 101, nil, nil, 101, 101, + 101, 101, 101, 101, nil, nil, 261, nil, 219, 102, + 102, 219, 219, 219, 219, 219, 219, nil, 102, 102, + 102, 102, nil, nil, nil, nil, nil, 261, nil, 261, + 261, 254, 261, 261, nil, 261, nil, 261, nil, 261, + nil, 261, 102, 102, 261, 261, 102, 102, 102, 102, + 102, 102, 254, 249, 254, 254, nil, 254, 254, nil, + 254, nil, 254, nil, 254, nil, 254, nil, nil, 254, + 254, nil, 225, nil, 249, nil, 249, 249, nil, 249, + 249, nil, 249, nil, 249, nil, 249, nil, 249, nil, + nil, 249, 249, 225, 289, 225, 225, nil, 225, 225, + nil, 225, nil, 225, nil, 225, nil, 225, nil, nil, + 225, 225, nil, 300, nil, 289, nil, 289, 289, nil, + 289, 289, nil, 289, nil, 289, nil, 289, nil, 289, + nil, nil, 289, 289, 300, 191, 300, 300, nil, 300, + 300, nil, 300, nil, 300, nil, 300, nil, 300, nil, + nil, 300, 300, nil, 309, nil, 191, nil, 191, 191, + nil, 191, 191, nil, 191, nil, 191, nil, 191, nil, + 191, nil, nil, 191, 191, 309, 184, 309, 309, nil, + 309, 309, nil, 309, nil, 309, nil, 309, nil, 309, + nil, nil, 309, 309, nil, 311, nil, 184, nil, 184, + 184, nil, 184, 184, nil, 184, nil, 184, nil, 184, + nil, 184, nil, nil, 184, 184, 311, nil, 311, 311, + nil, 311, 311, nil, 311, nil, 311, nil, 311, nil, + 311, nil, nil, 311, 311, 308, nil, 308, 308, nil, + 308, 308, nil, 308, nil, 308, nil, 308, nil, 308, + nil, nil, 308, 308, 155, nil, 155, 155, nil, 155, + 155, nil, 155, nil, 155, nil, 155, nil, 155, nil, + nil, 155, 155, 19, nil, 19, 19, nil, 19, 19, + nil, 19, nil, 19, nil, 19, nil, 19, nil, nil, + 19, 19, 0, nil, 0, 0, nil, 0, 0, nil, + 0, nil, 0, nil, 0, nil, 0, nil, nil, 0, + 0 ] racc_action_pointer = [ - 648, 134, nil, nil, nil, 94, 59, nil, nil, nil, - nil, nil, 151, nil, nil, 346, nil, 312, 90, nil, - 96, nil, 141, nil, 226, nil, 118, 269, nil, 307, - 19, nil, 610, 173, 163, nil, -26, nil, 296, nil, - nil, nil, nil, nil, -5, 263, 30, nil, nil, 279, - 229, nil, 277, 275, 4, 269, nil, nil, 244, nil, - nil, nil, nil, 18, 248, nil, 243, nil, nil, 203, - 201, 216, 178, 165, 141, 48, nil, 223, nil, nil, - 44, nil, 37, -9, 284, 35, 293, nil, 305, 294, - nil, 368, 20, nil, 331, 53, 63, nil, nil, nil, - nil, 193, 357, nil, 167, 84, 306, 298, nil, nil, - nil, -5, nil, nil, nil, nil, nil, nil, 269, 4, - 229, 162, 171, 137, nil, 94, 88, nil, 36, 361, - 365, 316, 284, 64, nil, nil, 230, 629, 245, 169, - 76, nil, 113, nil, 119, 129, 143, 57, nil, 29, - nil, nil, nil, 65, nil, nil, 120, nil, nil, nil, - 553, nil, nil, 531, 195, 174, 80, 70, 14, 229, - 230, 203, 206, nil, 236, nil, nil, nil, 225, 341, - nil, nil, nil, nil, nil, 232, nil, nil, 255, nil, - 213, nil, nil, 471, nil, 1, nil, 368, nil, 268, - 261, 4, nil, 279, 430, nil, 290, -20, nil, nil, - 119, nil, 310, 300, nil, nil, 572, nil, 408, nil, - nil, nil, nil, nil, nil, nil, nil, 296, -2, nil, - 211, nil, nil, 280, 304, 239, nil, nil, 157, nil, - nil, -23, 147, nil, 449, nil, nil, nil, 303, nil, - 305, 311, nil, 314, 321, nil, nil, nil, nil, nil, - 290, 348, 351, 353, nil, 512, nil, nil, nil, nil, - nil, nil, nil, 591, nil, 490, 389, nil, nil ] + 1294, 160, 349, nil, nil, 85, 344, nil, nil, nil, + 23, nil, nil, 699, nil, 341, 210, 6, nil, 1275, + 693, nil, nil, 83, 216, nil, nil, 76, 244, nil, + nil, nil, nil, -2, 451, 228, 224, nil, 515, nil, + nil, nil, 24, nil, nil, nil, nil, nil, 885, nil, + 236, 592, 242, 226, nil, nil, nil, nil, 209, 8, + 206, 224, nil, 197, nil, 184, nil, 162, 125, nil, + 117, 102, 125, nil, nil, 576, 72, 75, 262, 200, + 202, 208, 224, nil, 178, 264, nil, 228, 642, 212, + 131, nil, 25, nil, 249, 248, nil, 259, nil, 245, + nil, 976, 1024, nil, nil, -5, 275, nil, 79, 281, + nil, nil, 254, 288, 330, 338, 2, nil, 337, 338, + nil, nil, nil, nil, nil, 330, 29, 338, nil, 2, + 320, nil, 780, 305, 47, 901, 853, nil, 941, nil, + 134, nil, nil, nil, 51, 104, 231, 345, 377, 398, + 504, 483, 324, 292, 157, 1256, 430, 536, 19, 215, + 58, 53, 78, nil, nil, 75, nil, nil, nil, nil, + -11, -31, 846, 164, 132, 65, nil, 560, 648, 105, + 77, nil, nil, nil, 1199, 133, 715, 142, 114, 117, + nil, 1158, nil, nil, nil, 171, nil, nil, 197, 179, + nil, nil, nil, nil, nil, 764, 199, nil, nil, nil, + 709, nil, nil, nil, nil, 282, 251, 221, 185, 989, + 26, 132, 928, 79, 245, 1095, 142, 137, nil, nil, + 245, -20, 832, 805, 184, nil, nil, nil, nil, 782, + nil, -3, nil, nil, 258, 269, -7, 67, nil, 1076, + nil, nil, nil, nil, 1054, nil, nil, nil, nil, nil, + 282, 1029, nil, nil, nil, 167, 632, nil, 282, nil, + nil, 294, nil, 301, 302, 303, nil, 310, nil, nil, + nil, nil, 326, 766, 725, 616, nil, nil, -19, 1117, + nil, nil, nil, nil, 830, 345, 346, nil, nil, 348, + 1136, nil, nil, nil, nil, nil, nil, nil, 1237, 1177, + nil, 1218, nil, nil ] racc_action_default = [ - -150, -174, -14, -2, -143, -174, -174, -15, -3, -141, - -16, -5, -174, -17, -6, -174, -7, -174, -142, -8, - -174, -9, -174, -10, -174, -11, -174, -40, -12, -174, - -174, -13, -1, -174, -174, -142, -150, -39, -174, -144, - -148, -147, -146, -149, -150, -79, -72, -167, -130, -28, - -174, -32, -29, -174, -174, -63, -30, -102, -31, -104, - -103, -33, -20, -62, -21, -61, -22, -23, -131, -25, - -26, -174, -27, -99, -93, -98, -96, -174, -110, -94, - -90, -97, -174, -91, -95, -92, -174, -132, -134, -150, - -41, -174, -174, -42, -72, -150, -150, -4, -70, -71, - -163, -174, -174, -161, -174, -174, -174, -172, -77, -78, - -80, -174, -129, -128, -69, -67, -63, -73, -64, -62, - -59, -65, -172, -68, -57, -66, -174, -19, -174, -174, - -174, -174, -174, -174, -82, -169, -174, -174, -174, -174, - -151, -152, -174, 279, -174, -174, -172, -150, -45, -174, - -46, -62, -48, -174, -55, -54, -174, -164, -165, -166, - -174, -162, -145, -174, -174, -173, -174, -174, -60, -174, - -174, -173, -72, -18, -174, -126, -118, -119, -62, -174, - -124, -127, -125, -105, -101, -174, -24, -34, -174, -168, - -174, -170, -171, -174, -112, -174, -116, -174, -133, -160, - -174, -174, -155, -158, -174, -106, -174, -174, -51, -50, - -174, -44, -174, -174, -43, -138, -174, -140, -174, -38, - -81, -76, -75, -58, -35, -36, -74, -172, -174, -121, - -172, -100, -83, -108, -174, -174, -113, -111, -174, -153, - -154, -174, -174, -136, -174, -37, -49, -47, -87, -88, - -84, -85, -52, -89, -86, -53, -137, -139, -56, -123, - -174, -174, -171, -174, -107, -174, -117, -159, -156, -157, - -135, -122, -120, -174, -115, -174, -174, -114, -109 ] + -167, -191, -191, -7, -160, -191, -191, -8, -158, -9, + -191, -10, -11, -159, -12, -191, -191, -191, -13, -1, + -191, -14, -2, -191, -191, -15, -3, -191, -40, -16, + -5, -17, -6, -191, -191, -79, -167, -159, -72, -165, + -164, -163, -167, -161, -166, -184, -33, -20, -191, -32, + -21, -191, -63, -22, -102, -23, -104, -103, -25, -62, + -26, -191, -61, -27, -147, -28, -148, -29, -191, -30, + -31, -191, -191, -110, -97, -191, -191, -91, -95, -92, + -99, -93, -98, -96, -191, -191, -94, -90, -191, -72, + -167, -42, -167, -4, -191, -151, -149, -191, -39, -167, + -41, -70, -71, -78, -80, -191, -189, -77, -191, -191, + -180, -63, -59, -65, -189, -68, -62, -57, -66, -191, + -146, -145, -69, -67, -73, -64, -191, -191, -178, -191, + -191, -19, -191, -191, -191, -191, -191, 314, -191, -82, + -191, -186, -124, -117, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -189, -191, -167, -46, -48, -191, -55, -62, -54, -45, + -191, -191, -191, -191, -168, -191, -169, -191, -191, -191, + -190, -181, -182, -183, -191, -191, -60, -191, -190, -72, + -179, -191, -162, -18, -24, -62, -105, -34, -191, -191, + -101, -136, -141, -144, -142, -191, -191, -143, -135, -127, + -191, -185, -187, -188, -113, -115, -119, -116, -121, -126, + -123, -120, -125, -122, -118, -191, -111, -112, -114, -106, + -191, -191, -191, -191, -191, -51, -50, -44, -43, -191, + -129, -191, -133, -150, -177, -175, -191, -191, -172, -191, + -76, -75, -38, -81, -191, -155, -35, -58, -36, -74, + -189, -191, -157, -100, -138, -189, -191, -83, -108, -37, + -49, -85, -52, -89, -86, -87, -88, -84, -53, -47, + -130, -128, -191, -191, -191, -191, -170, -171, -191, -191, + -153, -154, -56, -156, -191, -191, -188, -140, -107, -191, + -191, -134, -176, -174, -173, -152, -139, -137, -191, -191, + -132, -191, -131, -109 ] racc_goto_table = [ - 30, 32, 56, 108, 174, 97, 38, 110, 52, 39, - 122, 177, 62, 196, 190, 3, 202, 114, 194, 29, - 58, 124, 149, 156, 164, 247, 87, 136, 36, 93, - 115, 82, 30, 264, 56, 197, 113, 252, 255, 170, - 52, 107, 169, 176, 128, 120, 230, 88, 118, 89, - 142, 100, 58, 102, 174, 44, 106, 186, 146, 103, - 49, 229, 200, 206, 201, 37, 157, nil, nil, nil, - nil, 61, 196, 81, 207, 81, nil, 236, nil, nil, - nil, nil, nil, nil, nil, nil, 81, 81, 112, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 161, 162, 61, 141, nil, nil, 81, 260, nil, - 266, nil, nil, nil, nil, 56, 56, 268, 72, 113, - nil, 52, 52, 108, 158, 185, nil, 220, 113, 226, - 81, 175, nil, 58, 58, 174, 227, 30, 193, 114, - 175, 198, 271, 223, 258, 81, 125, 261, nil, nil, - 72, nil, 115, nil, nil, nil, nil, nil, 113, nil, - 30, 216, nil, 30, 218, nil, 97, nil, nil, 113, - 118, 112, nil, 49, 49, nil, nil, nil, nil, 70, - 112, 175, nil, nil, 61, nil, 187, 113, nil, 97, - nil, 97, nil, 30, nil, nil, 249, 249, nil, 175, - nil, nil, 113, 113, 30, 244, nil, 123, nil, nil, - 112, 70, nil, nil, 250, 250, 30, 97, 30, 81, - 81, 112, nil, nil, nil, 113, nil, nil, nil, 182, - nil, 72, 72, nil, nil, nil, nil, 175, 182, 112, - nil, nil, nil, 81, 30, nil, nil, nil, 97, 97, - 113, nil, nil, nil, 248, 248, 155, 155, nil, nil, - nil, nil, 175, nil, nil, 30, 275, nil, 125, 78, - nil, 86, 69, 30, 276, 30, 30, 112, nil, 182, - nil, 81, 98, 99, nil, nil, nil, nil, nil, nil, - 181, 81, 70, 70, nil, 81, nil, 182, nil, 181, - 121, nil, 112, 130, 69, nil, nil, nil, 155, 73, - nil, 73, 254, 254, nil, nil, nil, nil, nil, nil, - nil, nil, 73, 73, nil, nil, 134, nil, nil, 123, - nil, nil, nil, nil, nil, 182, nil, nil, nil, nil, - 181, 144, nil, 73, nil, nil, nil, nil, nil, 154, - 154, nil, nil, nil, nil, nil, nil, nil, 181, nil, - 182, nil, nil, nil, nil, nil, 73, nil, nil, nil, - nil, 155, nil, 253, 253, nil, nil, nil, nil, nil, - nil, 73, nil, 180, nil, 69, 69, nil, nil, nil, - nil, nil, 180, nil, nil, nil, 181, nil, nil, nil, - nil, 154, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 221, 222, nil, nil, nil, - nil, 181, 121, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 180, nil, nil, nil, nil, nil, 232, + 2, 69, 19, 206, 17, 93, 179, 70, 122, 107, + 47, 210, 201, 46, 187, 117, 36, 96, 15, 2, + 114, 43, 22, 17, 64, 248, 123, 170, 97, 171, + 104, 240, 125, 272, 278, 279, 69, 140, 99, 242, + 91, 298, 70, 239, 106, 130, 185, 208, 46, 64, + 63, 112, 265, 95, 175, 109, 42, 127, 110, 64, + 230, 194, 246, 247, 128, 98, 181, nil, nil, nil, + nil, 160, 206, 94, nil, 118, nil, nil, nil, nil, + nil, 264, nil, nil, nil, 63, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 280, 231, + nil, nil, nil, nil, 133, nil, 242, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 182, + 69, 176, nil, 69, nil, nil, 70, nil, 139, 70, + 207, nil, 199, 58, 197, 46, 294, 190, nil, 304, + 192, 159, nil, 64, nil, nil, 64, 64, nil, nil, + 301, nil, nil, nil, 107, 2, 122, 225, 113, 17, + 292, 206, 259, 257, nil, 295, 207, 243, 58, 63, + 306, 260, 63, 204, 123, 253, nil, nil, nil, nil, + 125, nil, nil, 64, 2, nil, 254, nil, 17, nil, + nil, 2, nil, 261, nil, 17, nil, 64, nil, 207, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 204, + 166, 93, 166, 65, nil, nil, 64, nil, nil, nil, + 276, 276, nil, 118, nil, 2, 277, 277, nil, 17, + 250, 251, nil, 207, nil, nil, nil, nil, 120, 67, + 93, nil, 204, 64, 64, nil, nil, 93, 65, 2, + 64, 289, 58, 17, 2, 58, 202, nil, 17, nil, + nil, 2, nil, 267, 121, 17, nil, nil, nil, 274, + 274, nil, nil, nil, 67, 93, 204, 207, nil, nil, + nil, nil, 166, nil, nil, nil, nil, nil, 207, 2, + nil, nil, 202, 17, 64, 93, nil, 93, 60, nil, + 2, nil, 309, nil, 17, 64, 113, nil, 2, 2, + 311, 2, 17, 17, nil, 17, nil, nil, nil, 297, + 204, nil, nil, 115, nil, 202, nil, nil, nil, nil, + nil, 204, 65, 60, nil, 65, 120, 302, 303, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 180, nil, nil, nil, 73, 73, nil, nil, nil, - nil, nil, nil, nil, 154, nil, 251, 251, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 259, nil, 73, - nil, nil, nil, nil, nil, nil, nil, 267, nil, 180, - nil, 269, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 271, 271, 166, nil, nil, nil, 67, 202, + nil, 67, 121, nil, nil, nil, nil, nil, nil, nil, + 85, nil, 120, nil, nil, 168, nil, 168, nil, nil, + nil, nil, nil, nil, nil, nil, 120, 101, 102, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 121, nil, + nil, nil, nil, 202, nil, 120, nil, nil, nil, nil, + nil, nil, 121, nil, 202, nil, nil, 60, nil, nil, + 60, 203, nil, nil, nil, nil, 138, nil, nil, nil, + 142, 121, 275, 275, nil, nil, nil, nil, 143, 120, + nil, nil, nil, nil, nil, nil, nil, 168, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 203, 121, 121, + nil, nil, nil, nil, nil, 121, nil, nil, nil, nil, + nil, 115, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 120, nil, nil, nil, nil, nil, nil, + 203, nil, nil, nil, 120, nil, nil, nil, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 121, + 226, 227, 228, nil, nil, nil, nil, 273, 273, 168, + 121, nil, nil, nil, 203, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 180, nil, nil, 73, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 73, nil, nil, - nil, 73 ] + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 203, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 203 ] racc_goto_check = [ - 35, 2, 27, 50, 60, 4, 35, 52, 26, 69, - 33, 62, 18, 60, 54, 3, 72, 48, 58, 1, - 28, 45, 39, 39, 34, 40, 28, 53, 30, 38, - 27, 55, 35, 56, 27, 57, 26, 44, 44, 34, - 26, 36, 32, 61, 18, 31, 63, 64, 28, 30, - 65, 3, 28, 66, 60, 67, 68, 21, 33, 3, - 25, 62, 70, 34, 71, 5, 73, nil, nil, nil, - nil, 29, 60, 29, 39, 29, nil, 58, nil, nil, - nil, nil, nil, nil, nil, nil, 29, 29, 25, nil, - nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, - nil, 69, 69, 29, 3, nil, nil, 29, 54, nil, - 60, nil, nil, nil, nil, 27, 27, 72, 24, 26, - nil, 26, 26, 50, 30, 18, nil, 52, 26, 50, - 29, 28, nil, 28, 28, 60, 33, 35, 2, 48, - 28, 28, 62, 45, 34, 29, 24, 34, nil, nil, - 24, nil, 27, nil, nil, nil, nil, nil, 26, nil, - 35, 2, nil, 35, 2, nil, 4, nil, nil, 26, - 28, 25, nil, 25, 25, nil, nil, nil, nil, 23, - 25, 28, nil, nil, 29, nil, 29, 26, nil, 4, - nil, 4, nil, 35, nil, nil, 27, 27, nil, 28, - nil, nil, 26, 26, 35, 2, nil, 23, nil, nil, - 25, 23, nil, nil, 28, 28, 35, 4, 35, 29, - 29, 25, nil, nil, nil, 26, nil, nil, nil, 24, - nil, 24, 24, nil, nil, nil, nil, 28, 24, 25, - nil, nil, nil, 29, 35, nil, nil, nil, 4, 4, - 26, nil, nil, nil, 25, 25, 23, 23, nil, nil, - nil, nil, 28, nil, nil, 35, 2, nil, 24, 49, - nil, 49, 22, 35, 2, 35, 35, 25, nil, 24, - nil, 29, 49, 49, nil, nil, nil, nil, nil, nil, - 23, 29, 23, 23, nil, 29, nil, 24, nil, 23, - 22, nil, 25, 49, 22, nil, nil, nil, 23, 47, - nil, 47, 24, 24, nil, nil, nil, nil, nil, nil, - nil, nil, 47, 47, nil, nil, 49, nil, nil, 23, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - 23, 49, nil, 47, nil, nil, nil, nil, nil, 22, - 22, nil, nil, nil, nil, nil, nil, nil, 23, nil, - 24, nil, nil, nil, nil, nil, 47, nil, nil, nil, - nil, 23, nil, 23, 23, nil, nil, nil, nil, nil, - nil, 47, nil, 22, nil, 22, 22, nil, nil, nil, - nil, nil, 22, nil, nil, nil, 23, nil, nil, nil, - nil, 22, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 49, 49, nil, nil, nil, - nil, 23, 22, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, nil, 49, + 29, 27, 2, 60, 35, 4, 34, 28, 48, 50, + 18, 55, 62, 29, 34, 45, 30, 28, 1, 29, + 33, 69, 3, 35, 47, 72, 27, 39, 35, 39, + 53, 58, 28, 44, 44, 40, 27, 54, 30, 60, + 38, 56, 28, 57, 36, 18, 32, 61, 29, 47, + 24, 31, 63, 64, 65, 66, 67, 68, 3, 47, + 34, 21, 70, 71, 3, 5, 73, nil, nil, nil, + nil, 33, 60, 51, nil, 24, nil, nil, nil, nil, + nil, 62, nil, nil, nil, 24, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 58, 39, + nil, nil, nil, nil, 51, nil, 60, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 30, + 27, 3, nil, 27, nil, nil, 28, nil, 51, 28, + 28, nil, 18, 22, 29, 29, 55, 69, nil, 72, + 69, 51, nil, 47, nil, nil, 47, 47, nil, nil, + 60, nil, nil, nil, 50, 29, 48, 2, 22, 35, + 34, 60, 50, 45, nil, 34, 28, 28, 22, 24, + 62, 33, 24, 24, 27, 53, nil, nil, nil, nil, + 28, nil, nil, 47, 29, nil, 2, nil, 35, nil, + nil, 29, nil, 2, nil, 35, nil, 47, nil, 28, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 24, + 22, 4, 22, 25, nil, nil, 47, nil, nil, nil, + 27, 27, nil, 24, nil, 29, 28, 28, nil, 35, + 51, 51, nil, 28, nil, nil, nil, nil, 25, 26, + 4, nil, 24, 47, 47, nil, nil, 4, 25, 29, + 47, 2, 22, 35, 29, 22, 22, nil, 35, nil, + nil, 29, nil, 51, 26, 35, nil, nil, nil, 24, + 24, nil, nil, nil, 26, 4, 24, 28, nil, nil, + nil, nil, 22, nil, nil, nil, nil, nil, 28, 29, + nil, nil, 22, 35, 47, 4, nil, 4, 23, nil, + 29, nil, 2, nil, 35, 47, 22, nil, 29, 29, + 2, 29, 35, 35, nil, 35, nil, nil, nil, 51, + 24, nil, nil, 23, nil, 22, nil, nil, nil, nil, + nil, 24, 25, 23, nil, 25, 25, 51, 51, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, 22, 22, 22, nil, nil, nil, 26, 22, + nil, 26, 26, nil, nil, nil, nil, nil, nil, nil, + 49, nil, 25, nil, nil, 23, nil, 23, nil, nil, + nil, nil, nil, nil, nil, nil, 25, 49, 49, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 26, nil, + nil, nil, nil, 22, nil, 25, nil, nil, nil, nil, + nil, nil, 26, nil, 22, nil, nil, 23, nil, nil, + 23, 23, nil, nil, nil, nil, 49, nil, nil, nil, + 49, 26, 25, 25, nil, nil, nil, nil, 49, 25, + nil, nil, nil, nil, nil, nil, nil, 23, nil, nil, + nil, nil, nil, nil, nil, nil, nil, 23, 26, 26, + nil, nil, nil, nil, nil, 26, nil, nil, nil, nil, + nil, 23, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, + 23, nil, nil, nil, 25, nil, nil, nil, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 26, + 49, 49, 49, nil, nil, nil, nil, 23, 23, 23, + 26, nil, nil, nil, 23, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, 47, 47, nil, nil, nil, - nil, nil, nil, nil, 22, nil, 22, 22, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 49, nil, 47, - nil, nil, nil, nil, nil, nil, nil, 49, nil, 22, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, 47, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 47, nil, nil, - nil, 47 ] + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, 23, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, 23 ] racc_goto_pointer = [ - nil, 19, 1, 15, -27, 59, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -6, nil, - nil, -75, 254, 161, 100, 42, -10, -16, 2, 53, - 23, -1, -78, -36, -83, 0, -4, nil, -1, -73, - -185, nil, nil, nil, -175, -25, nil, 289, -29, 249, - -42, nil, -38, -50, -122, 11, -200, -103, -120, nil, - -125, -86, -118, -133, 23, -39, 17, 43, 12, -3, - -78, -76, -124, -35 ] + nil, 18, 2, 22, -14, 41, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, -3, nil, + nil, -71, 120, 285, 37, 200, 226, -12, -6, 0, + 11, 13, -66, -18, -100, 4, 9, nil, 23, -63, + -199, nil, nil, nil, -199, -23, nil, 11, -30, 354, + -26, 53, nil, -5, -38, -129, -227, -129, -141, nil, + -133, -89, -124, -153, 30, -45, 19, 46, 15, 11, + -112, -111, -149, -42 ] racc_goto_default = [ - nil, nil, nil, 148, 8, 11, 14, 16, 19, 21, - 23, 25, 28, 31, 2, 7, 10, 13, nil, 64, - 66, 67, 83, 84, 85, 74, 75, 79, 80, 15, - 17, nil, nil, nil, nil, 71, nil, 6, nil, nil, - 150, 210, 152, 153, nil, nil, 126, 48, 76, nil, - 117, 109, nil, nil, nil, nil, nil, nil, nil, 195, - 53, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, 169, 26, 30, 32, 3, 7, 9, + 11, 12, 14, 18, 21, 25, 29, 31, nil, 50, + 53, 55, 77, 78, 79, 81, 82, 86, 87, 74, + 6, nil, nil, nil, nil, 61, nil, 24, nil, nil, + 163, 234, 164, 165, nil, nil, 119, 80, 83, nil, + 124, 73, 103, nil, nil, nil, nil, nil, nil, 241, + 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil ] racc_token_table = { @@ -613,11 +776,18 @@ racc_token_table = { :OR => 48, :AND => 49, :UNDEF => 50, - :PARROW => 51 } + :PARROW => 51, + :PLUS => 52, + :MINUS => 53, + :TIMES => 54, + :DIV => 55, + :LSHIFT => 56, + :RSHIFT => 57, + :UMINUS => 58 } racc_use_result_var = true -racc_nt_base = 52 +racc_nt_base = 59 Racc_arg = [ racc_action_table, @@ -688,6 +858,13 @@ Racc_token_to_s_table = [ 'AND', 'UNDEF', 'PARROW', +'PLUS', +'MINUS', +'TIMES', +'DIV', +'LSHIFT', +'RSHIFT', +'UMINUS', '$start', 'program', 'statements', @@ -737,13 +914,13 @@ Racc_token_to_s_table = [ 'resourcename', 'undef', 'array', -'rvalue', +'expression', 'param', +'rvalue', 'addparam', 'anyparam', 'rvalues', 'comma', -'iftest', 'else', 'caseopts', 'caseopt', @@ -763,13 +940,13 @@ Racc_token_to_s_table = [ 'argument', 'classnameordefault'] -Racc_debug_parser = false +Racc_debug_parser = true ##### racc system variables end ##### # reduce 0 omitted -module_eval <<'.,.,', 'grammar.ra', 30 +module_eval <<'.,.,', 'grammar.ra', 42 def _reduce_1( val, _values, result ) if val[0] # Make sure we always return an array. @@ -793,7 +970,7 @@ module_eval <<'.,.,', 'grammar.ra', 30 # reduce 3 omitted -module_eval <<'.,.,', 'grammar.ra', 46 +module_eval <<'.,.,', 'grammar.ra', 58 def _reduce_4( val, _values, result ) if val[0] and val[1] if val[0].instance_of?(AST::ASTArray) @@ -836,7 +1013,7 @@ module_eval <<'.,.,', 'grammar.ra', 46 # reduce 17 omitted -module_eval <<'.,.,', 'grammar.ra', 69 +module_eval <<'.,.,', 'grammar.ra', 81 def _reduce_18( val, _values, result ) args = aryfy(val[2]) result = ast AST::Function, @@ -847,7 +1024,7 @@ module_eval <<'.,.,', 'grammar.ra', 69 end .,., -module_eval <<'.,.,', 'grammar.ra', 75 +module_eval <<'.,.,', 'grammar.ra', 87 def _reduce_19( val, _values, result ) result = ast AST::Function, :name => val[0], @@ -857,7 +1034,7 @@ module_eval <<'.,.,', 'grammar.ra', 75 end .,., -module_eval <<'.,.,', 'grammar.ra', 82 +module_eval <<'.,.,', 'grammar.ra', 94 def _reduce_20( val, _values, result ) args = aryfy(val[1]) result = ast AST::Function, @@ -874,7 +1051,7 @@ module_eval <<'.,.,', 'grammar.ra', 82 # reduce 23 omitted -module_eval <<'.,.,', 'grammar.ra', 92 +module_eval <<'.,.,', 'grammar.ra', 104 def _reduce_24( val, _values, result ) result = aryfy(val[0], val[2]) result.line = @lexer.line @@ -897,7 +1074,7 @@ module_eval <<'.,.,', 'grammar.ra', 92 # reduce 31 omitted -module_eval <<'.,.,', 'grammar.ra', 105 +module_eval <<'.,.,', 'grammar.ra', 117 def _reduce_32( val, _values, result ) result = ast AST::Name, :value => val[0] result @@ -906,7 +1083,7 @@ module_eval <<'.,.,', 'grammar.ra', 105 # reduce 33 omitted -module_eval <<'.,.,', 'grammar.ra', 116 +module_eval <<'.,.,', 'grammar.ra', 128 def _reduce_34( val, _values, result ) unless val[0].is_a?(AST::ASTArray) val[0] = aryfy(val[0]) @@ -919,7 +1096,7 @@ module_eval <<'.,.,', 'grammar.ra', 116 end .,., -module_eval <<'.,.,', 'grammar.ra', 137 +module_eval <<'.,.,', 'grammar.ra', 149 def _reduce_35( val, _values, result ) array = val[2] if array.instance_of?(AST::ResourceInstance) @@ -943,7 +1120,7 @@ module_eval <<'.,.,', 'grammar.ra', 137 end .,., -module_eval <<'.,.,', 'grammar.ra', 140 +module_eval <<'.,.,', 'grammar.ra', 152 def _reduce_36( val, _values, result ) # This is a deprecated syntax. error "All resource specifications require names" @@ -951,7 +1128,7 @@ module_eval <<'.,.,', 'grammar.ra', 140 end .,., -module_eval <<'.,.,', 'grammar.ra', 143 +module_eval <<'.,.,', 'grammar.ra', 155 def _reduce_37( val, _values, result ) # a defaults setting for a type result = ast(AST::ResourceDefaults, :type => val[0], :params => val[2]) @@ -959,14 +1136,14 @@ module_eval <<'.,.,', 'grammar.ra', 143 end .,., -module_eval <<'.,.,', 'grammar.ra', 148 +module_eval <<'.,.,', 'grammar.ra', 160 def _reduce_38( val, _values, result ) result = ast AST::ResourceOverride, :object => val[0], :params => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 175 +module_eval <<'.,.,', 'grammar.ra', 187 def _reduce_39( val, _values, result ) type = val[0] @@ -994,21 +1171,21 @@ module_eval <<'.,.,', 'grammar.ra', 175 end .,., -module_eval <<'.,.,', 'grammar.ra', 176 +module_eval <<'.,.,', 'grammar.ra', 188 def _reduce_40( val, _values, result ) result = :virtual result end .,., -module_eval <<'.,.,', 'grammar.ra', 177 +module_eval <<'.,.,', 'grammar.ra', 189 def _reduce_41( val, _values, result ) result = :exported result end .,., -module_eval <<'.,.,', 'grammar.ra', 200 +module_eval <<'.,.,', 'grammar.ra', 212 def _reduce_42( val, _values, result ) if val[0] =~ /^[a-z]/ Puppet.warning addcontext("Collection names must now be capitalized") @@ -1031,7 +1208,7 @@ module_eval <<'.,.,', 'grammar.ra', 200 end .,., -module_eval <<'.,.,', 'grammar.ra', 210 +module_eval <<'.,.,', 'grammar.ra', 222 def _reduce_43( val, _values, result ) if val[1] result = val[1] @@ -1043,7 +1220,7 @@ module_eval <<'.,.,', 'grammar.ra', 210 end .,., -module_eval <<'.,.,', 'grammar.ra', 218 +module_eval <<'.,.,', 'grammar.ra', 230 def _reduce_44( val, _values, result ) if val[1] result = val[1] @@ -1059,7 +1236,7 @@ module_eval <<'.,.,', 'grammar.ra', 218 # reduce 46 omitted -module_eval <<'.,.,', 'grammar.ra', 226 +module_eval <<'.,.,', 'grammar.ra', 238 def _reduce_47( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] result @@ -1068,7 +1245,7 @@ module_eval <<'.,.,', 'grammar.ra', 226 # reduce 48 omitted -module_eval <<'.,.,', 'grammar.ra', 232 +module_eval <<'.,.,', 'grammar.ra', 244 def _reduce_49( val, _values, result ) result = val[1] result.parens = true @@ -1080,7 +1257,7 @@ module_eval <<'.,.,', 'grammar.ra', 232 # reduce 51 omitted -module_eval <<'.,.,', 'grammar.ra', 240 +module_eval <<'.,.,', 'grammar.ra', 252 def _reduce_52( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] #result = ast AST::CollExpr @@ -1089,7 +1266,7 @@ module_eval <<'.,.,', 'grammar.ra', 240 end .,., -module_eval <<'.,.,', 'grammar.ra', 245 +module_eval <<'.,.,', 'grammar.ra', 257 def _reduce_53( val, _values, result ) result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2] #result = ast AST::CollExpr @@ -1102,7 +1279,7 @@ module_eval <<'.,.,', 'grammar.ra', 245 # reduce 55 omitted -module_eval <<'.,.,', 'grammar.ra', 252 +module_eval <<'.,.,', 'grammar.ra', 264 def _reduce_56( val, _values, result ) result = ast AST::ResourceInstance, :children => [val[0],val[2]] result @@ -1111,7 +1288,7 @@ module_eval <<'.,.,', 'grammar.ra', 252 # reduce 57 omitted -module_eval <<'.,.,', 'grammar.ra', 262 +module_eval <<'.,.,', 'grammar.ra', 274 def _reduce_58( val, _values, result ) if val[0].instance_of?(AST::ResourceInstance) result = ast AST::ASTArray, :children => [val[0],val[2]] @@ -1127,21 +1304,21 @@ module_eval <<'.,.,', 'grammar.ra', 262 # reduce 60 omitted -module_eval <<'.,.,', 'grammar.ra', 269 +module_eval <<'.,.,', 'grammar.ra', 281 def _reduce_61( val, _values, result ) result = ast AST::Undef, :value => :undef result end .,., -module_eval <<'.,.,', 'grammar.ra', 273 +module_eval <<'.,.,', 'grammar.ra', 285 def _reduce_62( val, _values, result ) result = ast AST::Name, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 277 +module_eval <<'.,.,', 'grammar.ra', 289 def _reduce_63( val, _values, result ) result = ast AST::Type, :value => val[0] result @@ -1160,7 +1337,7 @@ module_eval <<'.,.,', 'grammar.ra', 277 # reduce 69 omitted -module_eval <<'.,.,', 'grammar.ra', 293 +module_eval <<'.,.,', 'grammar.ra', 305 def _reduce_70( val, _values, result ) if val[0] =~ /::/ raise Puppet::ParseError, "Cannot assign to variables in other namespaces" @@ -1172,7 +1349,7 @@ module_eval <<'.,.,', 'grammar.ra', 293 end .,., -module_eval <<'.,.,', 'grammar.ra', 298 +module_eval <<'.,.,', 'grammar.ra', 310 def _reduce_71( val, _values, result ) variable = ast AST::Name, :value => val[0] result = ast AST::VarDef, :name => variable, :value => val[2], :append => true @@ -1180,21 +1357,21 @@ module_eval <<'.,.,', 'grammar.ra', 298 end .,., -module_eval <<'.,.,', 'grammar.ra', 303 +module_eval <<'.,.,', 'grammar.ra', 315 def _reduce_72( val, _values, result ) result = ast AST::ASTArray result end .,., -module_eval <<'.,.,', 'grammar.ra', 303 +module_eval <<'.,.,', 'grammar.ra', 315 def _reduce_73( val, _values, result ) result = val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 312 +module_eval <<'.,.,', 'grammar.ra', 324 def _reduce_74( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) @@ -1206,14 +1383,14 @@ module_eval <<'.,.,', 'grammar.ra', 312 end .,., -module_eval <<'.,.,', 'grammar.ra', 316 +module_eval <<'.,.,', 'grammar.ra', 328 def _reduce_75( val, _values, result ) result = ast AST::ResourceParam, :param => val[0], :value => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 321 +module_eval <<'.,.,', 'grammar.ra', 333 def _reduce_76( val, _values, result ) result = ast AST::ResourceParam, :param => val[0], :value => val[2], :add => true @@ -1225,21 +1402,21 @@ module_eval <<'.,.,', 'grammar.ra', 321 # reduce 78 omitted -module_eval <<'.,.,', 'grammar.ra', 329 +module_eval <<'.,.,', 'grammar.ra', 341 def _reduce_79( val, _values, result ) result = ast AST::ASTArray result end .,., -module_eval <<'.,.,', 'grammar.ra', 329 +module_eval <<'.,.,', 'grammar.ra', 341 def _reduce_80( val, _values, result ) result = val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 338 +module_eval <<'.,.,', 'grammar.ra', 350 def _reduce_81( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) @@ -1253,7 +1430,7 @@ module_eval <<'.,.,', 'grammar.ra', 338 # reduce 82 omitted -module_eval <<'.,.,', 'grammar.ra', 347 +module_eval <<'.,.,', 'grammar.ra', 359 def _reduce_83( val, _values, result ) if val[0].instance_of?(AST::ASTArray) result = val[0].push(val[2]) @@ -1296,7 +1473,7 @@ module_eval <<'.,.,', 'grammar.ra', 347 # reduce 99 omitted -module_eval <<'.,.,', 'grammar.ra', 374 +module_eval <<'.,.,', 'grammar.ra', 386 def _reduce_100( val, _values, result ) args = aryfy(val[2]) result = ast AST::Function, @@ -1307,7 +1484,7 @@ module_eval <<'.,.,', 'grammar.ra', 374 end .,., -module_eval <<'.,.,', 'grammar.ra', 379 +module_eval <<'.,.,', 'grammar.ra', 391 def _reduce_101( val, _values, result ) result = ast AST::Function, :name => val[0], @@ -1317,28 +1494,28 @@ module_eval <<'.,.,', 'grammar.ra', 379 end .,., -module_eval <<'.,.,', 'grammar.ra', 383 +module_eval <<'.,.,', 'grammar.ra', 395 def _reduce_102( val, _values, result ) result = ast AST::String, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 385 +module_eval <<'.,.,', 'grammar.ra', 397 def _reduce_103( val, _values, result ) result = ast AST::FlatString, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 389 +module_eval <<'.,.,', 'grammar.ra', 401 def _reduce_104( val, _values, result ) result = ast AST::Boolean, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 394 +module_eval <<'.,.,', 'grammar.ra', 406 def _reduce_105( val, _values, result ) Puppet.warning addcontext("Deprecation notice: Resource references should now be capitalized") result = ast AST::ResourceReference, :type => val[0], :title => val[2] @@ -1346,14 +1523,14 @@ module_eval <<'.,.,', 'grammar.ra', 394 end .,., -module_eval <<'.,.,', 'grammar.ra', 396 +module_eval <<'.,.,', 'grammar.ra', 408 def _reduce_106( val, _values, result ) result = ast AST::ResourceReference, :type => val[0], :title => val[2] result end .,., -module_eval <<'.,.,', 'grammar.ra', 409 +module_eval <<'.,.,', 'grammar.ra', 421 def _reduce_107( val, _values, result ) args = { :test => val[1], @@ -1371,7 +1548,7 @@ module_eval <<'.,.,', 'grammar.ra', 409 # reduce 108 omitted -module_eval <<'.,.,', 'grammar.ra', 414 +module_eval <<'.,.,', 'grammar.ra', 426 def _reduce_109( val, _values, result ) result = ast AST::Else, :statements => val[2] result @@ -1380,8 +1557,127 @@ module_eval <<'.,.,', 'grammar.ra', 414 # reduce 110 omitted -module_eval <<'.,.,', 'grammar.ra', 426 +module_eval <<'.,.,', 'grammar.ra', 443 def _reduce_111( val, _values, result ) + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 446 + def _reduce_112( val, _values, result ) + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 449 + def _reduce_113( val, _values, result ) + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 452 + def _reduce_114( val, _values, result ) + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 455 + def _reduce_115( val, _values, result ) + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 458 + def _reduce_116( val, _values, result ) + result = ast AST::ArithmeticOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 461 + def _reduce_117( val, _values, result ) + result = ast AST::Minus, :value => val[1] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 464 + def _reduce_118( val, _values, result ) + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 467 + def _reduce_119( val, _values, result ) + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 470 + def _reduce_120( val, _values, result ) + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 473 + def _reduce_121( val, _values, result ) + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 476 + def _reduce_122( val, _values, result ) + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 479 + def _reduce_123( val, _values, result ) + result = ast AST::ComparisonOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 482 + def _reduce_124( val, _values, result ) + result = ast AST::Not, :value => val[1] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 485 + def _reduce_125( val, _values, result ) + result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 488 + def _reduce_126( val, _values, result ) + result = ast AST::BooleanOperator, :operator => val[1], :lval => val[0], :rval => val[2] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 491 + def _reduce_127( val, _values, result ) + result = val[1] + result + end +.,., + +module_eval <<'.,.,', 'grammar.ra', 499 + def _reduce_128( val, _values, result ) options = val[3] unless options.instance_of?(AST::ASTArray) options = ast AST::ASTArray, :children => [val[3]] @@ -1391,10 +1687,10 @@ module_eval <<'.,.,', 'grammar.ra', 426 end .,., - # reduce 112 omitted + # reduce 129 omitted -module_eval <<'.,.,', 'grammar.ra', 436 - def _reduce_113( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 509 + def _reduce_130( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push val[1] result = val[0] @@ -1405,15 +1701,15 @@ module_eval <<'.,.,', 'grammar.ra', 436 end .,., -module_eval <<'.,.,', 'grammar.ra', 440 - def _reduce_114( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 513 + def _reduce_131( val, _values, result ) result = ast AST::CaseOpt, :value => val[0], :statements => val[3] result end .,., -module_eval <<'.,.,', 'grammar.ra', 445 - def _reduce_115( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 518 + def _reduce_132( val, _values, result ) result = ast(AST::CaseOpt, :value => val[0], :statements => ast(AST::ASTArray) @@ -1422,10 +1718,10 @@ module_eval <<'.,.,', 'grammar.ra', 445 end .,., - # reduce 116 omitted + # reduce 133 omitted -module_eval <<'.,.,', 'grammar.ra', 455 - def _reduce_117( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 528 + def _reduce_134( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1436,26 +1732,26 @@ module_eval <<'.,.,', 'grammar.ra', 455 end .,., -module_eval <<'.,.,', 'grammar.ra', 459 - def _reduce_118( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 532 + def _reduce_135( val, _values, result ) result = ast AST::Selector, :param => val[0], :values => val[2] result end .,., - # reduce 119 omitted + # reduce 136 omitted -module_eval <<'.,.,', 'grammar.ra', 461 - def _reduce_120( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 534 + def _reduce_137( val, _values, result ) result = val[1] result end .,., - # reduce 121 omitted + # reduce 138 omitted -module_eval <<'.,.,', 'grammar.ra', 472 - def _reduce_122( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 545 + def _reduce_139( val, _values, result ) if val[0].instance_of?(AST::ASTArray) val[0].push(val[2]) result = val[0] @@ -1466,50 +1762,50 @@ module_eval <<'.,.,', 'grammar.ra', 472 end .,., -module_eval <<'.,.,', 'grammar.ra', 476 - def _reduce_123( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 549 + def _reduce_140( val, _values, result ) result = ast AST::ResourceParam, :param => val[0], :value => val[2] result end .,., - # reduce 124 omitted + # reduce 141 omitted - # reduce 125 omitted + # reduce 142 omitted - # reduce 126 omitted + # reduce 143 omitted - # reduce 127 omitted + # reduce 144 omitted - # reduce 128 omitted + # reduce 145 omitted - # reduce 129 omitted + # reduce 146 omitted - # reduce 130 omitted + # reduce 147 omitted -module_eval <<'.,.,', 'grammar.ra', 487 - def _reduce_131( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 560 + def _reduce_148( val, _values, result ) result = ast AST::Default, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 489 - def _reduce_132( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 562 + def _reduce_149( val, _values, result ) result = [val[0].value] result end .,., -module_eval <<'.,.,', 'grammar.ra', 493 - def _reduce_133( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 566 + def _reduce_150( val, _values, result ) results = val[0] << val[2].value result end .,., -module_eval <<'.,.,', 'grammar.ra', 501 - def _reduce_134( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 574 + def _reduce_151( val, _values, result ) val[1].each do |file| import(file) end @@ -1519,8 +1815,8 @@ module_eval <<'.,.,', 'grammar.ra', 501 end .,., -module_eval <<'.,.,', 'grammar.ra', 511 - def _reduce_135( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 584 + def _reduce_152( val, _values, result ) newdefine classname(val[1]), :arguments => val[2], :code => val[4] @lexer.indefine = false result = nil @@ -1530,8 +1826,8 @@ module_eval <<'.,.,', 'grammar.ra', 511 end .,., -module_eval <<'.,.,', 'grammar.ra', 515 - def _reduce_136( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 588 + def _reduce_153( val, _values, result ) newdefine classname(val[1]), :arguments => val[2] @lexer.indefine = false result = nil @@ -1539,8 +1835,8 @@ module_eval <<'.,.,', 'grammar.ra', 515 end .,., -module_eval <<'.,.,', 'grammar.ra', 523 - def _reduce_137( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 596 + def _reduce_154( val, _values, result ) # Our class gets defined in the parent namespace, not our own. @lexer.namepop newclass classname(val[1]), :code => val[4], :parent => val[2] @@ -1549,8 +1845,8 @@ module_eval <<'.,.,', 'grammar.ra', 523 end .,., -module_eval <<'.,.,', 'grammar.ra', 528 - def _reduce_138( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 601 + def _reduce_155( val, _values, result ) # Our class gets defined in the parent namespace, not our own. @lexer.namepop newclass classname(val[1]), :parent => val[2] @@ -1559,32 +1855,32 @@ module_eval <<'.,.,', 'grammar.ra', 528 end .,., -module_eval <<'.,.,', 'grammar.ra', 533 - def _reduce_139( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 606 + def _reduce_156( val, _values, result ) newnode val[1], :parent => val[2], :code => val[4] result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 536 - def _reduce_140( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 609 + def _reduce_157( val, _values, result ) newnode val[1], :parent => val[2] result = nil result end .,., - # reduce 141 omitted + # reduce 158 omitted - # reduce 142 omitted + # reduce 159 omitted - # reduce 143 omitted + # reduce 160 omitted - # reduce 144 omitted + # reduce 161 omitted -module_eval <<'.,.,', 'grammar.ra', 550 - def _reduce_145( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 623 + def _reduce_162( val, _values, result ) result = val[0] result = [result] unless result.is_a?(Array) result << val[2] @@ -1592,49 +1888,49 @@ module_eval <<'.,.,', 'grammar.ra', 550 end .,., - # reduce 146 omitted + # reduce 163 omitted - # reduce 147 omitted + # reduce 164 omitted - # reduce 148 omitted + # reduce 165 omitted - # reduce 149 omitted + # reduce 166 omitted -module_eval <<'.,.,', 'grammar.ra', 559 - def _reduce_150( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 632 + def _reduce_167( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 563 - def _reduce_151( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 636 + def _reduce_168( val, _values, result ) result = ast AST::ASTArray, :children => [] result end .,., - # reduce 152 omitted + # reduce 169 omitted -module_eval <<'.,.,', 'grammar.ra', 568 - def _reduce_153( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 641 + def _reduce_170( val, _values, result ) result = nil result end .,., -module_eval <<'.,.,', 'grammar.ra', 572 - def _reduce_154( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 645 + def _reduce_171( val, _values, result ) result = val[1] result = [result] unless result[0].is_a?(Array) result end .,., - # reduce 155 omitted + # reduce 172 omitted -module_eval <<'.,.,', 'grammar.ra', 579 - def _reduce_156( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 652 + def _reduce_173( val, _values, result ) result = val[0] result = [result] unless result[0].is_a?(Array) result << val[2] @@ -1642,67 +1938,67 @@ module_eval <<'.,.,', 'grammar.ra', 579 end .,., -module_eval <<'.,.,', 'grammar.ra', 584 - def _reduce_157( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 657 + def _reduce_174( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 588 - def _reduce_158( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 661 + def _reduce_175( val, _values, result ) Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype") result = [val[0]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 590 - def _reduce_159( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 663 + def _reduce_176( val, _values, result ) result = [val[0], val[2]] result end .,., -module_eval <<'.,.,', 'grammar.ra', 592 - def _reduce_160( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 665 + def _reduce_177( val, _values, result ) result = [val[0]] result end .,., - # reduce 161 omitted + # reduce 178 omitted -module_eval <<'.,.,', 'grammar.ra', 597 - def _reduce_162( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 670 + def _reduce_179( val, _values, result ) result = val[1] result end .,., - # reduce 163 omitted + # reduce 180 omitted -module_eval <<'.,.,', 'grammar.ra', 602 - def _reduce_164( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 675 + def _reduce_181( val, _values, result ) result = val[1] result end .,., - # reduce 165 omitted + # reduce 182 omitted - # reduce 166 omitted + # reduce 183 omitted -module_eval <<'.,.,', 'grammar.ra', 608 - def _reduce_167( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 681 + def _reduce_184( val, _values, result ) result = ast AST::Variable, :value => val[0] result end .,., -module_eval <<'.,.,', 'grammar.ra', 616 - def _reduce_168( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 689 + def _reduce_185( val, _values, result ) if val[1].instance_of?(AST::ASTArray) result = val[1] else @@ -1712,21 +2008,21 @@ module_eval <<'.,.,', 'grammar.ra', 616 end .,., -module_eval <<'.,.,', 'grammar.ra', 618 - def _reduce_169( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 691 + def _reduce_186( val, _values, result ) result = ast AST::ASTArray result end .,., - # reduce 170 omitted + # reduce 187 omitted - # reduce 171 omitted + # reduce 188 omitted - # reduce 172 omitted + # reduce 189 omitted -module_eval <<'.,.,', 'grammar.ra', 623 - def _reduce_173( val, _values, result ) +module_eval <<'.,.,', 'grammar.ra', 696 + def _reduce_190( val, _values, result ) result = nil result end diff --git a/spec/unit/parser/lexer.rb b/spec/unit/parser/lexer.rb index fed1ade7d..c35a81a97 100755 --- a/spec/unit/parser/lexer.rb +++ b/spec/unit/parser/lexer.rb @@ -136,7 +136,13 @@ describe Puppet::Parser::Lexer::TOKENS do :BACKSLASH => '\\', :FARROW => '=>', :PARROW => '+>', - :APPENDS => '+=' + :APPENDS => '+=', + :PLUS => '+', + :MINUS => '-', + :DIV => '/', + :TIMES => '*', + :LSHIFT => '<<', + :RSHIFT => '>>', }.each do |name, string| it "should have a token named #{name.to_s}" do Puppet::Parser::Lexer::TOKENS[name].should_not be_nil @@ -213,10 +219,34 @@ describe Puppet::Parser::Lexer::TOKENS[:NAME] do end describe Puppet::Parser::Lexer::TOKENS[:NUMBER] do - before { @token = Puppet::Parser::Lexer::TOKENS[:NUMBER] } + before do + @token = Puppet::Parser::Lexer::TOKENS[:NUMBER] +# @regex = Regexp.new('^'+@token.regex.source+'$') + @regex = @token.regex + end it "should match against numeric terms" do - @token.regex.should =~ "2982383139" + @regex.should =~ "2982383139" + end + + it "should match against float terms" do + @regex.should =~ "29823.235" + end + + it "should match against hexadecimal terms" do + @regex.should =~ "0xBEEF0023" + end + + it "should match against float with exponent terms" do + @regex.should =~ "10e23" + end + + it "should match against float terms with negative exponents" do + @regex.should =~ "10e-23" + end + + it "should match against float terms with fractional parts and exponent" do + @regex.should =~ "1.234e23" end it "should return the NAME token and the value" do diff --git a/spec/unit/parser/parser.rb b/spec/unit/parser/parser.rb index 94b19be40..17e80bb6a 100755 --- a/spec/unit/parser/parser.rb +++ b/spec/unit/parser/parser.rb @@ -8,6 +8,7 @@ describe Puppet::Parser do before :each do @parser = Puppet::Parser::Parser.new :environment => "development" + @true_ast = AST::Boolean.new :value => true end describe "when parsing append operator" do @@ -31,4 +32,49 @@ describe Puppet::Parser do end end -end + + describe Puppet::Parser, "when parsing 'if'" do + it "not, it should create the correct ast objects" do + AST::Not.expects(:new).with { |h| h[:value].is_a?(AST::Boolean) } + @parser.parse("if ! true { $var = 1 }") + + end + + it "boolean operation, it should create the correct ast objects" do + AST::BooleanOperator.expects(:new).with { + |h| h[:rval].is_a?(AST::Boolean) and h[:lval].is_a?(AST::Boolean) and h[:operator]=="or" + } + @parser.parse("if true or true { $var = 1 }") + + end + + it "comparison operation, it should create the correct ast objects" do + AST::ComparisonOperator.expects(:new).with { + |h| h[:lval].is_a?(AST::Name) and h[:rval].is_a?(AST::Name) and h[:operator]=="<" + } + @parser.parse("if 1 < 2 { $var = 1 }") + + end + + end + + describe Puppet::Parser, "when parsing if complex expressions" do + it "should create a correct ast tree" do + AST::ComparisonOperator.expects(:new).with { + |h| h[:rval].is_a?(AST::Name) and h[:lval].is_a?(AST::Name) and h[:operator]==">" + }.returns("whatever") + AST::ComparisonOperator.expects(:new).with { + |h| h[:rval].is_a?(AST::Name) and h[:lval].is_a?(AST::Name) and h[:operator]=="==" + }.returns("whatever") + AST::BooleanOperator.expects(:new).with { + |h| h[:rval]=="whatever" and h[:lval]=="whatever" and h[:operator]=="and" + } + @parser.parse("if (1 > 2) and (1 == 2) { $var = 1 }") + end + + it "should raise an error on incorrect expression" do + lambda { @parser.parse("if (1 > 2 > ) or (1 == 2) { $var = 1 }") }.should raise_error + end + + end + end diff --git a/test/data/snippets/arithmetic_expression.pp b/test/data/snippets/arithmetic_expression.pp new file mode 100644 index 000000000..aae98a4db --- /dev/null +++ b/test/data/snippets/arithmetic_expression.pp @@ -0,0 +1,8 @@ + +$one = 1.30 +$two = 2.034e-2 + +$result = ((( $two + 2) / $one) + 4 * 5.45) - (6 << 7) + (0x800 + -9) + + +notice("result is $result == 1295.87692307692")
\ No newline at end of file diff --git a/test/data/snippets/ifexpression.rb b/test/data/snippets/ifexpression.rb new file mode 100644 index 000000000..eea3b855b --- /dev/null +++ b/test/data/snippets/ifexpression.rb @@ -0,0 +1,6 @@ +$one = 1 +$two = 2 + +if ($one < $two) and (($two < 3) or ($two == 2)) { + notice("True!") +} |