27 lines · 663 B · Text
RawDownload
# Grammar Expr	<- SPACE Sum EOL		{ printf("%d\n", pop()); }	 / (!EOL .)* EOL		{ printf("error\n"); } Sum	<- Product ( PLUS  Product	{ int r= pop(), l= pop();  push(l + r); }		   / MINUS Product	{ int r= pop(), l= pop();  push(l - r); }		   )* Product	<- Value ( TIMES  Value		{ int r= pop(), l= pop();  push(l * r); }                 / DIVIDE Value		{ int r= pop(), l= pop();  push(l / r); }		 )* Value	<- NUMBER			{ push(atoi(yytext)); }	 / OPEN Sum CLOSE # Lexemes NUMBER	<- < [0-9]+ > SPACEPLUS	<- '+' SPACEMINUS	<- '-' SPACETIMES	<- '*' SPACEDIVIDE	<- '/' SPACEOPEN	<- '(' SPACECLOSE	<- ')' SPACESPACE	<- [ \t]*EOL	<- '\n' / '\r\n' / '\r'