lex
%{
#include "y.tab.h"
%}
%%
"int"|"void"|"char"|"float"|"double" { return TYP; }
"return" { return RETURN; }
[a-zA-Z_][a-zA-Z0-9_]* { return ID; }
"(" { return LP; }
")" { return RP; }
"{" { return LB; }
"}" { return RB; }
";" { return SC; }
"," { return CM; }
"=" { return EQ; }
"+"|"-"|"*"|"/" { return OP; }
[0-9]+ { return NUM; }
[ \\t\\n] ;
. ;
%%
int yywrap(){ return 1; }
yacc
%{
#include <stdio.h>
#include <stdlib.h>
int yylex();
void yyerror();
%}
%token TYP ID LP RP LB RB SC CM EQ OP RETURN NUM
%%
prog: func ;
func:
TYP ID LP params RP LB stmts RB
{ printf("Valid Function\\n"); }
;
params:
/* empty */
| param
| param ',' param
;
param:
TYP ID
;
stmts:
stmt
| stmts stmt
;
stmt:
TYP ID SC
| TYP ID EQ expr SC
| expr SC
| RETURN expr SC
;
expr:
ID
| NUM
| ID EQ expr
| expr OP expr
| LP expr RP
;
%%
int main(){
printf("Enter function:\\n");
yyparse();
return 0;
}
void yyerror(){
printf("Invalid Function\\n");
exit(0);
}