-
Notifications
You must be signed in to change notification settings - Fork 6
/
Instruction.php
66 lines (63 loc) · 1.72 KB
/
Instruction.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
/*
* DecMcpe
*
* Copyright (C) 2016 PEMapModder
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PEMapModder
*/
class Instruction{
/** @var string */
public $offsetHex;
/** @var int */
public $offset;
/** @var string */
public $byteCode;
/** @var string */
public $instr;
/** @var string */
public $cond;
/** @var string */
public $args;
public function __construct($line){
if(preg_match(/** @lang RegExp */
'%([a-f0-9]+):[\t ]+([0-9a-f]{4}( [0-9a-f]{4})?)[\t ]+([a-z]+).*<illegal .*$%', $line, $match)
){
$this->offsetHex = $match[1];
$this->offset = hexdec($this->offsetHex);
$this->byteCode = $match[2];
$this->instr = $match[4];
$this->cond = "";
$this->args = "";
return;
}
if(preg_match(/** @lang RegExp */
'%([a-f0-9]+):[\t ]+([0-9a-f]{4}( [0-9a-f]{4})?).*; <UNDEFINED>.*$%', $line, $match)
){
$this->offsetHex = $match[1];
$this->offset = hexdec($this->offsetHex);
$this->byteCode = $match[2];
$this->instr = "undefined";
$this->cond = "";
$this->args = "";
return;
}
if(!preg_match(/** @lang RegExp */
'%([a-f0-9]+):[\t ]+([0-9a-f]{4}( [0-9a-f]{4})?)[\t ]+([a-z]+)(\.([a-z0-9]))?([\t ]+([^;]+)(;.*)?)?$%', $line, $match)
){
echo $line, PHP_EOL;
throw new InvalidArgumentException("Not an instruction");
}
$this->offsetHex = $match[1];
$this->offset = hexdec($this->offsetHex);
$this->byteCode = $match[2];
$this->instr = strtolower($match[4]);
$this->cond = $match[6] ?? "";
$this->args = $match[8] ?? "";
}
}