2020-06-21 14:14:57 -05:00

543 lines
13 KiB
Ruby

#
# 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