543 lines
13 KiB
Ruby
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
|