
<program>: <externs>

<extern>:
	Name = Number ;
	
	define [private] Name ["label"] (<decls>) (<decls>)
	{
		local <decls> ;

		<statments>
	}

	declare Name (<decls>) (<decls>) ';'

<decls>: <decl> [ , <decl> ... ]

<decl>:	Name ["label"]

<statement>:
	while ( <expr> ) <statement>
	if ( <expr> ) <statement> [ else <statement> ]
	do <statement> while ( <expr> );
	for ( [<expr>] ; [<expr>] ; [<expr>] ) <statement>
	return ;
	break ;
	continue ;
	<vars> = <exprs> ;
	<expr> ;
	;
	{ <statements> }
<vars>:	Name [ , Name ... ]

<expr>:	Name
	Number
	( <exprs> )
	<expr> + <expr>
	<expr> - <expr>
	<expr> * <expr>
	<expr> / <expr>
	<expr> % <expr>			remainder (sigh)
	<expr> ^ <expr>			exponentiation
	<expr> < <expr>
	<expr> <= <expr>
	<expr> == <expr>
	<expr> != <expr>
	<expr> >= <expr>
	<expr> > <expr>
	<expr> && <expr>		boolean and
	<expr> || <expr>		boolean or
	<expr> & <expr>			bitwise and
	<expr> ^^ <expr>		bitwise xor
	<expr> | <expr>			bitwise or
	- <expr>
	Name ( [<exprs>] )
<exprs>: <expr> [ , <expr> ... ]
