Lexical Analyser Program in CPP
Lexical Analyser Program in CPP
lex_ptr+=2;
while(input.at(fwd_ptr)!='*' && input.at(fwd_ptr+1)!='/'
)
{
fwd_ptr++;
lex_ptr++;
if(input.at(fwd_ptr)=='\n' || input.at(fwd_ptr)=='\0
')
{
if(getline(read,input)!=NULL)
{
fwd_ptr=0;
lex_ptr=0;
}
else
{
write << "\t\tError: Unclosed Comment\n";
fwd_ptr=9999;
break;
}
}
}
if(fwd_ptr==9999)
continue;
fwd_ptr+=2;
lex_ptr+=2;
}
else
{
write << "\t\tOperator\n";
}
}
else if(input.at(fwd_ptr)=='"') //check if its a starting of a s
tatement to be printed
{
fwd_ptr++;
lex_ptr++;
while(input.at(fwd_ptr)!='"')
{
fwd_ptr++;
lex_ptr++;
}
fwd_ptr++;
lex_ptr++;
}
else if(isspace(input.at(fwd_ptr)))
//check whether the char
acter is white-space or not
{
fwd_ptr++;
lex_ptr++;
}
else if(isValidConstant(input.at(fwd_ptr)))
{
fwd_ptr++;
while(isValidConstant(input.at(fwd_ptr)))
{
fwd_ptr++;
}
while(lex_ptr<fwd_ptr)
{
{
write << input.at(fwd_ptr) << "\t\tError: Invalid Symbol\n";
fwd_ptr++;
lex_ptr++;
}
}
}
}
return 0;
}
bool isValidIdentifier(char test)
{
if(isalpha(test) || isdigit(test) || test=='_')
return true;
else
return false;
}
bool isValidOperator(char test)
{
char operators[]={'+','-','*','%','^','<','>','=','&','|','!'};
int i=0;
bool flag=false;
for(i=0;i<8;i++)
{
if(test==operators[i])
{
flag=true;
break;
}
else
{
flag=false;
}
}
return flag;
}
bool isValidConstant(char test)
{
if(isdigit(test))
return true;
else
return false;
}
bool isValidSpecialSymbol(char test)
{
char symbols[]={'#','(',')','{','}',',',';','.','[',']'};
int i=0;
bool flag=false;
for(i=0;i<10;i++)
{
if(test==symbols[i])
{
flag=true;
break;
}
else
flag=false;
}
return flag;
}