0% found this document useful (0 votes)
10 views

Compiler Lab Assignment-1

The document describes a C++ program that counts identifiers, keywords, numbers, and literals in a text file. The program uses vectors and loops to parse the file characters and categorize each token.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views

Compiler Lab Assignment-1

The document describes a C++ program that counts identifiers, keywords, numbers, and literals in a text file. The program uses vectors and loops to parse the file characters and categorize each token.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

ASSIGNMENT-1

AIM: Write a C++ Programme to count Identifiers, keywords, Numbers and literals.

SOURCE CODE:

#include<bits/stdc++.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

using namespace std;

int isKeyword(char buffer[]){


char keywords[32][10] =
{"auto","break","case","char","const","continue","default",
"do","double","else","enum","extern","float","for","goto",
"if","int","long","register","return","short","signed",
"sizeof","static","struct","switch","typedef","union",
"unsigned","void","volatile","while"};
int i, flag = 0;

for(i = 0; i < 32; ++i){


if(strcmp(keywords[i], buffer) == 0){
flag = 1;
break;
}
}

return flag;
}

int main(){
char ch, buffer[15],b[30], logical_op[] = "><",math_op[]="+-
*/=",numer[]=".0123456789",other[]=",;\(){}[]'':";
ifstream fin("txt.txt");
int mark[1000]={0};
int i,j=0,kc=0,ic=0,lc=0,mc=0,nc=0,oc=0,aaa=0;
vector < string > k;
vector<char >id;
vector<char>lo;
vector<char>ma;
vector<string>nu;
vector<char>ot;
if(!fin.is_open()){
cout<<"error while opening the file\n";
exit(0);
}
while(!fin.eof()){
ch = fin.get();
for(i = 0; i < 12; ++i){
if(ch == other[i]){
int aa=ch;
if(mark[aa]!=1){
ot.push_back(ch);
mark[aa]=1;
++oc;
}
}
}

for(i = 0; i < 5; ++i){


if(ch == math_op[i]){
int aa=ch;
if(mark[aa]!=1){
ma.push_back(ch);
mark[aa]=1;
++mc;
}
}
}
for(i = 0; i < 2; ++i){
if(ch == logical_op[i]){
int aa=ch;
if(mark[aa]!=1){
lo.push_back(ch);
mark[aa]=1;
++lc;
}
}

}
if(ch=='0' || ch=='1' || ch=='2' || ch=='3' || ch=='4' || ch=='5' || ch=='6' || ch=='7' || ch=='8' ||
ch=='9' || ch=='.' ||ch == ' ' || ch == '\n' || ch == ';'){

if(ch=='0' || ch=='1' || ch=='2' || ch=='3' || ch=='4' || ch=='5' || ch=='6' || ch=='7' || ch=='8'


|| ch=='9' || ch=='.')b[aaa++]=ch;
if((ch == ' ' || ch == '\n' || ch == ';') && (aaa != 0)){
b[aaa] = '\0';
aaa = 0;
char arr[30];
strcpy(arr,b);
nu.push_back(arr);
++nc;
}
}

if(isalnum(ch)){
buffer[j++] = ch;
}
else if((ch == ' ' || ch == '\n') && (j != 0)){
buffer[j] = '\0';
j = 0;

if(isKeyword(buffer) == 1){

k.push_back(buffer);
++kc;
}
else{

if(buffer[0]>=97 && buffer[0]<=122) {


if(mark[buffer[0]-'a']!=1){
id.push_back(buffer[0]);
++ic;
mark[buffer[0]-'a']=1;
}

fin.close();
printf("Keywords: ");
for(int f=0;f<kc;++f){
if(f==kc-1){
cout<<k[f]<<"\n";
}
else {
cout<<k[f]<<", ";
}
}
printf("Identifiers: ");
for(int f=0;f<ic;++f){
if(f==ic-1){
cout<<id[f]<<"\n";
}
else {
cout<<id[f]<<", ";
}
}
printf("Math Operators: ");
for(int f=0;f<mc;++f){
if(f==mc-1){
cout<<ma[f]<<"\n";
}
else {
cout<<ma[f]<<", ";
}
}
printf("Logical Operators: ");
for(int f=0;f<lc;++f){
if(f==lc-1){
cout<<lo[f]<<"\n";
}
else {
cout<<lo[f]<<", ";
}

}
printf("Numerical Values: ");
for(int f=0;f<nc;++f){
if(f==nc-1){
cout<<nu[f]<<"\n";
}
else {
cout<<nu[f]<<", ";
}

}
printf("Others: ");
for(int f=0;f<oc;++f){
if(f==oc-1){
cout<<ot[f]<<"\n";
}
else {
cout<<ot[f]<<" ";
}

return 0;
}
INPUT FILE:

OUTPUT:

You might also like