System Software Lab Programs
System Software Lab Programs
(LEX PROGRAMS)
1. Program to count the number of vowels and consonants in a given
string.
%{
#include<stdio.h>
int vowels=0;
int cons=0;
%}
%%
[aeiouAEIOU] {vowels++;}
[a-zA-Z] {cons++;}
%%
int yywrap()
{
return 1;
}
main()
{
printf(Enter the string.. at end press ^d\n);
yylex();
printf(No of vowels=%d\nNo of consonants=%d\n,vowels,cons);
}
strcpy(opnd[j],yytext);
j++;
}
%%
int yywrap()
{
return 1;
}
main()
{
int k;
printf(Enter the expression.. at end press ^d\n);
yylex();
if(valid==1 && i==-1 && (nopnd-noprt)==1)
{
printf(The expression is valid\n);
printf(The operators are\n);
for(k=0;k<l;k++)
Printf(%s\n,oprt[k]);
for(k=0;k<l;k++)
Printf(%s\n,opnd[k]);
}
else
Printf(The expression is invalid);
}
.+ { ;}
\n { ;}
%%
int yywrap()
{
return 1;
}
main (int argc, char *argv[])
{
if(argc!=2)
{
printf(Usage: <./a.out> <sourcefile>\n);
exit(0);
}
yyin=fopen(argv[1],r);
printf(Valid identifires are\n);
yylex();
printf(No of identifiers = %d\n,id);
}
YACC PROGRAMS
1. Program to test the validity of a simple expression involving operators
+, -, * and /
Yacc Part
%token NUMBER ID NL
%left + -
%left * /
%%
stmt : exp NL { printf(Valid Expression); exit(0);}
;
exp : exp + exp
| exp - exp
| exp * exp
| exp / exp
| ( exp )
| ID
| NUMBER
;
%%
int yyerror(char *msg)
{
printf(Invalid Expression\n);
exit(0);
}
main ()
{
printf(Enter the expression\n);
yyparse();
}
10
Lex Part
%{
#include y.tab.h
%}
%%
[0-9]+ { return DIGIT; }
[a-zA-Z][a-zA-Z0-9_]* { return ID; }
\n { return NL ;}
. { return yytext[0]; }
%%
11
12
Lex Part
%{
#include y.tab.h
%}
%%
if { return IF; }
[sS][0-9]* {return S;}
<|>|==|!=|<=|>= { return RELOP; }
[0-9]+ { return NUMBER; }
[a-zA-Z][a-zA-Z0-9_]* { return ID; }
\n { ; }
. { return yytext[0]; }
%%
13
14
Lex Part
%{
#include y.tab.h
%}
%%
[0-9]+ { return NUMBER; }
[a-zA-Z][a-zA-Z0-9_]* { return ID; }
\n { return NL ;}
. { return yytext[0]; }
%%
15
16
Lex Part
%{
#include y.tab.h
%}
%%
[a-zA-Z] { return LETTER ;}
[0-9] { return DIGIT ; }
[\n] { return NL ;}
[_] { return UND; }
. { return yytext[0]; }
%%
17
Lex Part
%{
#include y.tab.h
extern int yylval;
%}
%%
[0-9]+ { yylval=atoi(yytext); return NUMBER; }
\n { return NL ;}
. { return yytext[0]; }
%%
19
Lex Part
%{
#include y.tab.h
%}
%%
[aA] { return A; }
[bB] { return B; }
\n { return NL ;}
. { return yytext[0]; }
%%
20
. { return yytext[0]; }
%%
21
22