#include <iostream>
#include <fstream>

using namespace std;

char RW[10];
char id[10];

void populateArray(char ch, int &i, char * array);
void valid(char *array,  int i);


#define MINUS '-'
#define PLUS '+'
#define TIMES '*'
#define DIVIDE '/'
#define EQL '='
#define LP '('
#define RP ')'
#define SEMIC ';'
#define LSS '<'
#define GTR '>'
#define COMMA ','
#define DOLLAR '$'

// parser
char getsym();
void func_e(char &sym);
void funcc_t(char &sym);
void func_S(char &sym);
void func_E(char &sym);
void func_T(char &sym);
void func_F(char &sym);

int main()
{
    int i = 0;
    char ch = 'i';
	char nextsym;
    char array[10];

    ifstream infile;

    cout << "welcome to the Lexical Scanner" << endl;

		//this bit is the lexcial scanner input from a file. Not used


    /* infile.open("new.txt");
        if(infile.fail())
          {
           cout << "unable to load sourcefile" << endl;
           exit(1);
          }
        else
			{
			while((ch = infile.get()) != EOF )
            {
            if ( ch != ' ') // strip out whitespaces from txt
			   {
               populateArray(ch, i, array);
              }  
            }
          }*/

		valid(array,i);

	cout << "\n\n\nHandling input to the parser \n\n"<<endl;

	nextsym = getsym();
	func_T(nextsym);

return 0;
}


char getsym()
{
	static char array[5] = "a*b$";
	static int i = -1;
	++i;

return array[i];
	
}
	

void func_e(char &sym)
{
	cout << "in funct_e, checking for +: " << sym << endl;
	if(sym == '+')
	{
		sym=getsym();
		func_T(sym);
		func_e(sym);
	}

}
void funcc_t(char &sym)
{	cout << "In funct_t, checking for * = " << sym << endl;
	if(sym=='*')
	{
		sym=getsym();
		func_F(sym);
		func_T(sym);
	}
}
void func_S(char &sym)
{
	//func_E(sym);

	if(sym!='$')
	{
		cout << "error missing dollar"<<endl;
		exit(1);
	}
	else
	{
		cout << "Parse sucesfful" << endl;
		exit(1);
	}
}
void func_E(char &sym)
{
	funcc_t(sym);
	func_e(sym);
}

void func_T(char &sym)
{
	func_F(sym);
	funcc_t(sym);
}
void func_F(char &sym)
{
	//cout << "In funct_F, checking for id: = " << sym << endl;
	//char id;
//	for(int i = 0; i<3; i++)
//	{
	//	cout << "going through the loop" << endl;
		//if(sym==RW[i])
		//{
			cout << "Error on the input stream, ID expected" << endl;
		//	func_S(sym);
		//}	
	//}
	
	/*id = sym;

	if(sym==id){}
		//sym=getsym();

	else
		if(sym=='(')
		{
			//sym=getsym();
		//	func_E(sym);
			if(sym==')'){}
			//	sym=getsym();
			else
			{
				cout << "error missing brackets" <<endl;
				exit(1);
			}
		}
		else
		{
		cout << "error missing id" <<endl;
		exit(1);
		}
*/
}

void populateArray(char ch, int &i ,char *array)
{
    array[i] = ch;
    i++;
	
}

void valid(char * array,  int i )
{
	int j = 0;
	int h = 0;
	int c = 0;

while(j<i)
    {
      switch(array[j])
           {
            case PLUS:
              cout << "its a plus" <<endl;
						  RW[h] = PLUS;
						  h++;
             break;

            case MINUS:
              cout << "minus found" <<endl;
							RW[h] = MINUS;
							h++;
             break;

            case TIMES:
              cout << "Times found" <<endl;
					  	RW[h] = TIMES;
						  h++;
             break;

            case DIVIDE:
             cout << "Divide found" <<endl;
						 RW[h] = DIVIDE;
						 h++;
            break;

            case EQL:
             cout << "Equals found " <<endl;
						 RW[h] = EQL;
					   h++;
            break;

            case LP:
             cout << "LP ( found" << endl;
						 RW[h] = LP;
						 h++;
            break;

            case RP:
             cout << "RP ) found" << endl;
						 RW[h] = RP;
						 h++;
            break;

            case SEMIC:
             cout << "semiclon found" << endl;
						 strcpy(&RW[h],"SEMIC");
						 h++;
            break;

            case LSS:
             cout << "Less than found  < " << endl;
						 RW[h] = LSS;
						 h++;
            break;

           case GTR:
            cout << "Greater than found " << endl;
						RW[h] = GTR;
						h++;
           break;

            case 'i': // reconize if's
              if (array[++j] == 'f')
                  cout << "if" <<endl;;
				          strcpy(&RW[h],"if");
						      h++;
            break;

           case 'e': // reconize else's
			       if (array[++j] == 'l')
						 {
				      if(array[++j] == 's')
							{
					     if(array[++j] == 'e')
							 {	
                cout << "else found" << endl;	
					   	  strcpy(&RW[h],"else");
						    h++;
							 }
							}
						 }
           break;

             case 't':
               if (array[++j] == 'h')
                if(array[++j] == 'e')
                 if(array[++j] == 'n')
                   cout << "then found" << endl;
						       strcpy(&RW[h],"then");
						       h++;
             break;

               case 'f':
                 if (array[++j] == 'u')
                  if(array[++j] == 'n')
                   if(array[++j] == 'c')
                    if (array[++j] == 't')
                     if(array[++j] == 'i')
                      if(array[++j] == 'o')
                       if(array[++j] == 'n')
                          cout << "function found " <<endl;
						              strcpy(&RW[h],"function");
						              h++;
               break;


			         case DOLLAR:
				        cout << "its a dollar" << endl;
				   	    RW[h] = DOLLAR;
						    h++;
						   break;

			        default:
								{
				        id[c] = array[j];
					      c++;
								}
				  }

       }
   j++;
}

why is it when theres nothing in func_F thats funcc_t() gets called? I cant work out where its been called from. Really bugging me Can anyone help please?

Recommended Answers

All 2 Replies

see the last line of main()

return 0; ? :)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.