program:	{ directive | statement }

directive:	"." directive_name [ space [ directive_args ] ] newline

directive_name:	WORD

directive_args:	directive_arg { space [ directive_arg ] }

directive_arg:	WORD | NUMBER

newline:	[ space ] NEWLINE

space:		SPACE { SPACE }

statement:	( function | space [ instruction ] ) newline

function:	function_name [ space ] ":"

function_name:	WORD

instruction:	[ prefix space ] instruction_name [ space [ operand_list ] ]

prefix:		WORD

instruction_name:	WORD

operand_list:	operand [ space ] { "," [ space ] operand [ space ] }

operand:	value | address

value:		symbol | register | immediate

symbol:		WORD

register:	"%" WORD

immediate:	[ sign ] "$" NUMBER

address:	"[" [ space ] [ sign [ space ] ] value [ space ] [ offset [ space ] ] "]"

sign:		( "+" | "-" )

offset:		sign [ space ] value
