# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class C < Racc::Parser module_eval(<<'...end c.y/module_eval...', 'c.y', 64) def initialize() @yydebug=true super end def parse(input) scan_str(input) end def get_label(label) if @labels[label] return make_bytes(@labels[label]) else return [label]+[0]*7 end end def make_bytes(val) bytes=[] 8.times do |i| mask=0xFF << i*8 byte=(val&mask) >> i*8 bytes.push byte end return bytes end def defed_label(label) for index in @bytes.each_index.select {|index| @bytes[index]==label} @bytes[index,8]=make_bytes(@labels[label]) end end ...end c.y/module_eval... ##### State transition tables begin ### racc_action_table = [ 19, 27, 19, 27, 84, 65, 62, 40, 22, 67, 22, 26, 41, 26, 29, 30, 29, 30, 47, 27, 4, 41, 4, 53, 54, 53, 54, 68, 73, 26, 75, 76, 29, 30, 19, 27, 55, 13, 4, 82, 18, 86, 22, 24, 25, 26, 4, 13, 29, 30, 19, 27, 47, 27, 4, 5, 18, 4, 22, 24, 25, 26, 7, 26, 29, 30, 29, 30, 47, 27, 4, 8, 9, 47, 27, 47, 27, 10, 11, 26, 47, 27, 29, 30, 26, 78, 26, 29, 30, 29, 30, 26, 47, 27, 29, 30, 13, 47, 27, 47, 27, 36, 38, 26, 47, 27, 29, 30, 26, 39, 26, 29, 30, 29, 30, 26, 47, 27, 29, 30, 42, 47, 27, 47, 27, 4, 44, 26, 47, 27, 29, 30, 26, 45, 26, 29, 30, 29, 30, 26, 46, 55, 29, 30, 56, 60, 61 ] racc_action_check = [ 46, 46, 79, 79, 79, 46, 44, 20, 46, 48, 79, 46, 20, 79, 46, 46, 79, 79, 27, 27, 46, 49, 79, 33, 33, 71, 71, 50, 59, 27, 63, 64, 27, 27, 13, 13, 72, 75, 27, 77, 13, 83, 13, 13, 13, 13, 0, 85, 13, 13, 15, 15, 56, 56, 13, 1, 15, 2, 15, 15, 15, 15, 3, 56, 15, 15, 56, 56, 60, 60, 15, 4, 5, 39, 39, 40, 40, 7, 10, 60, 66, 66, 60, 60, 39, 66, 40, 39, 39, 40, 40, 66, 68, 68, 66, 66, 11, 41, 41, 45, 45, 14, 16, 68, 30, 30, 68, 68, 41, 19, 45, 41, 41, 45, 45, 30, 53, 53, 30, 30, 21, 54, 54, 55, 55, 22, 23, 53, 29, 29, 53, 53, 54, 24, 55, 54, 54, 55, 55, 29, 25, 34, 29, 29, 35, 42, 43 ] racc_action_pointer = [ 24, 55, 35, 60, 55, 72, nil, 74, nil, nil, 74, 91, nil, 32, 95, 48, 95, nil, nil, 100, -2, 118, 103, 123, 130, 137, nil, 16, nil, 126, 102, nil, nil, 5, 121, 123, nil, nil, nil, 71, 73, 95, 136, 144, 2, 97, -2, nil, 5, 7, 23, nil, nil, 114, 119, 121, 50, nil, nil, 13, 66, nil, nil, 26, 24, nil, 78, nil, 90, nil, nil, 7, 16, nil, nil, 32, nil, 32, nil, 0, nil, nil, nil, 37, nil, 42, nil, nil ] racc_action_default = [ -44, -44, -2, -44, -42, -44, -1, -44, -43, 88, -44, -44, -3, -44, -44, -6, -44, -8, -9, -25, -29, -44, -44, -44, -44, -44, -24, -44, -27, -44, -44, -32, -34, -37, -39, -41, -4, -5, -7, -44, -44, -44, -12, -44, -44, -44, -44, -25, -44, -29, -44, -30, -31, -44, -44, -44, -44, -10, -11, -44, -44, -14, -15, -44, -44, -17, -44, -26, -44, -35, -36, -38, -40, -28, -13, -44, -16, -44, -19, -44, -33, -22, -18, -44, -21, -44, -20, -23 ] racc_goto_table = [ 12, 20, 48, 20, 51, 52, 64, 79, 1, 3, 6, 3, 85, 66, 57, 58, 59, 14, 71, 37, 63, 72, nil, nil, nil, nil, nil, nil, 69, 70, nil, 43, nil, nil, 20, 74, 50, nil, nil, 83, nil, 77, nil, 80, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 81, nil, nil, 20, nil, nil, nil, nil, nil, nil, 87 ] racc_goto_check = [ 4, 10, 9, 10, 16, 16, 7, 12, 1, 3, 1, 3, 13, 11, 9, 9, 9, 5, 17, 5, 9, 18, nil, nil, nil, nil, nil, nil, 16, 16, nil, 3, nil, nil, 10, 9, 3, nil, nil, 7, nil, 9, nil, 16, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 4, nil, nil, 10, nil, nil, nil, nil, nil, nil, 4 ] racc_goto_pointer = [ nil, 8, nil, 9, -11, 4, nil, -40, nil, -25, -12, -33, -59, -67, nil, nil, -25, -37, -35, nil ] racc_goto_default = [ nil, nil, 2, 21, nil, nil, 15, 16, 17, 23, 49, nil, nil, nil, 28, 31, 32, 33, 34, 35 ] racc_reduce_table = [ 0, 0, :racc_error, 2, 24, :_reduce_1, 1, 24, :_reduce_2, 5, 25, :_reduce_3, 3, 27, :_reduce_4, 2, 28, :_reduce_5, 1, 28, :_reduce_6, 2, 29, :_reduce_7, 1, 29, :_reduce_8, 1, 29, :_reduce_9, 3, 30, :_reduce_10, 3, 30, :_reduce_11, 2, 30, :_reduce_12, 4, 30, :_reduce_13, 3, 30, :_reduce_14, 3, 30, :_reduce_15, 2, 34, :_reduce_16, 1, 34, :_reduce_17, 2, 35, :_reduce_18, 1, 35, :_reduce_19, 2, 36, :_reduce_20, 1, 36, :_reduce_21, 5, 31, :_reduce_22, 6, 31, :_reduce_23, 1, 37, :_reduce_24, 1, 37, :_reduce_25, 3, 37, :_reduce_26, 1, 33, :_reduce_none, 4, 33, :_reduce_28, 1, 38, :_reduce_none, 2, 38, :_reduce_30, 2, 38, :_reduce_31, 1, 39, :_reduce_none, 4, 39, :_reduce_33, 1, 40, :_reduce_none, 3, 40, :_reduce_35, 3, 40, :_reduce_36, 1, 41, :_reduce_none, 3, 41, :_reduce_38, 1, 42, :_reduce_none, 3, 42, :_reduce_40, 1, 32, :_reduce_none, 1, 26, :_reduce_42, 2, 26, :_reduce_43 ] racc_reduce_n = 44 racc_shift_n = 88 racc_token_table = { false => 0, :error => 1, :IDENT => 2, :LPAREN => 3, :RPAREN => 4, :LCURL => 5, :RCURL => 6, :SEMICOLON => 7, :ASM => 8, :EQUAL => 9, :EXTERN => 10, :WHILE => 11, :FOR => 12, :NUM => 13, :LBRACK => 14, :RBRACK => 15, :ASTERISK => 16, :TILDE => 17, :PLUS => 18, :MINUS => 19, :GT => 20, :PIPE => 21, :TYPE => 22 } racc_nt_base = 23 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", "IDENT", "LPAREN", "RPAREN", "LCURL", "RCURL", "SEMICOLON", "ASM", "EQUAL", "EXTERN", "WHILE", "FOR", "NUM", "LBRACK", "RBRACK", "ASTERISK", "TILDE", "PLUS", "MINUS", "GT", "PIPE", "TYPE", "$start", "program", "func", "type", "block", "lines", "line", "stmt", "stmtnosemi", "expr", "postfixexp", "optstmtsemi", "optexprsemi", "optstmtparen", "factor", "unaryexp", "castexp", "addexp", "cmpexp", "bitor" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted module_eval(<<'.,.,', 'c.y', 2) def _reduce_1(val, _values, result) result=[val[0],val[1]].flatten result end .,., module_eval(<<'.,.,', 'c.y', 2) def _reduce_2(val, _values, result) result=[val[0]] result end .,., module_eval(<<'.,.,', 'c.y', 4) def _reduce_3(val, _values, result) result={:name=>val[1],:rtype=>val[0],:code=>val[4]} result end .,., module_eval(<<'.,.,', 'c.y', 6) def _reduce_4(val, _values, result) result=val[1] result end .,., module_eval(<<'.,.,', 'c.y', 8) def _reduce_5(val, _values, result) result=[val[0],val[1]].flatten result end .,., module_eval(<<'.,.,', 'c.y', 8) def _reduce_6(val, _values, result) result=[val[0]] result end .,., module_eval(<<'.,.,', 'c.y', 10) def _reduce_7(val, _values, result) result=val[0] result end .,., module_eval(<<'.,.,', 'c.y', 11) def _reduce_8(val, _values, result) result=val[0] result end .,., module_eval(<<'.,.,', 'c.y', 12) def _reduce_9(val, _values, result) result={:type=>:asmline,:line=>val[0].chop} result end .,., module_eval(<<'.,.,', 'c.y', 14) def _reduce_10(val, _values, result) result={:type=>:set,:var=>val[0],:expr=>val[2],:line=>@lineno} result end .,., module_eval(<<'.,.,', 'c.y', 15) def _reduce_11(val, _values, result) result={:type=>:arrayset,:getexpr=>val[0],:expr=>val[2]} result end .,., module_eval(<<'.,.,', 'c.y', 16) def _reduce_12(val, _values, result) result={:type=>:vardec,:var=>val[1],:typ=>val[0]} result end .,., module_eval(<<'.,.,', 'c.y', 17) def _reduce_13(val, _values, result) result={:type=>:vardec,:var=>val[1],:typ=>val[0],:init=>val[3]} result end .,., module_eval(<<'.,.,', 'c.y', 18) def _reduce_14(val, _values, result) result={:type=>:vardec,:var=>val[2],:typ=>val[1],:extern=>true} result end .,., module_eval(<<'.,.,', 'c.y', 19) def _reduce_15(val, _values, result) result={:type=>:call,:addr=>val[0]} result end .,., module_eval(<<'.,.,', 'c.y', 21) def _reduce_16(val, _values, result) result=val[0] result end .,., module_eval(<<'.,.,', 'c.y', 22) def _reduce_17(val, _values, result) result=nil result end .,., module_eval(<<'.,.,', 'c.y', 24) def _reduce_18(val, _values, result) result=val[0] result end .,., module_eval(<<'.,.,', 'c.y', 25) def _reduce_19(val, _values, result) result=nil result end .,., module_eval(<<'.,.,', 'c.y', 27) def _reduce_20(val, _values, result) result=val[0] result end .,., module_eval(<<'.,.,', 'c.y', 28) def _reduce_21(val, _values, result) result=nil result end .,., module_eval(<<'.,.,', 'c.y', 30) def _reduce_22(val, _values, result) result={:type=>:while,:cond=>val[2],:code=>val[4]} result end .,., module_eval(<<'.,.,', 'c.y', 31) def _reduce_23(val, _values, result) result={:type=>:for,:init=>val[2],:cond=>val[3],:post=>val[4],:code=>val[5]} result end .,., module_eval(<<'.,.,', 'c.y', 33) def _reduce_24(val, _values, result) result={:type=>:num,:val=>val[0]} result end .,., module_eval(<<'.,.,', 'c.y', 34) def _reduce_25(val, _values, result) result={:type=>:var,:var=>val[0],:line=>@lineno} result end .,., module_eval(<<'.,.,', 'c.y', 35) def _reduce_26(val, _values, result) result=val[1] result end .,., # reduce 27 omitted module_eval(<<'.,.,', 'c.y', 38) def _reduce_28(val, _values, result) result={:type=>:array,:off=>val[2],:base=>val[0]} result end .,., # reduce 29 omitted module_eval(<<'.,.,', 'c.y', 41) def _reduce_30(val, _values, result) result={:type=>:deref,:addr=>val[1]} result end .,., module_eval(<<'.,.,', 'c.y', 42) def _reduce_31(val, _values, result) result={:type=>:inv,:val=>val[1]} result end .,., # reduce 32 omitted module_eval(<<'.,.,', 'c.y', 45) def _reduce_33(val, _values, result) result={:type=>:cast,:typ=>val[1],:expr=>val[3]} result end .,., # reduce 34 omitted module_eval(<<'.,.,', 'c.y', 48) def _reduce_35(val, _values, result) result={:type=>:add,:v1=>val[0],:v2=>val[2]} result end .,., module_eval(<<'.,.,', 'c.y', 49) def _reduce_36(val, _values, result) result={:type=>:sub,:v1=>val[0],:v2=>val[2]} result end .,., # reduce 37 omitted module_eval(<<'.,.,', 'c.y', 52) def _reduce_38(val, _values, result) result={:type=>:gt,:v1=>val[0],:v2=>val[2]} result end .,., # reduce 39 omitted module_eval(<<'.,.,', 'c.y', 55) def _reduce_40(val, _values, result) result={:type=>:bitor,:v1=>val[0],:v2=>val[2]} result end .,., # reduce 41 omitted module_eval(<<'.,.,', 'c.y', 58) def _reduce_42(val, _values, result) result={:type_type=>:scalar,:type=>val[0]} result end .,., module_eval(<<'.,.,', 'c.y', 59) def _reduce_43(val, _values, result) result={:type_type=>:pointer,:type=>val[0]} result end .,., def _reduce_none(val, _values, result) val[0] end end # class C