15
I'm trying to make a compiler for a mini Pascal-like language. I'm using Flex and Bison for this and I came up with this error.
My Flex file:
%{
#include "y.tab.h"
#include <stdlib.h>
#include <string.h>
#include <math.h>
void yyerror(char *);
%}
%%
[1-9][0-9]* {
yylval.i = atoi(yytext);
return INT;
}
program return PROGRAM;
or return OR;
and return AND;
not return NOT;
if return IF;
else return ELSE ;
while return WHILE;
"+" return PLUS;
"-" return MINUS;
"*" return MUL;
"/" return DIV;
"[" return LSB;
"]" return RSB;
"{" return LCB;
"}" return RCB;
"(" return LEFTPAR;
")" return RIGHTPAR;
":=" return ASSIGN;
"==" return ISEQUAL;
"<" return LTHAN;
">" return GTHAN;
"<>" return NOTEQUAL;
"<=" return LESSEQUAL;
">=" return GREATEREQUAL;
[a-zA-z][a-z0-9]* {
yylval.s = (char*)malloc(strlen(yytext)*sizeof(char));
strcopy(yylval.s,yytext);
return ID;
}
[ \t\n]+ /* eat up whitespace */
. yyerror("Unknown Character");
%%
int yywrap(void) {
return 1;
}
My Bison file:
%{
#include <stdio.h>
#include <string.h>
int yylex(void);
void yyerror(char *s);
%}
%union {
int i;
char *s;
};
%token <i> INTEGERNUM
%token PROGRAM;
%token OR;
%token AND;
%token NOT;
%token IF;
%token ELSE;
%token WHILE;
%token PLUS;
%token MINUS;
%token MUL;
%token DIV;
%token LSB;
%token RSB;
%token LCB;
%token RCB;
%token LEFTPAR;
%token RIGHTPAR;
%token ID;
%token INT;
%token ASSIGN;
%token ISEQUAL;
%token LTHAN;
%token GTHAN;
%token NOTEQUAL;
%token LESSEQUAL;
%token GREATEREQUAL;
%%
program: