592 lines
15 KiB
Ruby
592 lines
15 KiB
Ruby
#
|
|
# DO NOT MODIFY!!!!
|
|
# This file is automatically generated by Racc 1.4.14
|
|
# from Racc grammer file "".
|
|
#
|
|
|
|
require 'racc/parser.rb'
|
|
class T64 < Racc::Parser
|
|
|
|
module_eval(<<'...end t64.y/module_eval...', 't64.y', 64)
|
|
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)
|
|
newcode=[]
|
|
for line in @code
|
|
for index in line.each_index.select {|index| line[index]==label}
|
|
line[index,8]=make_bytes(@labels[label])
|
|
end
|
|
newcode.push line
|
|
end
|
|
@code=newcode
|
|
end
|
|
...end t64.y/module_eval...
|
|
##### State transition tables begin ###
|
|
|
|
racc_action_table = [
|
|
14, 86, 46, 84, 47, 85, 15, 16, 17, 43,
|
|
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
|
|
28, 29, 30, 31, 14, 72, 82, 70, 83, 71,
|
|
15, 16, 17, 44, 18, 19, 20, 21, 22, 23,
|
|
24, 25, 26, 27, 28, 29, 30, 31, 75, 67,
|
|
45, 103, 68, 76, 104, 74, 92, 50, -4, 93,
|
|
6, 7, 48, 51, 49, 6, 7, 6, 7, 52,
|
|
53, 55, 56, 57, 58, 59, 60, 61, 62, 63,
|
|
64, 65, 66, 69, 73, 77, 78, 79, 80, 81,
|
|
87, 88, 89, 90, 91, 94, 95, 96, 97, 98,
|
|
99, 100, 101, 102, 105, 106, 107, 108, 109, 110,
|
|
111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
|
|
121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
|
|
131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
|
|
141, 142, 143, 144, 3, 145, 9, 10, -7, 12,
|
|
-10, 35, 36, 37, 38, 39, 40, 41, 42 ]
|
|
|
|
racc_action_check = [
|
|
8, 64, 25, 64, 25, 64, 8, 8, 8, 22,
|
|
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
|
8, 8, 8, 8, 34, 55, 63, 55, 63, 55,
|
|
34, 34, 34, 23, 34, 34, 34, 34, 34, 34,
|
|
34, 34, 34, 34, 34, 34, 34, 34, 57, 48,
|
|
24, 84, 48, 57, 84, 57, 70, 27, 10, 70,
|
|
10, 10, 26, 29, 26, 11, 11, 2, 2, 30,
|
|
31, 35, 36, 37, 38, 39, 40, 41, 42, 43,
|
|
44, 45, 46, 50, 56, 58, 59, 60, 61, 62,
|
|
65, 66, 67, 68, 69, 72, 76, 77, 78, 79,
|
|
80, 81, 82, 83, 85, 86, 91, 92, 93, 94,
|
|
95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
|
|
105, 106, 107, 110, 112, 113, 114, 115, 116, 118,
|
|
121, 122, 125, 126, 127, 128, 129, 133, 134, 135,
|
|
136, 138, 139, 140, 1, 141, 3, 5, 6, 7,
|
|
12, 14, 15, 16, 17, 18, 19, 20, 21 ]
|
|
|
|
racc_action_pointer = [
|
|
nil, 144, 65, 146, nil, 145, 148, 145, -5, nil,
|
|
58, 63, 148, nil, 145, 146, 147, 148, 149, 150,
|
|
151, 152, 3, 27, 42, -6, 54, 51, nil, 53,
|
|
59, 60, nil, nil, 19, 64, 65, 66, 67, 68,
|
|
69, 70, 71, 72, 73, 78, 79, nil, 46, nil,
|
|
76, nil, nil, nil, nil, 19, 74, 45, 79, 80,
|
|
81, 82, 83, 18, -5, 81, 82, 83, 84, 86,
|
|
53, nil, 87, nil, nil, nil, 93, 90, 91, 92,
|
|
93, 94, 96, 95, 48, 96, 97, nil, nil, nil,
|
|
nil, 103, 98, 99, 103, 101, 105, 102, 107, 104,
|
|
109, 107, 114, 109, 110, 117, 115, 113, nil, nil,
|
|
114, nil, 117, 118, 119, 120, 121, nil, 120, nil,
|
|
nil, 121, 122, nil, nil, 118, 119, 120, 121, 122,
|
|
nil, nil, nil, 130, 131, 132, 133, nil, 131, 132,
|
|
133, 135, nil, nil, nil, nil ]
|
|
|
|
racc_action_default = [
|
|
-1, -43, -11, -43, -2, -43, -5, -43, -43, 146,
|
|
-11, -11, -8, -12, -43, -43, -43, -43, -43, -43,
|
|
-43, -43, -43, -43, -43, -43, -43, -43, -39, -43,
|
|
-43, -43, -3, -6, -43, -43, -43, -43, -43, -43,
|
|
-43, -43, -43, -43, -43, -43, -43, -37, -43, -36,
|
|
-43, -40, -41, -42, -9, -43, -43, -43, -43, -43,
|
|
-43, -43, -43, -43, -43, -43, -43, -43, -43, -43,
|
|
-43, -14, -43, -17, -18, -19, -43, -43, -43, -43,
|
|
-43, -43, -43, -43, -43, -43, -43, -32, -33, -34,
|
|
-35, -43, -43, -43, -43, -43, -43, -43, -43, -43,
|
|
-43, -43, -43, -43, -43, -43, -43, -43, -13, -16,
|
|
-43, -20, -43, -43, -43, -43, -43, -26, -43, -28,
|
|
-31, -43, -43, -38, -15, -43, -43, -43, -43, -43,
|
|
-27, -29, -30, -43, -43, -43, -43, -25, -43, -43,
|
|
-43, -43, -21, -22, -23, -24 ]
|
|
|
|
racc_goto_table = [
|
|
13, 4, 1, 2, 11, 34, nil, nil, nil, 32,
|
|
33, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
nil, nil, nil, nil, nil, nil, 54 ]
|
|
|
|
racc_goto_check = [
|
|
6, 2, 1, 3, 5, 7, nil, nil, nil, 2,
|
|
2, nil, nil, nil, nil, nil, nil, nil, nil, nil,
|
|
nil, nil, nil, nil, nil, nil, 6 ]
|
|
|
|
racc_goto_pointer = [
|
|
nil, 2, -1, 3, nil, -2, -8, -7, nil ]
|
|
|
|
racc_goto_default = [
|
|
nil, nil, nil, nil, 5, nil, nil, nil, 8 ]
|
|
|
|
racc_reduce_table = [
|
|
0, 0, :racc_error,
|
|
0, 32, :_reduce_1,
|
|
2, 30, :_reduce_2,
|
|
3, 31, :_reduce_3,
|
|
2, 31, :_reduce_4,
|
|
0, 34, :_reduce_5,
|
|
3, 31, :_reduce_6,
|
|
1, 31, :_reduce_7,
|
|
0, 36, :_reduce_8,
|
|
4, 33, :_reduce_9,
|
|
2, 33, :_reduce_10,
|
|
0, 37, :_reduce_11,
|
|
2, 33, :_reduce_12,
|
|
6, 35, :_reduce_13,
|
|
4, 35, :_reduce_14,
|
|
7, 35, :_reduce_15,
|
|
6, 35, :_reduce_16,
|
|
4, 35, :_reduce_17,
|
|
4, 35, :_reduce_18,
|
|
4, 35, :_reduce_19,
|
|
6, 35, :_reduce_20,
|
|
10, 35, :_reduce_21,
|
|
10, 35, :_reduce_22,
|
|
10, 35, :_reduce_23,
|
|
10, 35, :_reduce_24,
|
|
8, 35, :_reduce_25,
|
|
6, 35, :_reduce_26,
|
|
7, 35, :_reduce_27,
|
|
6, 35, :_reduce_28,
|
|
7, 35, :_reduce_29,
|
|
7, 35, :_reduce_30,
|
|
6, 35, :_reduce_31,
|
|
4, 35, :_reduce_32,
|
|
4, 35, :_reduce_33,
|
|
4, 35, :_reduce_34,
|
|
4, 35, :_reduce_35,
|
|
2, 35, :_reduce_36,
|
|
2, 35, :_reduce_37,
|
|
6, 35, :_reduce_38,
|
|
1, 35, :_reduce_39,
|
|
2, 35, :_reduce_40,
|
|
2, 35, :_reduce_41,
|
|
2, 35, :_reduce_42 ]
|
|
|
|
racc_reduce_n = 43
|
|
|
|
racc_shift_n = 146
|
|
|
|
racc_token_table = {
|
|
false => 0,
|
|
:error => 1,
|
|
:NEWLINE => 2,
|
|
:IDENT => 3,
|
|
:COLON => 4,
|
|
:LDB => 5,
|
|
:REG => 6,
|
|
:COMMA => 7,
|
|
:LPAREN => 8,
|
|
:RPAREN => 9,
|
|
:NUM => 10,
|
|
:LDW => 11,
|
|
:LD => 12,
|
|
:ARB => 13,
|
|
:AROP => 14,
|
|
:ARIB => 15,
|
|
:ARW => 16,
|
|
:ARI => 17,
|
|
:AR => 18,
|
|
:ST => 19,
|
|
:STB => 20,
|
|
:JNC => 21,
|
|
:JNZ => 22,
|
|
:JMP => 23,
|
|
:JST => 24,
|
|
:HLT => 25,
|
|
:DB => 26,
|
|
:DQW => 27,
|
|
:ORG => 28 }
|
|
|
|
racc_nt_base = 29
|
|
|
|
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",
|
|
"NEWLINE",
|
|
"IDENT",
|
|
"COLON",
|
|
"LDB",
|
|
"REG",
|
|
"COMMA",
|
|
"LPAREN",
|
|
"RPAREN",
|
|
"NUM",
|
|
"LDW",
|
|
"LD",
|
|
"ARB",
|
|
"AROP",
|
|
"ARIB",
|
|
"ARW",
|
|
"ARI",
|
|
"AR",
|
|
"ST",
|
|
"STB",
|
|
"JNC",
|
|
"JNZ",
|
|
"JMP",
|
|
"JST",
|
|
"HLT",
|
|
"DB",
|
|
"DQW",
|
|
"ORG",
|
|
"$start",
|
|
"start",
|
|
"program",
|
|
"@1",
|
|
"line",
|
|
"@2",
|
|
"ins",
|
|
"@3",
|
|
"@4" ]
|
|
|
|
Racc_debug_parser = false
|
|
|
|
##### State transition tables end #####
|
|
|
|
# reduce 0 omitted
|
|
|
|
module_eval(<<'.,.,', 't64.y', 3)
|
|
def _reduce_1(val, _values, result)
|
|
@code=[]
|
|
@labels={}
|
|
@ops=["NOT","AND","OR","ADD","SUB","MULL","MULH","MULUL","MULUH",
|
|
"DIVL","DIVH","DIVUL","DIVUH","NEG","CMP","ADC","SBB"]
|
|
@pos=0
|
|
@backpatches={}
|
|
@linestarts=[]
|
|
@lineends=[]
|
|
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 11)
|
|
def _reduce_2(val, _values, result)
|
|
return @code,@labels,@linestarts,@lineends
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 12)
|
|
def _reduce_3(val, _values, result)
|
|
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 12)
|
|
def _reduce_4(val, _values, result)
|
|
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 12)
|
|
def _reduce_5(val, _values, result)
|
|
@linestarts.push @pos;@lineends.push @pos
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 12)
|
|
def _reduce_6(val, _values, result)
|
|
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 12)
|
|
def _reduce_7(val, _values, result)
|
|
@linestarts.push @pos;@lineends.push @pos
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 13)
|
|
def _reduce_8(val, _values, result)
|
|
@startpos=@pos
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 14)
|
|
def _reduce_9(val, _values, result)
|
|
@labels[val[0]]=@startpos
|
|
defed_label(val[0])
|
|
@linestarts.push @startpos
|
|
@lineends.push @pos
|
|
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 20)
|
|
def _reduce_10(val, _values, result)
|
|
@labels[val[0]]=@pos
|
|
defed_label(val[0])
|
|
@linestarts.push @pos
|
|
@lineends.push @pos
|
|
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 25)
|
|
def _reduce_11(val, _values, result)
|
|
@startpos=@pos
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 26)
|
|
def _reduce_12(val, _values, result)
|
|
@linestarts.push @startpos
|
|
@lineends.push @pos
|
|
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 29)
|
|
def _reduce_13(val, _values, result)
|
|
@code.push([0x0,0x10|val[1],0x0,*get_label(val[4])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 30)
|
|
def _reduce_14(val, _values, result)
|
|
@code.push([0x0,val[1],0x0,*val[3][0,1]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 31)
|
|
def _reduce_15(val, _values, result)
|
|
@code.push([0x0,0x30|val[1],val[3]<<4|val[5],*val[3,1]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 32)
|
|
def _reduce_16(val, _values, result)
|
|
@code.push([0x0,0x20|val[1],val[4]<<4]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 33)
|
|
def _reduce_17(val, _values, result)
|
|
@code.push([0x1,val[1],0x0,*val[3][0,2]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 34)
|
|
def _reduce_18(val, _values, result)
|
|
@code.push([0x03,val[1],0x0,*val[3]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 35)
|
|
def _reduce_19(val, _values, result)
|
|
@code.push([0x03,val[1],0x0,*get_label(val[3])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 36)
|
|
def _reduce_20(val, _values, result)
|
|
@code.push([0x03,0x10|val[1],0x0,*get_label(val[4])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 37)
|
|
def _reduce_21(val, _values, result)
|
|
@code.push([0x8,0x70|val[1],(val[3]<<4)|val[5],@ops.index(val[7])|(val[9][0]<<7)]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 38)
|
|
def _reduce_22(val, _values, result)
|
|
@code.push([0x8,0x80|val[1],(val[3]<<4),@ops.index(val[7]),val[5][0]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 39)
|
|
def _reduce_23(val, _values, result)
|
|
@code.push([0x9,0x70|val[1],(val[3]<<4)|val[5],@ops.index(val[7])|(val[9][0]<<7)]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 40)
|
|
def _reduce_24(val, _values, result)
|
|
@code.push([0xb,0x80|val[1],(val[3]<<4),@ops.index(val[7])|((val[9][0])<<7),*val[5]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 41)
|
|
def _reduce_25(val, _values, result)
|
|
@code.push([0xb,0x70|val[1],(val[3]<<4)|val[5],@ops.index(val[7])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 42)
|
|
def _reduce_26(val, _values, result)
|
|
@code.push([0x7,0x20,(val[4]<<4|val[1])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 43)
|
|
def _reduce_27(val, _values, result)
|
|
@code.push([0x7,0x40,val[1],*get_label(val[5]),*val[3][0,4]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 44)
|
|
def _reduce_28(val, _values, result)
|
|
@code.push([0x4,0x10,val[1],*get_label(val[4])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 45)
|
|
def _reduce_29(val, _values, result)
|
|
@code.push([0x4,0x90,val[1],*get_label(val[5]),*val[3][0,4]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 46)
|
|
def _reduce_30(val, _values, result)
|
|
@code.push([0x4,0x20,(val[5]<<4|val[1]),val[3]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 47)
|
|
def _reduce_31(val, _values, result)
|
|
@code.push([0x4,0x20,(val[4]<<4)|val[1]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 48)
|
|
def _reduce_32(val, _values, result)
|
|
@code.push([0x10,0x10,0x0,*get_label(val[2])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 49)
|
|
def _reduce_33(val, _values, result)
|
|
@code.push([0xe,0x10,0x0,*get_label(val[2])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 50)
|
|
def _reduce_34(val, _values, result)
|
|
@code.push([0xc,0x10,0x0,*get_label(val[2])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 51)
|
|
def _reduce_35(val, _values, result)
|
|
@code.push([0xc,0x20,val[2]<<4]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 52)
|
|
def _reduce_36(val, _values, result)
|
|
@code.push([0xc,0x10,0x0,*val[1]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 53)
|
|
def _reduce_37(val, _values, result)
|
|
@code.push([0xe,0x10,0x0,*val[1]]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 54)
|
|
def _reduce_38(val, _values, result)
|
|
@code.push([0x11,0x10|val[1],0x0,*get_label(val[4])]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 55)
|
|
def _reduce_39(val, _values, result)
|
|
@code.push([0xFF]);@pos+=0x10
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 56)
|
|
def _reduce_40(val, _values, result)
|
|
@code.push([*val[1][0,1]]);@pos+=1
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 57)
|
|
def _reduce_41(val, _values, result)
|
|
@code.push([*val[1]]);@pos+=8
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
module_eval(<<'.,.,', 't64.y', 58)
|
|
def _reduce_42(val, _values, result)
|
|
@pos=val[1].pack("C*").unpack("Q<")
|
|
result
|
|
end
|
|
.,.,
|
|
|
|
def _reduce_none(val, _values, result)
|
|
val[0]
|
|
end
|
|
|
|
end # class T64
|