home: hub: minipeg

ref: af684325f22bc573a9fdb95f176b8a17bb3001a4
dir: /examples/erract.peg/

View raw version
%{
#include <stdio.h>
%}

Expr	=   a:NUMBER PLUS   ~{ printf("fail at PLUS\n") } b:NUMBER { printf("got addition\n"); }
	| ( a:NUMBER MINUS  				  b:NUMBER { printf("got subtraction\n"); } ) ~{ printf("fail at subtraction\n") }
	|   a:NUMBER TIMES  				  b:NUMBER { printf("got multiplication\n"); }
	|   a:NUMBER DIVIDE 				  b:NUMBER { printf("got division\n"); }

NUMBER	= < [0-9]+ >	-					   { $$= atoi(yytext); }
PLUS	= '+'		-
MINUS	= '-'		-
TIMES	= '*'		-
DIVIDE	= '/'		-

-	= (SPACE | EOL)*
SPACE	= [ \t]
EOL	= '\n' | '\r\n' | '\r' | ';'

%%

int main()
{
  while (yyparse());

  return 0;
}