dsp-asm/grammar.txt

124 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 → "mc0" | "mc1" | "mc2" | "mc3"
| "m0" | "m1" | "m2" | "m3"
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 → "rx" | "pl"
| "ra0" | "wa0"
| "lop" | "top"
| "ct0" | "ct1" | "ct2" | "ct3"
d1_src → "mc0" | "mc1" | "mc2" | "mc3"
| "m0" | "m1" | "m2" | "m3"
| "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_ingress → "m0" | "m1" | "m2" | "m3"
| "prg"
dma_egress → "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_ingress_imm → dma_dmah "d0" "," dma_ingress "," uimm8
dma_egress_imm → dma_dmah dma_egress "," "d0" "," uimm8
dma_ingress_ram → dma_dmah "d0" "," dma_ingress "," dma_length_ram
dma_egress_ram → dma_dmah dma_egress "," "d0" "," dma_length_ram
dma → dma_ingress_imm | dma_egress_imm | dma_ingress_ram | dma_egress_ram
jump_cond → "z" | "nz"
| "s" | "ns"
| "c" | "nc"
| "t0" | "nt0"
| "zs" | "nzs"
jmp → "jmp" uimm8
jmp_cond → "jmp" jump_cond
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