%{
/* definitions */
#include <stdio.h>
int yylex();
int yyerror(char *);

%}

%locations
%define api.pure

%token eol round_open round_close multiply space
%token single_digit_integer multi_digit_integer invalid

%type <integer>number
%type <integer>single_digit_integer
%type <integer>multi_digit_integer

%union{
  int integer;
}

 /* rules section below */
%%

input: s;

s: round_open multiply round_close {
              printf("0\n");
   }
   | round_open multiply space number round_close {
              printf("%d\n", $4);
   }
   | round_open multiply space number space number round_close {
              printf("%d\n", $4 * $6);
   }
;

number:
  single_digit_integer
  | multi_digit_integer
;

%%

int yyerror(char* s){
  printf("%s\n", s);
  return 0;
}

//driver
int main(int argc, char** argv){
  printf("hello, world!\n");
  yyparse();
  return 0;
}