Class: ASMREPL::Parser

Inherits:
Racc::Parser
  • Object
show all
Defined in:
lib/asmrepl/parser.rb,
lib/asmrepl/parser.tab.rb

Constant Summary collapse

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",
"on_lbracket",
"on_rbracket",
"on_int",
"on_comma",
"qword",
"ptr",
"word",
"dword",
"byte",
"plus",
"minus",
"on_instruction",
"on_register",
"on_rip",
"$start",
"command",
"instruction",
"register",
"int",
"memory",
"memsize" ]
Racc_debug_parser =
false

Instance Method Summary collapse

Constructor Details

#initializeParser

Returns a new instance of Parser.



70
71
72
73
# File 'lib/asmrepl/parser.rb', line 70

def initialize
  @registers = Set.new Fisk::Registers.constants.map(&:to_s)
  @instructions = Set.new Fisk::Instructions.constants.map(&:to_s)
end

Instance Method Details

#_reduce_1(val, _values, result) ⇒ Object

reduce 0 omitted



162
163
164
165
# File 'lib/asmrepl/parser.tab.rb', line 162

def _reduce_1(val, _values, result)
 result = new_command(val[0], val[1], val[3])
    result
end

#_reduce_10(val, _values, result) ⇒ Object



207
208
209
210
# File 'lib/asmrepl/parser.tab.rb', line 207

def _reduce_10(val, _values, result)
 result = [:instruction, val[0]]
    result
end

#_reduce_11(val, _values, result) ⇒ Object



212
213
214
215
# File 'lib/asmrepl/parser.tab.rb', line 212

def _reduce_11(val, _values, result)
 result = [:register, val[0]]
    result
end

#_reduce_12(val, _values, result) ⇒ Object



217
218
219
220
# File 'lib/asmrepl/parser.tab.rb', line 217

def _reduce_12(val, _values, result)
 result = [:int, Integer(val[0])]
    result
end

#_reduce_13(val, _values, result) ⇒ Object



222
223
224
225
# File 'lib/asmrepl/parser.tab.rb', line 222

def _reduce_13(val, _values, result)
 result = [:int, Integer(val[1])]
    result
end

#_reduce_14(val, _values, result) ⇒ Object



227
228
229
230
# File 'lib/asmrepl/parser.tab.rb', line 227

def _reduce_14(val, _values, result)
 result = [:int, -Integer(val[1])]
    result
end

#_reduce_15(val, _values, result) ⇒ Object



232
233
234
235
# File 'lib/asmrepl/parser.tab.rb', line 232

def _reduce_15(val, _values, result)
 result = [:memory, Fisk::M64.new(val[1].last, 0)]
    result
end

#_reduce_16(val, _values, result) ⇒ Object



237
238
239
240
# File 'lib/asmrepl/parser.tab.rb', line 237

def _reduce_16(val, _values, result)
 result = [:memory, Fisk::Registers::Rip.new(0)]
    result
end

#_reduce_17(val, _values, result) ⇒ Object



242
243
244
245
# File 'lib/asmrepl/parser.tab.rb', line 242

def _reduce_17(val, _values, result)
 result = [:memory, Fisk::Registers::Rip.new(val[2].last)]
    result
end

#_reduce_18(val, _values, result) ⇒ Object



247
248
249
250
# File 'lib/asmrepl/parser.tab.rb', line 247

def _reduce_18(val, _values, result)
 result = [:memory, Fisk::Registers::Rip.new(0)]
    result
end

#_reduce_19(val, _values, result) ⇒ Object



252
253
254
255
# File 'lib/asmrepl/parser.tab.rb', line 252

def _reduce_19(val, _values, result)
 result = [:memory, Fisk::Registers::Rip.new(val[3].last)]
    result
end

#_reduce_2(val, _values, result) ⇒ Object



167
168
169
170
# File 'lib/asmrepl/parser.tab.rb', line 167

def _reduce_2(val, _values, result)
 result = new_command(val[0], val[1], val[3])
    result
end

#_reduce_20(val, _values, result) ⇒ Object



257
258
259
260
# File 'lib/asmrepl/parser.tab.rb', line 257

def _reduce_20(val, _values, result)
 result = [:memory, Fisk::M64.new(val[1].last, val[2].last)]
    result
end

#_reduce_21(val, _values, result) ⇒ Object



