%{
#include <stdio.h>
typedef char *CHAR_PTR;
#define YYSTYPE CHAR_PTR
int p=-1;
char *symtable[100];
%}
%token NUMBER
%token ID
%left '+' '-'
%left '*' '/'
%right UMINUS
%%
 lines:
        | lines line
        ;
line: '\n' { ;}
| s ';' { printf(" \n ************\n ");}
    ;
s :  ID   '=' expr {int p; p = insert ($1,symtable);printf("istore %d\n",p);}
expr:  expr '+' expr { printf("iadd\n");}

      | expr '-' expr { printf("isub\n");}

      | expr '*' expr {printf("imul\n");}

      | expr '/' expr { printf("idiv\n"); }
      | '-' expr %prec UMINUS { printf("ineg\n");}
       | '(' expr  ')'  {}
      | NUMBER { printf("bipush %d\n",atoi($1));}
      | ID {int p; p = insert($1,symtable); printf("iload %d\n",p);}

           ;

%%
#include "lex.yy.c"
main()
{
   yyparse();
 }
int insert(char* s, char* symtable[])

{ 
  int i=0;

  while (i<=p) {
    if (strcmp(s,symtable[i]) ==0)
      return(i);
    else i++;
  }
  symtable[i] = (char *) malloc(10);
  strcpy(symtable[i],s);
  p = i;
  dump(symtable);
  return(p);
}

void dump(char* symtable[])
{ 
  int i;

  for(i=0;i<p;i++)
  printf("symtable[%d] is %s\n",i,symtable[i]);
}
