/* File: ex.y */
%{
int vbltable[26];
%}
%token NAME
%token NUMBER
%token EQ
%token PLUS MINUS TIMES DIV
%left MINUS PLUS
%left TIMES DIV
%nonassoc UMINUS
%%
statement_list
: statement
| statement statement_list
statement
: NAME EQ expression ';' {vbltable[$1] = $3; }
expression
: expression PLUS expression {$$ = $1 + $3;}
| expression MINUS expression {$$ = $1 - $3;}
| expression TIMES expression {$$ = $1 * $3;}
| expression DIV expression {$$ = $1 / $3;}
| MINUS expression %prec UMINUS {$$ = - $2;}
| '(' expression ')' { $$ = $2; }
| NUMBER
| NAME { $$ = vbltable[$1]; }
%%
main()
{
int i;
for (i = 0; i < 26; i++)
vbltable[i] = 0;
yyparse();
for (i = 0; i < 26; i++)
if (vbltable[i] != 0)
printf("Table: %d :%d\n", i, vbltable[i]);
}
Corresponding Lex file
/* File: ex.l */
%{
#include "y.tab.h"
extern int yylval;
%}
digit [0-9]
letter [a-z]
%%
"+" {return PLUS;}
"=" {return EQ;}
"-" {return MINUS;}
"*" {return TIMES;}
"/" {return DIV;}
{digit}+ {yylval = atoi(yytext); return NUMBER; }
{letter} {yylval = yytext[0] - 'a'; return NAME;}
[ \t]+ ;
\n ;
. {return yytext[0];}
%%