262
263
264
265
# File 'lib/asmrepl/parser.tab.rb', line 262

def _reduce_21(val, _values, result)
 result = [:memory, val[0].new(val[2].last, 0)]
    result
end

#_reduce_22(val, _values, result) ⇒ Object



267
268
269
270
# File 'lib/asmrepl/parser.tab.rb', line 267

def _reduce_22(val, _values, result)
 result = [:memory, val[0].new(val[2].last, val[3].last)]
    result
end

#_reduce_23(val, _values, result) ⇒ Object



272
273
274
275
# File 'lib/asmrepl/parser.tab.rb', line 272

def _reduce_23(val, _values, result)
 result = Fisk::M64
    result
end

#_reduce_24(val, _values, result) ⇒ Object



277
278
279
280
# File 'lib/asmrepl/parser.tab.rb', line 277

def _reduce_24(val, _values, result)
 result = Fisk::M32
    result
end

#_reduce_25(val, _values, result) ⇒ Object



282
283
284
285
# File 'lib/asmrepl/parser.tab.rb', line 282

def _reduce_25(val, _values, result)
 result = Fisk::M16
    result
end

#_reduce_26(val, _values, result) ⇒ Object



287
288
289
290
# File 'lib/asmrepl/parser.tab.rb', line 287

def _reduce_26(val, _values, result)
 result = Fisk::M8
    result
end

#_reduce_3(val, _values, result) ⇒ Object



172
173
174
175
# File 'lib/asmrepl/parser.tab.rb', line 172

def _reduce_3(val, _values, result)
 result = new_command(val[0], val[1], val[3])
    result
end

#_reduce_4(val, _values, result) ⇒ Object



177
178
179
180
# File 'lib/asmrepl/parser.tab.rb', line 177

def _reduce_4(val, _values, result)
 result = new_command(val[0], val[1], val[3])
    result
end

#_reduce_5(val, _values, result) ⇒ Object



182
183
184
185
# File 'lib/asmrepl/parser.tab.rb', line 182

def _reduce_5(val, _values, result)
 result = new_command(val[0], val[1], val[3])
    result
end

#_reduce_6(val, _values, result) ⇒ Object



187
188
189
190
# File 'lib/asmrepl/parser.tab.rb', line 187

def _reduce_6(val, _values, result)
 result = new_tuple(val[0], val[1])
    result
end

#_reduce_7(val, _values, result) ⇒ Object



192
193
194
195
# File 'lib/asmrepl/parser.tab.rb', line 192

def _reduce_7(val, _values, result)
 result = new_tuple(val[0], val[1])
    result
end

#_reduce_8(val, _values, result) ⇒ Object



197
198
199
200
# File 'lib/asmrepl/parser.tab.rb', line 197

def _reduce_8(val, _values, result)
 result = new_tuple(val[0], val[1])
    result
end

#_reduce_9(val, _values, result) ⇒ Object



202
203
204
205
# File 'lib/asmrepl/parser.tab.rb', line 202

def _reduce_9(val, _values, result)
 result = new_single(val[0])
    result
end

#_reduce_none(val, _values, result) ⇒ Object



292
293
294
# File 'lib/asmrepl/parser.tab.rb', line 292

def _reduce_none(val, _values, result)
  val[0]
end

#new_command(mnemonic, arg1, arg2) ⇒ Object



80
81
82
# File 'lib/asmrepl/parser.rb', line 80

def new_command mnemonic, arg1, arg2
  [:command, mnemonic, arg1, arg2]
end

#new_single(mnemonic) ⇒ Object



88
89
90
# File 'lib/asmrepl/parser.rb', line 88

def new_single mnemonic
  [:command, mnemonic]
end

#new_tuple(mnemonic, arg1) ⇒ Object



84
85
86
# File 'lib/asmrepl/parser.rb', line 84

def new_tuple mnemonic, arg1
  [:command, mnemonic, arg1]
end

#next_tokenObject



92
93
94
95
96
97
# File 'lib/asmrepl/parser.rb', line 92

def next_token
  while tok = @lexer.next_token
    next if tok.first == :on_sp
    return tok
  end
end

#parse(input) ⇒ Object



75
76
77
78
# File 'lib/asmrepl/parser.rb', line 75

def parse input
  @lexer = Lexer.new input
  do_parse
end