lib/writeexcel/excelformulaparser.rb in writeexcel-0.3.5 vs lib/writeexcel/excelformulaparser.rb in writeexcel-0.4.0

- old
+ new

@@ -1,586 +1,587 @@ -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.6 -# from Racc grammer file "". -# - -require 'racc/parser.rb' -class ExcelFormulaParser < Racc::Parser # :nodoc: -##### State transition tables begin ### - -racc_action_table = [ - 16, 54, 26, 28, 30, 32, 34, 21, 20, 3, - nil, nil, 53, 19, 23, 4, 5, 6, 7, 10, - 13, 14, 15, 17, 18, 16, nil, 26, 28, 30, - 32, 34, 8, nil, nil, nil, nil, 16, 19, nil, - 4, 5, 6, 7, 10, 13, 14, 15, 17, 18, - 19, 16, 4, 5, 6, 7, 10, 13, 14, 15, - 17, 18, nil, 16, 19, nil, 4, 5, 6, 7, - 10, 13, 14, 15, 17, 18, 19, 16, 4, 5, - 6, 7, 10, 13, 14, 15, 17, 18, nil, 16, - 19, nil, 4, 5, 6, 7, 10, 13, 14, 15, - 17, 18, 19, 16, 4, 5, 6, 7, 10, 13, - 14, 15, 17, 18, nil, 16, 19, 37, 4, 5, - 6, 7, 10, 13, 14, 15, 17, 18, 19, 16, - 4, 5, 6, 7, 10, 13, 14, 15, 17, 18, - nil, 16, 19, nil, 4, 5, 6, 7, 10, 13, - 14, 15, 17, 18, 19, 16, 4, 5, 6, 7, - 10, 13, 14, 15, 17, 18, nil, 16, 19, nil, - 4, 5, 6, 7, 10, 13, 14, 15, 17, 18, - 19, 16, 4, 5, 6, 7, 10, 13, 14, 15, - 17, 18, nil, 16, 19, nil, 4, 5, 6, 7, - 10, 13, 14, 15, 17, 18, 19, 16, 4, 5, - 6, 7, 10, 13, 14, 15, 17, 18, nil, 16, - 19, nil, 4, 5, 6, 7, 10, 13, 14, 15, - 17, 18, 19, nil, 4, 5, 6, 7, 10, 13, - 14, 15, 17, 18, 23, 24, 27, 29, 31, 33, - nil, nil, nil, nil, nil, 22, nil, 26, 28, 30, - 32, 34, nil, 52, 23, 24, 27, 29, 31, 33, - 23, 24, 27, 29, nil, nil, nil, 26, 28, 30, - 32, 34, nil, 26, 28, 30, 32, 34, 23, 24, - 27, 29, nil, nil, nil, 23, 24, 27, 29, 31, - 33, 26, 28, 30, 32, 34, 22, 25, 26, 28, - 30, 32, 34, 23, 24, 27, 29, 31, 33, nil, - nil, nil, nil, nil, 22, nil, 26, 28, 30, 32, - 34, 23, 24, 27, 29, 31, 33, nil, nil, nil, - nil, nil, 22, nil, 26, 28, 30, 32, 34, 23, - 24, 27, 29, 31, 33, 23, nil, nil, nil, nil, - 22, nil, 26, 28, 30, 32, 34, nil, 26, 28, - 30, 32, 34, 23, 24, 27, 29, 31, 33, 23, - 24, nil, nil, nil, 22, nil, 26, 28, 30, 32, - 34, nil, 26, 28, 30, 32, 34, 23, 24, 27, - 29, 31, 33, 23, 24, nil, nil, nil, 22, nil, - 26, 28, 30, 32, 34, nil, 26, 28, 30, 32, - 34, 23, 24, 27, 29, 31, 33, nil, nil, nil, - nil, nil, 22, nil, 26, 28, 30, 32, 34, 23, - 24, 27, 29, 31, 33, nil, nil, nil, nil, nil, - 22, nil, 26, 28, 30, 32, 34 ] - -racc_action_check = [ - 34, 39, 35, 35, 35, 35, 35, 4, 3, 1, - nil, nil, 39, 34, 41, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 2, nil, 41, 41, 41, - 41, 41, 2, nil, nil, nil, nil, 53, 2, nil, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 53, 33, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, nil, 32, 33, nil, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 32, 16, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, nil, 19, - 16, nil, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 19, 21, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, nil, 22, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 22, 23, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - nil, 24, 23, nil, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 24, 26, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, nil, 27, 26, nil, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 27, 28, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, nil, 29, 28, nil, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 29, 30, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, nil, 31, - 30, nil, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 31, nil, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 36, 36, 36, 36, 36, 36, - nil, nil, nil, nil, nil, 36, nil, 36, 36, 36, - 36, 36, nil, 36, 40, 40, 40, 40, 40, 40, - 48, 48, 48, 48, nil, nil, nil, 40, 40, 40, - 40, 40, nil, 48, 48, 48, 48, 48, 50, 50, - 50, 50, nil, nil, nil, 9, 9, 9, 9, 9, - 9, 50, 50, 50, 50, 50, 9, 9, 9, 9, - 9, 9, 9, 38, 38, 38, 38, 38, 38, nil, - nil, nil, nil, nil, 38, nil, 38, 38, 38, 38, - 38, 49, 49, 49, 49, 49, 49, nil, nil, nil, - nil, nil, 49, nil, 49, 49, 49, 49, 49, 51, - 51, 51, 51, 51, 51, 42, nil, nil, nil, nil, - 51, nil, 51, 51, 51, 51, 51, nil, 42, 42, - 42, 42, 42, 43, 43, 43, 43, 43, 43, 44, - 44, nil, nil, nil, 43, nil, 43, 43, 43, 43, - 43, nil, 44, 44, 44, 44, 44, 45, 45, 45, - 45, 45, 45, 46, 46, nil, nil, nil, 45, nil, - 45, 45, 45, 45, 45, nil, 46, 46, 46, 46, - 46, 47, 47, 47, 47, 47, 47, nil, nil, nil, - nil, nil, 47, nil, 47, 47, 47, 47, 47, 55, - 55, 55, 55, 55, 55, nil, nil, nil, nil, nil, - 55, nil, 55, 55, 55, 55, 55 ] - -racc_action_pointer = [ - nil, 9, 17, 8, -14, nil, nil, nil, nil, 292, - nil, nil, nil, nil, nil, nil, 69, nil, nil, 81, - nil, 95, 107, 121, 133, nil, 147, 159, 173, 185, - 199, 211, 55, 43, -8, -14, 241, nil, 310, -21, - 261, 11, 352, 370, 376, 394, 400, 418, 267, 328, - 285, 346, nil, 29, nil, 436 ] - -racc_action_default = [ - -2, -35, -1, -35, -20, -21, -22, -23, -4, -35, - -24, -17, -30, -25, -26, -27, -35, -28, -29, -35, - 56, -35, -35, -35, -35, -3, -35, -35, -35, -35, - -35, -35, -35, -35, -35, -19, -35, -32, -33, -35, - -16, -9, -10, -11, -7, -12, -8, -13, -5, -14, - -6, -15, -18, -35, -31, -34 ] - -racc_goto_table = [ - 9, 1, 2, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35, nil, nil, 36, nil, 38, - 40, 41, 42, nil, 43, 44, 45, 46, 47, 48, - 49, 50, 51, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 55 ] - -racc_goto_check = [ - 3, 1, 2, 6, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 3, nil, nil, 3, nil, 3, - 3, 3, 3, nil, 3, 3, 3, 3, 3, 3, - 3, 3, 3, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 3 ] - -racc_goto_pointer = [ - nil, 1, 2, -2, nil, nil, -18 ] - -racc_goto_default = [ - nil, nil, nil, nil, 11, 12, nil ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 35, :_reduce_none, - 0, 36, :_reduce_2, - 3, 36, :_reduce_3, - 2, 36, :_reduce_none, - 3, 37, :_reduce_5, - 3, 37, :_reduce_6, - 3, 37, :_reduce_7, - 3, 37, :_reduce_8, - 3, 37, :_reduce_9, - 3, 37, :_reduce_10, - 3, 37, :_reduce_11, - 3, 37, :_reduce_12, - 3, 37, :_reduce_13, - 3, 37, :_reduce_14, - 3, 37, :_reduce_15, - 3, 37, :_reduce_16, - 1, 37, :_reduce_none, - 3, 38, :_reduce_18, - 2, 38, :_reduce_19, - 1, 38, :_reduce_none, - 1, 38, :_reduce_21, - 1, 38, :_reduce_22, - 1, 38, :_reduce_23, - 1, 38, :_reduce_24, - 1, 38, :_reduce_25, - 1, 38, :_reduce_26, - 1, 38, :_reduce_27, - 1, 38, :_reduce_28, - 1, 38, :_reduce_29, - 1, 38, :_reduce_none, - 4, 39, :_reduce_31, - 3, 39, :_reduce_32, - 1, 40, :_reduce_33, - 3, 40, :_reduce_34 ] - -racc_reduce_n = 35 - -racc_shift_n = 56 - -racc_token_table = { - false => 0, - :error => 1, - :UMINUS => 2, - "^" => 3, - "&" => 4, - "*" => 5, - "/" => 6, - "+" => 7, - "-" => 8, - "<" => 9, - ">" => 10, - "<=" => 11, - ">=" => 12, - "<>" => 13, - "=" => 14, - :EOL => 15, - :LT => 16, - :GT => 17, - :LE => 18, - :GE => 19, - :NE => 20, - "(" => 21, - ")" => 22, - :FUNC => 23, - :NUMBER => 24, - :STRING => 25, - :REF2D => 26, - :REF3D => 27, - :RANGE2D => 28, - :RANGE3D => 29, - :NAME => 30, - :TRUE => 31, - :FALSE => 32, - "," => 33 } - -racc_nt_base = 34 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] - -Racc_token_to_s_table = [ - "$end", - "error", - "UMINUS", - "\"^\"", - "\"&\"", - "\"*\"", - "\"/\"", - "\"+\"", - "\"-\"", - "\"<\"", - "\">\"", - "\"<=\"", - "\">=\"", - "\"<>\"", - "\"=\"", - "EOL", - "LT", - "GT", - "LE", - "GE", - "NE", - "\"(\"", - "\")\"", - "FUNC", - "NUMBER", - "STRING", - "REF2D", - "REF3D", - "RANGE2D", - "RANGE3D", - "NAME", - "TRUE", - "FALSE", - "\",\"", - "$start", - "formula", - "expr_list", - "expr", - "primary", - "funcall", - "args" ] - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -module_eval(<<'.,.,', 'excelformula.y', 20) - def _reduce_2(val, _values, result) - result = [] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 21) - def _reduce_3(val, _values, result) - result.push val[1], '_arg', '1' - result - end -.,., - -# reduce 4 omitted - -module_eval(<<'.,.,', 'excelformula.y', 24) - def _reduce_5(val, _values, result) - result = [ val[0], val[2], 'ptgAdd' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 25) - def _reduce_6(val, _values, result) - result = [ val[0], val[2], 'ptgSub' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 26) - def _reduce_7(val, _values, result) - result = [ val[0], val[2], 'ptgMul' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 27) - def _reduce_8(val, _values, result) - result = [ val[0], val[2], 'ptgDiv' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 28) - def _reduce_9(val, _values, result) - result = [ val[0], val[2], 'ptgPower' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 29) - def _reduce_10(val, _values, result) - result = [ val[0], val[2], 'ptgConcat' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 30) - def _reduce_11(val, _values, result) - result = [ val[0], val[2], 'ptgLT' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 31) - def _reduce_12(val, _values, result) - result = [ val[0], val[2], 'ptgGT' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 32) - def _reduce_13(val, _values, result) - result = [ val[0], val[2], 'ptgLE' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 33) - def _reduce_14(val, _values, result) - result = [ val[0], val[2], 'ptgGE' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 34) - def _reduce_15(val, _values, result) - result = [ val[0], val[2], 'ptgNE' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 35) - def _reduce_16(val, _values, result) - result = [ val[0], val[2], 'ptgEQ' ] - result - end -.,., - -# reduce 17 omitted - -module_eval(<<'.,.,', 'excelformula.y', 38) - def _reduce_18(val, _values, result) - result = [ val[1], '_arg', '1', 'ptgParen'] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 39) - def _reduce_19(val, _values, result) - result = [ '_num', '-1', val[1], 'ptgMul' ] - result - end -.,., - -# reduce 20 omitted - -module_eval(<<'.,.,', 'excelformula.y', 41) - def _reduce_21(val, _values, result) - result = [ '_num', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 42) - def _reduce_22(val, _values, result) - result = [ '_str', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 43) - def _reduce_23(val, _values, result) - result = [ '_ref2d', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 44) - def _reduce_24(val, _values, result) - result = [ '_ref3d', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 45) - def _reduce_25(val, _values, result) - result = [ '_range2d', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 46) - def _reduce_26(val, _values, result) - result = [ '_range3d', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 47) - def _reduce_27(val, _values, result) - result = [ '_name', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 48) - def _reduce_28(val, _values, result) - result = [ 'ptgBool', '1' ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 49) - def _reduce_29(val, _values, result) - result = [ 'ptgBool', '0' ] - result - end -.,., - -# reduce 30 omitted - -module_eval(<<'.,.,', 'excelformula.y', 52) - def _reduce_31(val, _values, result) - result = [ '_class', val[0], val[2], '_arg', val[2].size.to_s, '_func', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 53) - def _reduce_32(val, _values, result) - result = [ '_func', val[0] ] - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 55) - def _reduce_33(val, _values, result) - result = val - result - end -.,., - -module_eval(<<'.,.,', 'excelformula.y', 56) - def _reduce_34(val, _values, result) - result.push val[2] - result - end -.,., - - def _reduce_none(val, _values, result) - val[0] - end - -end # class ExcelFormulaParser - - -class ExcelFormulaParserError < StandardError #:nodoc: -end - -class Node # :nodoc: - - def exec_list(nodes) - v = nil - nodes.each { |i| v = i.evaluate } - v - end - - def excelformulaparser_error(msg) - raise ExcelFormulaParserError, - "in #{fname}:#{lineno}: #{msg}" - end - -end - -class RootNode < Node # :nodoc: - - def initialize(tree) - @tree = tree - end - - def evaluate - exec_list @tree - end - -end - - -class FuncallNode < Node # :nodoc: - - def initialize(func, args) - @func = func - @args = args - end - - def evaluate - arg = @args.collect {|i| i.evaluate } - out = [] - arg.each { |i| o.push i } - o.push @func - p o - end - -end - -class NumberNode < Node # :nodoc: - - def initialize(val) - @val = val - end - - def evaluate - p @val - end - -end - -class OperateNode < Node # :nodoc: - - def initialize(op, left, right) - @op = op - @left = left - @right = right - end - - def evaluate - o = [] - o.push @left - o.push @right - o.push @op - p o - end -end +# -*- coding: utf-8 -*- +# +# DO NOT MODIFY!!!! +# This file is automatically generated by Racc 1.4.6 +# from Racc grammer file "". +# + +require 'racc/parser.rb' +class ExcelFormulaParser < Racc::Parser # :nodoc: +##### State transition tables begin ### + +racc_action_table = [ + 16, 54, 26, 28, 30, 32, 34, 21, 20, 3, + nil, nil, 53, 19, 23, 4, 5, 6, 7, 10, + 13, 14, 15, 17, 18, 16, nil, 26, 28, 30, + 32, 34, 8, nil, nil, nil, nil, 16, 19, nil, + 4, 5, 6, 7, 10, 13, 14, 15, 17, 18, + 19, 16, 4, 5, 6, 7, 10, 13, 14, 15, + 17, 18, nil, 16, 19, nil, 4, 5, 6, 7, + 10, 13, 14, 15, 17, 18, 19, 16, 4, 5, + 6, 7, 10, 13, 14, 15, 17, 18, nil, 16, + 19, nil, 4, 5, 6, 7, 10, 13, 14, 15, + 17, 18, 19, 16, 4, 5, 6, 7, 10, 13, + 14, 15, 17, 18, nil, 16, 19, 37, 4, 5, + 6, 7, 10, 13, 14, 15, 17, 18, 19, 16, + 4, 5, 6, 7, 10, 13, 14, 15, 17, 18, + nil, 16, 19, nil, 4, 5, 6, 7, 10, 13, + 14, 15, 17, 18, 19, 16, 4, 5, 6, 7, + 10, 13, 14, 15, 17, 18, nil, 16, 19, nil, + 4, 5, 6, 7, 10, 13, 14, 15, 17, 18, + 19, 16, 4, 5, 6, 7, 10, 13, 14, 15, + 17, 18, nil, 16, 19, nil, 4, 5, 6, 7, + 10, 13, 14, 15, 17, 18, 19, 16, 4, 5, + 6, 7, 10, 13, 14, 15, 17, 18, nil, 16, + 19, nil, 4, 5, 6, 7, 10, 13, 14, 15, + 17, 18, 19, nil, 4, 5, 6, 7, 10, 13, + 14, 15, 17, 18, 23, 24, 27, 29, 31, 33, + nil, nil, nil, nil, nil, 22, nil, 26, 28, 30, + 32, 34, nil, 52, 23, 24, 27, 29, 31, 33, + 23, 24, 27, 29, nil, nil, nil, 26, 28, 30, + 32, 34, nil, 26, 28, 30, 32, 34, 23, 24, + 27, 29, nil, nil, nil, 23, 24, 27, 29, 31, + 33, 26, 28, 30, 32, 34, 22, 25, 26, 28, + 30, 32, 34, 23, 24, 27, 29, 31, 33, nil, + nil, nil, nil, nil, 22, nil, 26, 28, 30, 32, + 34, 23, 24, 27, 29, 31, 33, nil, nil, nil, + nil, nil, 22, nil, 26, 28, 30, 32, 34, 23, + 24, 27, 29, 31, 33, 23, nil, nil, nil, nil, + 22, nil, 26, 28, 30, 32, 34, nil, 26, 28, + 30, 32, 34, 23, 24, 27, 29, 31, 33, 23, + 24, nil, nil, nil, 22, nil, 26, 28, 30, 32, + 34, nil, 26, 28, 30, 32, 34, 23, 24, 27, + 29, 31, 33, 23, 24, nil, nil, nil, 22, nil, + 26, 28, 30, 32, 34, nil, 26, 28, 30, 32, + 34, 23, 24, 27, 29, 31, 33, nil, nil, nil, + nil, nil, 22, nil, 26, 28, 30, 32, 34, 23, + 24, 27, 29, 31, 33, nil, nil, nil, nil, nil, + 22, nil, 26, 28, 30, 32, 34 ] + +racc_action_check = [ + 34, 39, 35, 35, 35, 35, 35, 4, 3, 1, + nil, nil, 39, 34, 41, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 2, nil, 41, 41, 41, + 41, 41, 2, nil, nil, nil, nil, 53, 2, nil, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 53, 33, 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, nil, 32, 33, nil, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 32, 16, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, nil, 19, + 16, nil, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 19, 21, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, nil, 22, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 22, 23, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + nil, 24, 23, nil, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 24, 26, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, nil, 27, 26, nil, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 27, 28, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, nil, 29, 28, nil, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 29, 30, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, nil, 31, + 30, nil, 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 31, nil, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 36, 36, 36, 36, 36, 36, + nil, nil, nil, nil, nil, 36, nil, 36, 36, 36, + 36, 36, nil, 36, 40, 40, 40, 40, 40, 40, + 48, 48, 48, 48, nil, nil, nil, 40, 40, 40, + 40, 40, nil, 48, 48, 48, 48, 48, 50, 50, + 50, 50, nil, nil, nil, 9, 9, 9, 9, 9, + 9, 50, 50, 50, 50, 50, 9, 9, 9, 9, + 9, 9, 9, 38, 38, 38, 38, 38, 38, nil, + nil, nil, nil, nil, 38, nil, 38, 38, 38, 38, + 38, 49, 49, 49, 49, 49, 49, nil, nil, nil, + nil, nil, 49, nil, 49, 49, 49, 49, 49, 51, + 51, 51, 51, 51, 51, 42, nil, nil, nil, nil, + 51, nil, 51, 51, 51, 51, 51, nil, 42, 42, + 42, 42, 42, 43, 43, 43, 43, 43, 43, 44, + 44, nil, nil, nil, 43, nil, 43, 43, 43, 43, + 43, nil, 44, 44, 44, 44, 44, 45, 45, 45, + 45, 45, 45, 46, 46, nil, nil, nil, 45, nil, + 45, 45, 45, 45, 45, nil, 46, 46, 46, 46, + 46, 47, 47, 47, 47, 47, 47, nil, nil, nil, + nil, nil, 47, nil, 47, 47, 47, 47, 47, 55, + 55, 55, 55, 55, 55, nil, nil, nil, nil, nil, + 55, nil, 55, 55, 55, 55, 55 ] + +racc_action_pointer = [ + nil, 9, 17, 8, -14, nil, nil, nil, nil, 292, + nil, nil, nil, nil, nil, nil, 69, nil, nil, 81, + nil, 95, 107, 121, 133, nil, 147, 159, 173, 185, + 199, 211, 55, 43, -8, -14, 241, nil, 310, -21, + 261, 11, 352, 370, 376, 394, 400, 418, 267, 328, + 285, 346, nil, 29, nil, 436 ] + +racc_action_default = [ + -2, -35, -1, -35, -20, -21, -22, -23, -4, -35, + -24, -17, -30, -25, -26, -27, -35, -28, -29, -35, + 56, -35, -35, -35, -35, -3, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -19, -35, -32, -33, -35, + -16, -9, -10, -11, -7, -12, -8, -13, -5, -14, + -6, -15, -18, -35, -31, -34 ] + +racc_goto_table = [ + 9, 1, 2, 39, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 35, nil, nil, 36, nil, 38, + 40, 41, 42, nil, 43, 44, 45, 46, 47, 48, + 49, 50, 51, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 55 ] + +racc_goto_check = [ + 3, 1, 2, 6, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, 3, nil, nil, 3, nil, 3, + 3, 3, 3, nil, 3, 3, 3, 3, 3, 3, + 3, 3, 3, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + nil, 3 ] + +racc_goto_pointer = [ + nil, 1, 2, -2, nil, nil, -18 ] + +racc_goto_default = [ + nil, nil, nil, nil, 11, 12, nil ] + +racc_reduce_table = [ + 0, 0, :racc_error, + 1, 35, :_reduce_none, + 0, 36, :_reduce_2, + 3, 36, :_reduce_3, + 2, 36, :_reduce_none, + 3, 37, :_reduce_5, + 3, 37, :_reduce_6, + 3, 37, :_reduce_7, + 3, 37, :_reduce_8, + 3, 37, :_reduce_9, + 3, 37, :_reduce_10, + 3, 37, :_reduce_11, + 3, 37, :_reduce_12, + 3, 37, :_reduce_13, + 3, 37, :_reduce_14, + 3, 37, :_reduce_15, + 3, 37, :_reduce_16, + 1, 37, :_reduce_none, + 3, 38, :_reduce_18, + 2, 38, :_reduce_19, + 1, 38, :_reduce_none, + 1, 38, :_reduce_21, + 1, 38, :_reduce_22, + 1, 38, :_reduce_23, + 1, 38, :_reduce_24, + 1, 38, :_reduce_25, + 1, 38, :_reduce_26, + 1, 38, :_reduce_27, + 1, 38, :_reduce_28, + 1, 38, :_reduce_29, + 1, 38, :_reduce_none, + 4, 39, :_reduce_31, + 3, 39, :_reduce_32, + 1, 40, :_reduce_33, + 3, 40, :_reduce_34 ] + +racc_reduce_n = 35 + +racc_shift_n = 56 + +racc_token_table = { + false => 0, + :error => 1, + :UMINUS => 2, + "^" => 3, + "&" => 4, + "*" => 5, + "/" => 6, + "+" => 7, + "-" => 8, + "<" => 9, + ">" => 10, + "<=" => 11, + ">=" => 12, + "<>" => 13, + "=" => 14, + :EOL => 15, + :LT => 16, + :GT => 17, + :LE => 18, + :GE => 19, + :NE => 20, + "(" => 21, + ")" => 22, + :FUNC => 23, + :NUMBER => 24, + :STRING => 25, + :REF2D => 26, + :REF3D => 27, + :RANGE2D => 28, + :RANGE3D => 29, + :NAME => 30, + :TRUE => 31, + :FALSE => 32, + "," => 33 } + +racc_nt_base = 34 + +racc_use_result_var = true + +Racc_arg = [ + racc_action_table, + racc_action_check, + racc_action_default, + racc_action_pointer, + racc_goto_table, + racc_goto_check, + racc_goto_default, + racc_goto_pointer, + racc_nt_base, + racc_reduce_table, + racc_token_table, + racc_shift_n, + racc_reduce_n, + racc_use_result_var ] + +Racc_token_to_s_table = [ + "$end", + "error", + "UMINUS", + "\"^\"", + "\"&\"", + "\"*\"", + "\"/\"", + "\"+\"", + "\"-\"", + "\"<\"", + "\">\"", + "\"<=\"", + "\">=\"", + "\"<>\"", + "\"=\"", + "EOL", + "LT", + "GT", + "LE", + "GE", + "NE", + "\"(\"", + "\")\"", + "FUNC", + "NUMBER", + "STRING", + "REF2D", + "REF3D", + "RANGE2D", + "RANGE3D", + "NAME", + "TRUE", + "FALSE", + "\",\"", + "$start", + "formula", + "expr_list", + "expr", + "primary", + "funcall", + "args" ] + +Racc_debug_parser = false + +##### State transition tables end ##### + +# reduce 0 omitted + +# reduce 1 omitted + +module_eval(<<'.,.,', 'excelformula.y', 20) + def _reduce_2(val, _values, result) + result = [] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 21) + def _reduce_3(val, _values, result) + result.push val[1], '_arg', '1' + result + end +.,., + +# reduce 4 omitted + +module_eval(<<'.,.,', 'excelformula.y', 24) + def _reduce_5(val, _values, result) + result = [ val[0], val[2], 'ptgAdd' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 25) + def _reduce_6(val, _values, result) + result = [ val[0], val[2], 'ptgSub' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 26) + def _reduce_7(val, _values, result) + result = [ val[0], val[2], 'ptgMul' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 27) + def _reduce_8(val, _values, result) + result = [ val[0], val[2], 'ptgDiv' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 28) + def _reduce_9(val, _values, result) + result = [ val[0], val[2], 'ptgPower' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 29) + def _reduce_10(val, _values, result) + result = [ val[0], val[2], 'ptgConcat' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 30) + def _reduce_11(val, _values, result) + result = [ val[0], val[2], 'ptgLT' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 31) + def _reduce_12(val, _values, result) + result = [ val[0], val[2], 'ptgGT' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 32) + def _reduce_13(val, _values, result) + result = [ val[0], val[2], 'ptgLE' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 33) + def _reduce_14(val, _values, result) + result = [ val[0], val[2], 'ptgGE' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 34) + def _reduce_15(val, _values, result) + result = [ val[0], val[2], 'ptgNE' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 35) + def _reduce_16(val, _values, result) + result = [ val[0], val[2], 'ptgEQ' ] + result + end +.,., + +# reduce 17 omitted + +module_eval(<<'.,.,', 'excelformula.y', 38) + def _reduce_18(val, _values, result) + result = [ val[1], '_arg', '1', 'ptgParen'] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 39) + def _reduce_19(val, _values, result) + result = [ '_num', '-1', val[1], 'ptgMul' ] + result + end +.,., + +# reduce 20 omitted + +module_eval(<<'.,.,', 'excelformula.y', 41) + def _reduce_21(val, _values, result) + result = [ '_num', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 42) + def _reduce_22(val, _values, result) + result = [ '_str', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 43) + def _reduce_23(val, _values, result) + result = [ '_ref2d', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 44) + def _reduce_24(val, _values, result) + result = [ '_ref3d', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 45) + def _reduce_25(val, _values, result) + result = [ '_range2d', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 46) + def _reduce_26(val, _values, result) + result = [ '_range3d', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 47) + def _reduce_27(val, _values, result) + result = [ '_name', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 48) + def _reduce_28(val, _values, result) + result = [ 'ptgBool', '1' ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 49) + def _reduce_29(val, _values, result) + result = [ 'ptgBool', '0' ] + result + end +.,., + +# reduce 30 omitted + +module_eval(<<'.,.,', 'excelformula.y', 52) + def _reduce_31(val, _values, result) + result = [ '_class', val[0], val[2], '_arg', val[2].size.to_s, '_func', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 53) + def _reduce_32(val, _values, result) + result = [ '_func', val[0] ] + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 55) + def _reduce_33(val, _values, result) + result = val + result + end +.,., + +module_eval(<<'.,.,', 'excelformula.y', 56) + def _reduce_34(val, _values, result) + result.push val[2] + result + end +.,., + + def _reduce_none(val, _values, result) + val[0] + end + +end # class ExcelFormulaParser + + +class ExcelFormulaParserError < StandardError #:nodoc: +end + +class Node # :nodoc: + + def exec_list(nodes) + v = nil + nodes.each { |i| v = i.evaluate } + v + end + + def excelformulaparser_error(msg) + raise ExcelFormulaParserError, + "in #{fname}:#{lineno}: #{msg}" + end + +end + +class RootNode < Node # :nodoc: + + def initialize(tree) + @tree = tree + end + + def evaluate + exec_list @tree + end + +end + + +class FuncallNode < Node # :nodoc: + + def initialize(func, args) + @func = func + @args = args + end + + def evaluate + arg = @args.collect {|i| i.evaluate } + out = [] + arg.each { |i| o.push i } + o.push @func + p o + end + +end + +class NumberNode < Node # :nodoc: + + def initialize(val) + @val = val + end + + def evaluate + p @val + end + +end + +class OperateNode < Node # :nodoc: + + def initialize(op, left, right) + @op = op + @left = left + @right = right + end + + def evaluate + o = [] + o.push @left + o.push @right + o.push @op + p o + end +end