Using lex-yacc check declaration statement in a C program.
YACC FILE
Source Code:
%{
#include
void yyerror(char *);
int yylex();
%}
%token INT FLOAT CHAR ID VOID MAIN
%%
stmt : VOID MAIN '(' ')' '{' dec_stmt '}' {printf("Parsing Successful");}
;
dec_stmt :sdec
|sdec dec_stmt
;
sdec :datatype varlist ';'
;
datatype :INT
|FLOAT
|CHAR
;
varlist :ID
|ID ',' varlist
;
%%
void yyerror(char *s)
{
printf("\nparsing err ");
}
int main()
{
yyparse();
return 0;
}
Lex FILE
Source Code:
%{
#include "y.tab.h"
void yyerror(char *);
%}
%%
"int" {return INT;}
"float" {return FLOAT;}
"char" {return CHAR;}
"void" {return VOID;}
"main" {return MAIN;}
[,{}();] {return *yytext;}
[ \t\n]+ ;
[a-zA-Z_][a-zA-Z0-9_]* {return ID;}
. {printf("\n\nlex err");}
%%
int yywrap()
{
return 1;
}
OUTPUT:
[cmsa1@localhost cdeclaration]$ yacc -d cdec.y
[cmsa1@localhost cdeclaration]$ lex cdec.l
[cmsa1@localhost cdeclaration]$ cc y.tab.c lex.yy.c -o a
[cmsa1@localhost cdeclaration]$ ./a
0 comments