Hello again good people,
i have done some coding on lexical analyzer phase of compiler but it is giving me some error that i am unable to understand..
Fair Warning: Code is a little longer.
Here is the code:
# include <iostream>
# include <fstream>
# include <string.h>
# include <stdlib.h>
# include <stdio.h>
# include <conio.h>
# include <ctype.h>
using namespace std;
const int Rows = 34;
const int Cols = 15;
int iTT[Rows][Cols] = {0};
void loadTransitionTable( )
{
fstream File("tt.txt");
if (!File)
{
cout << "\n Cannot open the input file." << endl;
cout << "\n Press any key to exit.";
getch( );
exit(0);
}
char sInput[100]= {NULL};
for (int i = 0; i < Rows; i ++)
{
strset(sInput, NULL);
File.getline(sInput, 80);
char *sPtr=NULL;
sPtr = strtok(sInput, " ");
iTT[i][0] = atoi(sPtr);
for(int j = 1; j < Cols; j ++)
{
sPtr=strtok(NULL, " ");
iTT[i][j] = atoi(sPtr);
}
}
File.close( );
}
int getNextState(int iState, char cChar)
{
if (isalpha(cChar))
return iTT[iState][1];
else if (isdigit(cChar))
return iTT[iState][2];
else if (cChar == '.')
return iTT[iState][3];
else if (cChar == '"')
return iTT[iState][4];
else if (cChar == '_')
return iTT[iState][6];
else if (cChar == '+')
return iTT[iState][7];
else if (cChar == '=')
return iTT[iState][8];
else if (cChar == '-')
return iTT[iState][9];
else if (cChar == '%')
return iTT[iState][10];
else if (cChar == '!')
return iTT[iState][11];
else if (cChar == '>')
return iTT[iState][12];
else if (cChar == '<')
return iTT[iState][13];
else if (cChar == '/')
return iTT[iState][14];
return iTT[iState][0];
}
int isKeyword(char* sToken)
{
if (strlen(sToken) > 16 || strlen(sToken) == 0)
return 0;
char sKeywords[64][20] = {
"asm","auto","bool","break","case","catch",
"char","class","const","const_cast",
"continue","default","delete","do","double",
"dynamic_cast","else","enum","explicit",
"export","extern","false","float","for",
"friend","goto","if","inline","int","long",
"main","mutable","namespace","new",
"operator","private","protected","public",
"register","reinterpret_cast","return",
"short","signed","sizeof","static",
"static_cast","struct","switch","template",
"this","throw","true","try","typedef",
"typeid","typename","union","unsigned","using",
"virtual","void","volatile","wchar_t","while"
};
for(int iCount = 0; iCount < 64; iCount ++)
{
if (strcmpi(sKeywords[iCount], sToken) == 0)
return 1;
}
return 0;
}
int main( )
{
char input;
int token;
int len;
loadTransitionTable( );
fstream File("input.txt");
cout<<"Please enter the expression to be tokenized: \n";
File>>input;
len=strlen(input); token=0;
if (!File)
{
cout<<"\n Unable to open the input file."<<endl;
cout<<"\n Press any key to exit.";
getch( );
exit(0);
}
char sToken[255] = {NULL};
int iTokenIndex = 0;
char cChar = NULL;
int iState = 0;
int iFlag = 0;
char cTemp = File.get( );
do
{
Start:
if (iFlag == 0)
{
cChar = cTemp;
cTemp = File.get( );
}
else
iFlag = 0;
if (cChar == '/' && cTemp == '/')
{
while(File.get( ) != '\n')
{
if (File.eof( ))
goto End;
}
cout<<'\r';
cTemp = File.get( );
goto Start;
}
if (cChar == '/' && cTemp == '*')
{
cTemp = File.get( );
do
{
cChar = cTemp;
cTemp = File.get( );
if (File.eof( ))
goto End;
}
while(cChar != '*' && cTemp != '/');
cout<<'\r';
cTemp = File.get( );
goto Start;
}
iState = getNextState(iState, cChar);
switch (iState)
{
case 0 : cout << cChar;
iState = 0;
iTokenIndex = 0;
strset(sToken, NULL);
break;
//case 1 :
//case 3 :
//case 5 :
//case 7 :
//case 10 :
//case 14 :
//case 18 :
//case 25 :
case 26 : sToken[iTokenIndex] = cChar;
iTokenIndex ++;
break;
case 2 : if (isKeyword(sToken))
cout << sToken;
else
cout << "<ID>";
iState = 0;
iTokenIndex = 0;
iFlag = 1;
strset(sToken, NULL);
break;
case 4 : cout << "<INT>";
iState = 0;
iTokenIndex = 0;
iFlag = 1;
strset(sToken, NULL);
break;
case 6 : cout << "<FLOAT>";
iState = 0;
iTokenIndex = 0;
iFlag = 1;
strset(sToken, NULL);
break;
case 8 : cout << "<STR>";
iState = 0;
iTokenIndex = 0;
strset(sToken, NULL);
break;
//case 9 :
//case 11 :
//case 12 :
//case 13 :
//case 15 :
//case 16 :
//case 17 :
//case 19 :
//case 20 :
//case 21 :
//case 22 :
//case 23 :
//case 24 :
//case 27 :
case 28 : cout << "<OPR>";
if (cChar != '+' && cChar != '-' && cChar != '/'
&& cChar != '>' && cChar != '<' && cChar != '=')
iFlag = 1;
iState = 0;
iTokenIndex = 0;
strset(sToken, NULL);
break;
//case 30 :
case 33 : iState = 0;
iTokenIndex = 0;
strset(sToken, NULL);
break;
}
}
while(!File.eof( ));
End:
getch( );
return 0;
}
And the errors i am getting are :
H:\New folder\Analyzer.cpp In function 'void loadTransitionTable()':
33 28 H:\New folder\Analyzer.cpp [Warning] converting to non-pointer type 'char' from NULL [-Wconversion-null]
37 27 H:\New folder\Analyzer.cpp [Warning] passing NULL to non-pointer argument 2 of 'char* strset(char*, int)' [-Wconversion-null]
H:\New folder\Analyzer.cpp In function 'int main()':
146 19 H:\New folder\Analyzer.cpp [Error] invalid conversion from 'char' to 'const char*' [-fpermissive]
5 0 H:\New folder\Analyzer.cpp In file included from H:\New folder\Analyzer.cpp
49 40 d:\dev-cpp\mingw32\include\string.h [Error] initializing argument 1 of 'size_t strlen(const char*)' [-fpermissive]
157 29 H:\New folder\Analyzer.cpp [Warning] converting to non-pointer type 'char' from NULL [-Wconversion-null]
160 18 H:\New folder\Analyzer.cpp [Warning] converting to non-pointer type 'char' from NULL [-Wconversion-null]
224 27 H:\New folder\Analyzer.cpp [Warning] passing NULL to non-pointer argument 2 of 'char* strset(char*, int)' [-Wconversion-null]
251 27 H:\New folder\Analyzer.cpp [Warning] passing NULL to non-pointer argument 2 of 'char* strset(char*, int)' [-Wconversion-null]
261 27 H:\New folder\Analyzer.cpp [Warning] passing NULL to non-pointer argument 2 of 'char* strset(char*, int)' [-Wconversion-null]
271 27 H:\New folder\Analyzer.cpp [Warning] passing NULL to non-pointer argument 2 of 'char* strset(char*, int)' [-Wconversion-null]
280 27 H:\New folder\Analyzer.cpp [Warning] passing NULL to non-pointer argument 2 of 'char* strset(char*, int)' [-Wconversion-null]
307 27 H:\New folder\Analyzer.cpp [Warning] passing NULL to non-pointer argument 2 of 'char* strset(char*, int)' [-Wconversion-null]
315 27 H:\New folder\Analyzer.cpp [Warning] passing NULL to non-pointer argument 2 of 'char* strset(char*, int)' [-Wconversion-null]
Ignoring the warning ofc. Any kind of help is deeply appreciated.
Thanks!