Académique Documents
Professionnel Documents
Culture Documents
%{
int cha=0, words=0, spaces=0, lines=0;
char infile[25];
%}
word [^\t\n]+
col \n
%%
{word} {words++; cha+=yyleng;}
[\n]+ {lines++, cha++;}
[ ]
{spaces++, cha++;}
%%
main()
{
printf("read the input filename \n");
scanf("%s",infile);
yyin=fopen(infile,"r");
yylex();
fclose(yyin);
printf("\n number of characters:%d",cha);
printf("\n number of words:%d",words);
printf("\n number of space:%d",spaces);
printf("\n number of lines:%d",lines);
}
1b.
%{
int count=0,flag=0;
%}
%%
"/*" {
if(!flag){
flag=1;
fprintf(yyout," ");
}
}
[^"*/"] {
if(flag==1)
{
fprintf(yyout," ");
}
else
{
fprintf(yyout,"%s",yytext);
}
}
"*/" {
if(flag)
{
flag=0;
fprintf(yyout," ");
count++;
}
}
%%
main(int argc,char*argv[])
{
yyin=fopen(argv[1],"r");
yyout=fopen(argv[2],"w");
yylex();
printf("\n number of comment lines in file is=%d",count);
}
2a.
%{
int a[]={0,0,0,0},valid=1,opnd=0;
%}
%x OPER
%%
[a-zA-Z0-9]+{BEGIN OPER;opnd++;}
<OPER>"+"{if(valid){valid=0;i=0;}else ext();}
<OPER>"-"{if(valid){valid=0;i=1;}else ext();}
<OPER>"*"{if(valid){valid=0;i=2;}else ext();}
<OPER>"/"{if(valid){valid=0;i=3;}else ext();}
<OPER>[a-zA-Z0-9]+{opnd++;if(valid==0){valid=1;a[i]++;}else ext();}
<OPER>"\n"{if(valid==0)ext();else return0;}
.\n ext();
%%
ext()
{printf("Invalid Expression\n");exit(0);}
main()
{
printf("Type the arithmetic Expression\n");
yylex();
printf("Valid Arithmetic Expression\n");
printf("No.of Operands/Identifiers:%d\n",opnd);
printf("No.of Additions:%d\n No.of Subtractions:%d\n",a[0],a[1]);
printf("No.of Multiplications:%d\n No.of Divisions:%d\n",a[2],a[3]);
}
2b.
%{
%}
%%
[aA][nN][dD][oO][rR][nN][oO][tT][bB][uU][tT] {printf("compound sentence\n"); exi
t(0);}
. ;
\n return 0;
%%
main()
{
printf("type the sentence\n");
yylex();
printf("simple sentence\n");
}
3.
%{
flag=0,count=0;
%}
%%
"int"|"char"|"float"|"double"|"long"|"short"|"char" {flag=1;}
[a-zA-Z0-9]* { if (flag==1)
{
count++;
}
}
";" {flag=0;}
%%
main(int argc,char *argv[])
{
yyin=fopen(argv[1],"r");
yylex();
fclose(yyin);
printf("no. of identifiers=%d\n",count);
}
4a.
%{
#include"y.tab.h"
%}
%%
[0-9]+(\.[0-9]+)? {return NUM;}
[a-zA-Z][_a-zA-Z0-9]* {return ID;}
[\t] ;
\n return 0;
. return yytext[0];
%%
yacc part
%{
#include<stdio.h>
%}
%token NUM ID
%left '+''-'
%left '*''/'
%%
e:e'+'e
|e'-'e
|e'*'e
|e'/'
|'('e')'
|NUM
|ID
%%
main()
{
5a.
%{
#include<stdlib.h>
#include"y.tab.h"
extern int yylval;
%}
%%
[0-9]+ {yylval=atoi(yytext);return NUM;}
[\t] ;
\n
.
%%
return 0;
return yytext[0];
yacc part
%{
#include<stdio.h>
%}
%token NUM
%left '+''-'
%left '*''/'
%%
expr:e{printf("result:%d\n",$1); return 0;}
e:e'+'e{$$=$1+$3;}
|e'-'e{$$=$1-$3;}
|e'*'e{$$=$1*$3;}
|e'/'e{$$=$1/$3;}
|'('e')'{$$=$2;}
|NUM{$$=$1;};
%%
main()
{
printf("type the exp and press enter\n");
yyparse();
printf("valid exp");
}
yyerror()
{
printf("invalid exp");
exit(0);
}
5b
%{
#include"y.tab.h"
%}
%%
a return A;
b return B;
. return yytext[0];
\n return yytext[0];
%%
yacc part
%{
#include<stdio.h>
%}
%token A B
%%
str:s'\n' {return 0;}
s:A s B;
| ;
%%
main()
{
printf("type the string?\n");
if(!yyparse())
printf("valid string\n");
}
int yyerror()
{
printf("invalid string\n");
exit(0);
}
6.
%{
#include"y.tab.h"
%}
%%
a return A;
b return B;
. return yytext[0];
\n return yytext[0];
%%
yacc part
%{
#include<stdio.h>
%}
%token A B
%%
str:s'\n'{return 0;}
s:X B
X:A A A A A A A A A A T
T:A T
| ;
%%
main()
{
printf("type the string?\n");
if(!yyparse())
printf("valid string\n");
}
int yyerror()
{
printf("invalid string\n");
exit(0);
}
7a.
#!/bin/sh
#program to reverse the input arguments
if test $# -eq 0
then
echo "not enough arguments to be displayed"
else
echo "number of arguments are:$#"
echo "the arguments passed is $*"
echo "the reverse of it is"
c=$#
while [ $c -ne 0 ]
do
eval echo \$$c
c=`expr $c - 1`
done
echo "end of the program"
fi
exit 0
7b.
#include<stdio.h>
#include<unistd.h>
int main()
{
int x,ch;
char cmd[20];
int pid=fork();
if(pid==0)
{
printf("\n child process");
do
{
printf("\n enter the command");
scanf("%s",&cmd);
system(cmd);
printf("\n enter 1 to continue or 0 to exit");
scanf("%d",&ch);
}
while(ch!=0);
}
wait();
}
8a
#!/bin/sh
# program to check file permission
if [ $# -ne 2 ]
then
echo "execution is sh 2a.sh first_file_second file"
exit 2
fi
9a.
#!/bin/sh
if [ $# -eq 0 ]
then
echo "no argument passed"
exit 1
fi
echo " ">Cr.sh
for i in $*
do
echo "echo" code to recreate the file $i " ">>Cr.sh
echo "cat $i<< endf" >>Cr.sh
cat $i>>Cr.sh
echo "endf">>Cr.sh