'#[-+]?(?:0[xX][0-9A-Fa-f]+|0[bB][01]+|\d+(?:\.\d+)?)', 'class' => 'number'], ]; /** @var string[] まとめるアーキテクチャ(8ビット機等は単一文字のレジスターが多いので含めない) */ protected array $archs = [AsmX8664::class, AsmAarch64::class, AsmAarch32::class, AsmRiscv::class, AsmMips::class, AsmPower::class]; public function prepare(string $code): void { $words = []; $suffixes = []; $prefixes = []; foreach ($this->archs as $class) { $a = new $class(); $a->prepare(''); [$w2, $s2, $p2] = $a->getTables(); foreach ($w2 as $w => $c) { // 命令の色を優先(「and」等が他のアーキテクチャでキーワードの場合) if (!isset($words[$w]) || $c === 'instruction') $words[$w] = $c; } $suffixes = array_merge($suffixes, $s2); $prefixes = array_merge($prefixes, $p2); } $this->words = $words; $this->suffixes = array_values(array_unique($suffixes)); $this->prefixes = array_values(array_unique($prefixes)); } }