Module: LexerKit::IR::Opcode
- Defined in:
- lib/lexer_kit/ir/opcode.rb
Overview
Opcode definitions for the LexerKit VM
Constant Summary collapse
- DFA_RUN =
DFA operations
0x01- DFA_RUN_IF_MATCH =
Optimized DFA run for single-candidate regex tokens. Argument encoding: (dfa_id << 14) | fail_target (10+14 bits) On success: advance position, move to next instruction On failure: jump directly to fail_target
0x02- SCAN_UNTIL =
Delimiter/literal operations
0x10- MATCH_LITERAL =
Scan until delimiter, arg = const_id
0x12- SCAN_UNTIL_ESCAPE =
Match fixed string, arg = const_id
0x13- MATCH_RANGE =
Scan until delimiter with escape, arg = config_id
0x14- MATCH_LITERAL_OR_JUMP =
Optimized literal matching with embedded failure jump target. Argument encoding: (const_id << 14) | fail_target (10+14 bits) On success: advance position, move to next instruction On failure: jump directly to fail_target
0x16- SWITCH_BYTE =
Branch/control operations
0x20- JUMP =
Branch on next byte, arg = jump_table_id
0x21- JUMP_IF_EOF =
Unconditional jump, arg = offset
0x24- PUSH_MODE =
Mode operations
0x30- POP_MODE =
Push mode to stack, arg = mode_id
0x31- EMIT =
Token operations
0x40- EMIT_SKIP =
Emit token, arg = token_id
0x41- EMIT_ERROR =
Skip (advance without emit)
0x42- MARK =
Emit error token, arg = error_id
0x43- EMIT_AND_JUMP =
Optimized EMIT + JUMP for common token emission pattern. Argument encoding: (token_id << 14) | jump_target (10+14 bits)
0x44- KEYWORD_LOOKUP =
Keyword lookup, arg = keyword_table_id
0x45- LITERAL_TRIE_RUN =
Run literal trie, arg = const_id
0x46- CLEAR_BEST =
Clear best match tracking
0x49- COMMIT_BEST =
Commit best match, arg = default offset
0x4C- SET_MATCH =
Optimized regex candidate matching with embedded action target. Argument encoding: (order << 14) | action_ip (10+14 bits)
0x4D- LITERAL_TRIE_COMMIT =
Optimized CLEAR_BEST + LITERAL_TRIE_RUN + COMMIT_BEST for literal-only matching. Argument encoding: (const_id << 14) | fail_target (10+14 bits) On match: jump to best match action IP On no match: jump to fail_target
0x4E- EMIT_SKIP_AND_JUMP =
Optimized EMIT_SKIP + JUMP for skipped token pattern. Argument encoding: jump_target (24 bits)
0x4F- HALT =
Special
0xFF- NAMES =
Opcode metadata
{ DFA_RUN => "DFA_RUN", DFA_RUN_IF_MATCH => "DFA_RUN_IF_MATCH", SCAN_UNTIL => "SCAN_UNTIL", MATCH_LITERAL => "MATCH_LITERAL", SCAN_UNTIL_ESCAPE => "SCAN_UNTIL_ESCAPE", MATCH_RANGE => "MATCH_RANGE", MATCH_LITERAL_OR_JUMP => "MATCH_LITERAL_OR_JUMP", SWITCH_BYTE => "SWITCH_BYTE", JUMP => "JUMP", JUMP_IF_EOF => "JUMP_IF_EOF", PUSH_MODE => "PUSH_MODE", POP_MODE => "POP_MODE", EMIT => "EMIT", EMIT_SKIP => "EMIT_SKIP", EMIT_ERROR => "EMIT_ERROR", MARK => "MARK", EMIT_AND_JUMP => "EMIT_AND_JUMP", KEYWORD_LOOKUP => "KEYWORD_LOOKUP", LITERAL_TRIE_RUN => "LITERAL_TRIE_RUN", CLEAR_BEST => "CLEAR_BEST", COMMIT_BEST => "COMMIT_BEST", SET_MATCH => "SET_MATCH", LITERAL_TRIE_COMMIT => "LITERAL_TRIE_COMMIT", EMIT_SKIP_AND_JUMP => "EMIT_SKIP_AND_JUMP", HALT => "HALT" }.freeze
Class Method Summary collapse
Class Method Details
.name(opcode) ⇒ Object
91 92 93 |
# File 'lib/lexer_kit/ir/opcode.rb', line 91 def self.name(opcode) NAMES[opcode] || "UNKNOWN(0x#{opcode.to_s(16)})" end |