
?<include list>;

<calc #result>
	<print "calc : "> 
	::sys <getline #line 
		::sys <setvar exprlist ()>
		<expr>
	>
	<exprlist #x>
	<rpnf #result #x>
	<print " = " #result>
	;

<expr>
	<expradd>
	;

<expradd>
		<exprmul>
		{
		   <$"+"> <exprmul>
				<exprlist #x>
				::list <append #list #x ("+")>
				::sys <setvar exprlist #list>
		 |
		   <$"-"> <exprmul> 
				<exprlist #x>
				::list <append #list #x ("-")>
				::sys <setvar exprlist #list>
		}
	;

<exprmul>  
		<exprID>
		{ 
		     <$"*"> <exprID> 
				<exprlist #x>
				::list <append #list #x ("*")>
				::sys <setvar exprlist #list>
		  |
		     <$"/"> <exprID>
				<exprlist #x>
				::list <append #list #x ("/")>
				::sys <setvar exprlist #list>
		}
        ;

<exprID>
	   <$"+"> <exprterm> 
	 |
	   <$"-"> <exprterm>
				<exprlist #x>
				::list <append #list #x ("-1" "*")>
				::sys <setvar exprlist #list>
	 |
	  <exprterm>
	;

<exprterm>
	   <$"("> <expr> <$")"> 
	|
	   ::sys <FNUM #t>
				<exprlist #x>
				::list <append #list #x  (#t)>
				::sys <setvar exprlist #list>
	;


?{ <calc #line> };

