88
99Statement {
1010 Instruction |
11- Directive
11+ Directive |
12+ MacroDef |
13+ MacEnd |
14+ ControlOp
1215}
1316
14- Label { Identifier ":" | Identifier }
17+ Label { Identifier Colon Colon? | Identifier }
1518
1619Instruction {
1720 Opcode Operand?
@@ -21,66 +24,16 @@ Directive {
2124 PseudoOp (Expression)*
2225}
2326
24- PseudoOp {
25- @specialize<Identifier,
26- "defb" | "defw" | "defm" |
27- "DEFB" | "DEFW" | "DEFM" |
28- "org" | "equ" | "end" | "public" |
29- "ORG" | "EQU" | "END" | "PUBLIC"
30- >
27+ MacroDef {
28+ Mac Identifier
3129}
3230
33- Condition {
34- @specialize<Identifier,
35- "nz" | "z" | "nc" | "po" | "pe" | "p" | "m" |
36- "NZ" | "Z" | "NC" | "PO" | "PE" | "P" | "M"
37- >
38- }
39-
40- Register {
41- @specialize<Identifier,
42- "a" | "b" | "c" | "d" | "e" | "h" | "l" | "i" | "r" | "af" | "bc" | "de" | "hl" | "ix" | "iy" | "sp" | "pc" | "psw" |
43- "A" | "B" | "C" | "D" | "E" | "H" | "L" | "I" | "R" | "AF" | "BC" | "DE" | "HL" | "IX" | "IY" | "SP" | "PC" | "PSW"
44- >
45- }
46-
47- Opcode {
48- @specialize<Identifier,
49- // Z80 Instructions
50- "ld" | "push" | "pop" | "inc" | "dec" | "add" | "adc" | "sub" | "sbc" | "and" | "or" | "xor" |
51- "cp" | "ret" | "jp" | "jr" | "call" | "rst" | "nop" | "halt" | "di" | "ei" |
52- "im" | "ex" | "exx" | "neg" | "cpl" | "ccf" | "scf" | "rlca" | "rla" | "rrca" | "rra" |
53- "rlc" | "rl" | "rrc" | "rr" | "sla" | "sra" | "srl" | "bit" | "set" | "res" |
54- "out" | "in" | "djnz" | "rld" | "rrd" | "ldi" | "ldir" | "ldd" | "lddr" | "cpi" | "cpir" | "cpd" | "cpdr" |
55- "ini" | "inir" | "ind" | "indr" | "outi" | "otir" | "outd" | "otdr" |
56-
57- "LD" | "PUSH" | "POP" | "INC" | "DEC" | "ADD" | "ADC" | "SUB" | "SBC" | "AND" | "OR" | "XOR" |
58- "CP" | "RET" | "JP" | "JR" | "CALL" | "RST" | "NOP" | "HALT" | "DI" | "EI" |
59- "IM" | "EX" | "EXX" | "NEG" | "CPL" | "CCF" | "SCF" | "RLCA" | "RLA" | "RRCA" | "RRA" |
60- "RLC" | "RL" | "RRC" | "RR" | "SLA" | "SRA" | "SRL" | "BIT" | "SET" | "RES" |
61- "OUT" | "IN" | "DJNZ" | "RLD" | "RRD" | "LDI" | "LDIR" | "LDD" | "LDDR" | "CPI" | "CPIR" | "CPD" | "CPDR" |
62- "INI" | "INIR" | "IND" | "INDR" | "OUTI" | "OTIR" | "OUTD" | "OTDR" |
63-
64- // 8080 Instructions
65- "mov" | "mvi" | "lxi" | "lda" | "sta" | "lhld" | "shld" | "ldax" | "stax" |
66- "adi" | "aci" | "sui" | "sbi" | "sbb" | "ana" | "ani" | "xra" | "xri" | "ora" | "ori" | "cmp" |
67- "inr" | "dcr" | "inx" | "dcx" | "dad" |
68- "daa" | "cma" | "stc" | "cmc" | "ral" | "rar" |
69- "jmp" | "jnz" | "jz" | "jnc" | "jc" | "jpo" | "jpe" | "jm" |
70- "cnz" | "cz" | "cnc" | "cc" | "cpo" | "cpe" | "cm" |
71- "rnz" | "rz" | "rnc" | "rc" | "rpo" | "rpe" | "rp" | "rm" |
72- "pchl" | "sphl" | "xthl" | "xchg" | "hlt" |
73-
74- "MOV" | "MVI" | "LXI" | "LDA" | "STA" | "LHLD" | "SHLD" | "LDAX" | "STAX" |
75- "ADI" | "ACI" | "SUI" | "SBI" | "SBB" | "ANA" | "ANI" | "XRA" | "XRI" | "ORA" | "ORI" | "CMP" |
76- "INR" | "DCR" | "INX" | "DCX" | "DAD" |
77- "DAA" | "CMA" | "STC" | "CMC" | "RAL" | "RAR" |
78- "JMP" | "JNZ" | "JZ" | "JNC" | "JC" | "JPO" | "JPE" | "JM" |
79- "CNZ" | "CZ" | "CNC" | "CC" | "CPO" | "CPE" | "CM" |
80- "RNZ" | "RZ" | "RNC" | "RC" | "RPO" | "RPE" | "RP" | "RM" |
81- "PCHL" | "SPHL" | "XTHL" | "XCHG" | "HLT"
82- >
83- }
31+ @external specialize {Identifier} pseudoOpSpecializer from "../../src/parser/tokens-z80" { PseudoOp }
32+ @external specialize {Identifier} macSpecializer from "../../src/parser/tokens-z80" { Mac, MacEnd }
33+ @external specialize {Identifier} controlOpSpecializer from "../../src/parser/tokens-z80" { ControlOp }
34+ @external specialize {Identifier} opcodeSpecializer from "../../src/parser/tokens-z80" { Opcode }
35+ @external specialize {Identifier} registerSpecializer from "../../src/parser/tokens-z80" { Register }
36+ @external specialize {Identifier} conditionSpecializer from "../../src/parser/tokens-z80" { Condition }
8437
8538Expression {
8639 Expression !logic LogicOp Expression |
@@ -115,12 +68,12 @@ Operand {
11568}
11669
11770@tokens {
118- Identifier { $[a-zA-Z_] $[a-zA-Z0-9_]* }
71+ Identifier { $[a-zA-Z_.? ] $[a-zA-Z0-9_.? ]* }
11972
120- Hex { ("0x" | "$") $[0-9a-fA-F]+ | $[0-9] $[0-9a-fA-F]* "h" }
121- Bin { "%" $[01]+ | $[01]+ "b" }
122- Oct { "0o" $[0-7]+ | $[0-7]+ "o" }
123- Dec { $[0-9]+ }
73+ Hex { ("0x" | "0X" | " $") $[0-9a-fA-F]+ | $[0-9] $[0-9a-fA-F]* $[hH] }
74+ Bin { $[01]+ $[bB] }
75+ Oct { ( "0o" | "0O") $[0-7]+ | $[0-7]+ $[oOqQ] }
76+ Dec { $[0-9]+ $[dD]? }
12477
12578 Number { Hex | Bin | Oct | Dec }
12679
@@ -134,7 +87,7 @@ Operand {
13487 eol { $[\n\r]+ }
13588
13689 Comma { "," }
137- ":"
90+ Colon { ":" }
13891 "#"
13992 "(" ")"
14093
0 commit comments