Assembly Grammar

assembly‑file → assembly‑line*
assembly‑line → comment‑line | empty‑line | mode‑line | instruction‑line
comment‑line → comment newline
comment → space? (<any> − (newline | symbol | local‑symbol | dot | semicolon | at)) (<any> − newline)*
empty‑line → space? newline
mode‑line → space? dot symbol space? newline
instruction‑line → instruction (space? semicolon instruction)* comment? newline
instruction → label split‑line opcode operands
label → local‑symbol | symbol | <empty>
split‑line → space (newline space)? | newline space
opcode → decimal‑constant? symbol
operands → space? expression (comma expression)* | space?
expression → term (weak‑operator term)*
weak‑operator → plus | minus | bar | caret
term → primary‑expression (strong‑operator primary‑expression)*
strong‑operator → ast | slash | slash‑slash | percent | shift‑left | shift‑right | amp
primary‑expression → local‑symbol | constant | symbol | at | lparen expression rparen | unary‑operator primary‑expression
unary‑operator → plus | minus | tilde | dollar | amp
local‑symbol → local‑symbol
constant → decimal‑constant | hexadecimal‑constant | character‑constant | string‑constant | clsid‑constant
symbol → symbol
at → at