126 lines
3.0 KiB
Plaintext
126 lines
3.0 KiB
Plaintext
expression → term
|
|
term → factor ( ( "-" | "+" ) factor )*
|
|
factor → unary ( ( "/" | "*" | "%" ) unary )*
|
|
unary → ( "~" | "+" | "-" ) unary
|
|
| shift
|
|
shift → andl ( ( "<<" | ">>" ) andl )*
|
|
andl → orl ( "&" orl )*
|
|
orl → andl ( ( "|" | "^" ) andl )*
|
|
primary → number
|
|
| "(" expression ")"
|
|
|
|
number → "%" base2-number
|
|
| "$" base16-number
|
|
| "0b" base2-number
|
|
| "0x" base16-number
|
|
| base10-number
|
|
|
|
imm → ("#")? expression (":")?
|
|
uimm8 → imm
|
|
uimm19 → imm
|
|
uimm25 → imm
|
|
|
|
alu → and | or | xor | add | sub | ad2 | sr | rr | sl | rl | rl8
|
|
|
|
xy_src → "m0" | "m1" | "m2" | "m3"
|
|
| "mc0" | "mc1" | "mc2" | "mc3"
|
|
|
|
mov_ram_x → "mov" xy_src "," "x"
|
|
mov_mul_p → "mov" "mul" "," "p"
|
|
mov_ram_p → "mov" xy_src "," "p"
|
|
|
|
x_bus → mov_ram_x | mov_mul_p | mov_ram_p
|
|
|
|
mov_ram_y → "mov" xy_src "," "y"
|
|
clr_a → "clr" "a"
|
|
mov_alu_a → "mov" "alu" "," "a"
|
|
mov_ram_a → "mov" xy_src "," "a"
|
|
|
|
y_bus → mov_ram_y | clr_a | mpv_alu_a | mov_ram_a
|
|
|
|
d1_dest → "mc0" | "mc1" | "mc2" | "mc3"
|
|
| "rx" | "pl"
|
|
| "ra0" | "wa0"
|
|
| "lop" | "top"
|
|
| "ct0" | "ct1" | "ct2" | "ct3"
|
|
|
|
d1_src → "m0" | "m1" | "m2" | "m3"
|
|
| "mc0" | "mc1" | "mc2" | "mc3"
|
|
| "alh" | "all"
|
|
|
|
mov_imm_d1 → "mov" uimm8 "," d1_dest
|
|
mov_ram_d1 → "mov" d1_src "," d1_dest
|
|
|
|
d1_bus → mov_imm_d1 → mov_ram_d1
|
|
|
|
nop → "nop"
|
|
|
|
op → ( nop | alu | x_bus | y_bus | d1_bus ) +
|
|
|
|
load_dest → "mc0" | "mc1" | "mc2" | "mc3"
|
|
| "rx" | "pl"
|
|
| "ra0" | "wa0"
|
|
| "lop" | "pc"
|
|
|
|
load_cond → "z" | "nz"
|
|
| "s" | "ns"
|
|
| "c" | "nc"
|
|
| "t0" | "nt0"
|
|
| "zs" | "nzs"
|
|
|
|
mvi → "mvi" uimm25 load_dest
|
|
mvi_cond → "mvi" uimm19 load_dest load_cond
|
|
|
|
load → mvi | mvi_cond
|
|
|
|
dma_dst → "m0" | "m1" | "m2" | "m3"
|
|
| "prg"
|
|
|
|
dma_src → "m0" | "m1" | "m2" | "m3"
|
|
|
|
add_mode = "0" | "1" | "2" | "4" | "8" | "16" | "32" | "64"
|
|
|
|
dma_dmah → ("dma" | "dmah") add_mode?
|
|
|
|
dma_length_ram → "m0" | "m1" | "m2" | "m3"
|
|
| "mc0" | "mc1" | "mc2" | "mc3"
|
|
|
|
dma_d0_dst_imm → dma_dmah "d0" "," dma_dst "," uimm8
|
|
dma_src_d0_imm → dma_dmah dma_src "," "d0" "," uimm8
|
|
dma_d0_dst_ram → dma_dmah "d0" "," dma_dst "," dma_length_ram
|
|
dma_src_d0_ram → dma_dmah dma_src "," "d0" "," dma_length_ram
|
|
|
|
dma → dma_d0_dst_imm | dma_src_d0_imm
|
|
| dma_d0_dst_ram | dma_src_d0_ram
|
|
|
|
jump_cond → "z" | "nz"
|
|
| "s" | "ns"
|
|
| "c" | "nc"
|
|
| "t0" | "nt0"
|
|
| "zs" | "nzs"
|
|
|
|
jmp → "jmp" uimm8
|
|
jmp_cond → "jmp" jump_cond uimm8
|
|
|
|
jump → jmp | jmp_cond
|
|
|
|
loop → "btm" | "lps"
|
|
|
|
end → "end" | "endi"
|
|
|
|
instruction → op
|
|
| load
|
|
| dma
|
|
| jump
|
|
| loop
|
|
| end
|
|
|
|
assignment_statement → identifier "=" expression "\n"
|
|
|
|
label → identifier ":"
|
|
|
|
instruction_statement → label? instruction? "\n"
|
|
|
|
statement → assignment_statement
|
|
| instruction_statement
|