Package StraightLine;

Tokens
	semi = ';';
	lpar = '(';
	rpar = ')';
	comma = ',';
	plus = '+';
	minus = '-';
	times = '*';
	div = '/';
	assign = ':=';	
	print = 'print';
	whitespace = (' ' | '\t' | 13 10  | 10 | 13 )+;  // 13 10 is '\r' '\n'
	num = ['0'..'9']+;
	id = ['a'..'z'] (['a'..'z'] | ['0'..'9'])*;

Ignored Tokens
	whitespace;

Productions
	stm =   {compoundstm} stm semi onestm |
		{onestm} onestm;
	onestm ={assignstm} id assign exp |
		{printstm} print lpar explist rpar;
	exp =	{plusexp} exp plus term | 
		{minusexp} exp minus term | 
		{term} term |
		{eseqexp} lpar stm comma exp rpar;
	term =  {timesterm} term times factor | 
		{divterm} term div factor | 
		{factor} factor;
	factor= {idexp} id |
		{numexp} num;
	explist={pairexplist} exp comma explist |
		{lastexplist} exp;

