0

I have this project where I need to write a code to simulate a DFA to accept url's. The DFA part I have figured out is completely fine, but I am having some problems with the code. The first problem is when I run the code it seems to not go past the cout<<"enter y/n part. The second might be part of it but i get a lot of

27 left operand of comma operator has no effect [-Wunused-value]

27 right operand of comma operator has no effect [-Wunused-value]

27 error: expected ';' before ')' token

31 error: expected primary-expression before 'goto'

31 error: expected ')' before 'goto'

at each of the for loops for some reason

#include <iostream> #include <string.h> #include <stdlib.h> using namespace std; int main() { char asdf='y'; string str; int stringlength,state; while (asdf=='y'){ start: cout << "Do you want to enter a string?(y/n)\n"; cin >> asdf; cout << "Enter the string:\n"; cin >> str; stringlength=str.size(); state=0; //transition states q0 start //w means goto q1,increment state by 1 if(str[0]=='w'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q1; } //. means trap state,loop the rest of the char's and output trap state and output "rejected", then return to start if(str[0]=='.'){ state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; } //not w and not . means goto q7 cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q7; q1: //w means goto q2 if (str[1]=='w'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q2; } //. means go to q6 if (str[1]=='.'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q6; } //not w and not . means goto q7 cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q7; q2: //w means goto q3 if (str[2]=='w'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q3; } //. means go to q6 if (str[2]=='.'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q6; } //not w and not . means goto q7 cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q7; q3: //w means goto q3 if (str[3]=='.'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q4; } //not . means goto q7 cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q7; q4: //. mean trap state if (str[4]=='.'){ state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; } //everything else goes to q5 cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q5; q5: //. means goto q6 if (str[state]=='.'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q6; } //everything else goes back to q5 cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q5; q6: //c means goto q8 if (str[state]=='c'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q8; } //everything else goes to trap state state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; q7: //. means goto q6 if (str[state]=='.'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q6; } //everything else goes back to q7 cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q7; q8: //o means goto q9 if (str[state]=='o'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q9; } //everything else goes to trap state state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; q9: //m means goto q10 if (str[state]=='m'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q10; } //. means goto q11 if (str[state]=='.'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q11; } //everything else goes to trap state state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; q10: //compare length of string to state,if it matches there are no more char in string and is accepted if (stringlength==state){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; cout << "accepted\n"; goto start; } //everything else goes to trap state state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; q11: //j means goto q12 if (str[state]=='j'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q12; } //everything else goes to trap state state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; q12: //p means goto q13 if (str[state]=='p'){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; state++; goto q13; } //everything else goes to trap state state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; q13: //compare length of string to state,if it matches there are no more char in string and is accepted if (stringlength==state){ cout << "character:"<<str[state]<<" "<<"state:"<<state<<"\n"; cout << "accepted\n"; goto start; } //everything else goes to trap state state=stringlength-state; for(state,state>0,state--){ cout << "character:"<<str[stringlength-state]<<" "<<"state:trap\n"; } cout << "rejected\n"; goto start; } return 0; } 
2
  • Your code would be soooo much easier to debug and understand if you used a table for your states. Wow, you could use pointers to functions for special cases. Search the web for "c++ state design pattern". Commented Sep 30, 2014 at 21:59
  • I prefer meatballs with my spaghetti code offerings. :-) Commented Sep 30, 2014 at 22:00

1 Answer 1

2

You need to use semicolons instead of commas to separate the three expressions in the for loops:

 for(state,state>0,state--){ ^-------^ Change these to ; 
Sign up to request clarification or add additional context in comments.

1 Comment

also the initialization of the for-loop has no meaning (there is no initialization there)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.