Syntax for Old S

command	:	/* empty */
	|	expr
	|	NAME BLANK arglist

control	:	'{' exprlist '}'
	|	'repeat' expr
	|	'while' '(' expr ')' expr
	|	'for' '(' NAME 'in' expr ')' expr
	|	'if' '(' expr ')' expr
	|	'if' '(' expr ')' expr 'else' expr
	|	'break'
	|	'next'

expr	:	expr OP expr
	|	expr2 '[' arglist ']'
	|	expr ':' expr
	|	expr '->' lexpr
	|	lexpr '<-' expr
	|	OP expr
	|	'!' expr
	|	INT
	|	REAL
	|	STRING
	|	expr2
	|	lexpr

exprlist :	opexpr
	|	exprlist ';' opexpr

lexpr	:	cname
	|	cname '[' arglist ']'

cname	:	NAME
	|	'$' NAME
	|	cname '$' NAME
	|	cname '$' INT
	|	cname '$' '[' expr ']'

expr2	:	'(' expr ')'
	|	function
	|	expr2 '$' NAME
	|	expr2 '$' '[' expr ']'

function:	NAME '(' arglist ')'

arglist	:	arg
	|	arglist ',' arg

arg	:	/* empty */
	|	expr
	|	NAME '=' opexpr

opexpr	:	/*empty*/
	|	expr

