开发者

Parser Help Program Not Working

--> ---> a | b ---> 1 | 1

It's suppose to start will a or b and 1 afterward. it doesn't matter how many 1's are after a or b. for example: a1, b1, b111111, a111 everything I type in is invalid but this is supposed to be valid: a1, b1, b111111, a111

/*
<S> -->开发者_如何转开发 <A><B>
<A> --->  a | b
<B> --->  1 | 1 <B>

It suppose to be vaild for example: a1, b1, b111111, a111
*/
#include <iostream>
#include<stdlib.h>  // for the exit(1) function
using namespace std;

char text[100];
char ToBeChecked;

char lexical(); //identify the characters
void SProd();
void AProd();
void BProd();


int main()
{
    cout<<"Enter a string(max. 100 characters"<<endl;
    cin>>text;

    ToBeChecked = lexical(); //identify the character; find the first letter and give it to ToBeChecked
    SProd();

    if(ToBeChecked = '\0')
        cout<<"Valid"<<endl;
        else
        cout<<"Invalid"<<endl;
    cin.get();
    return 0;
}

char lexical()
{
    static int index = -1;   //a memory box named index with a value of -1; is static so it won't change.
                            //is -1 because -1 to 1 is 0; everytime move on to next one
    index++; //update index
    return text[index]; //return the value of index
}

//<S> --> <A> <B>
void SProd()
{
    AProd();
    BProd();
}

//<A> --->  a | b
void AProd()
{
   if(ToBeChecked == 'a'){
       ToBeChecked = lexical();
   }
   else
   {
       if(ToBeChecked == 'b'){
           ToBeChecked = lexical();
       }
    }
 }

 //<B> --->  1 | 1 <B>
 void BProd()
 {
     if(ToBeChecked != '1')
     {
         cout<<"Invalid"<<endl;
         exit(1);
     }
     else
         while (ToBeChecked == '1')
             ToBeChecked = lexical();
 }


Look carefully at this line

if(ToBeChecked = '\0')

what does it do, and why might that not be what you want?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