private void RestartButtonClicked(object sender, EventArgs e) { TokensLabel.Text = ""; TokensLabel.Hide(); LexemeTextBox.Text = ""; state = nameofState.START; }
public void getToken(string s) { string mytoken = ""; bool res_flag = false; int i = 0; while (state != nameofState.END) { switch (state) { case nameofState.START: if (isSpace(s[i])) { i++; if (i == s.Length) { state = nameofState.END; } else { state = nameofState.START; } } else if (isDigit(s[i])) { state = nameofState.NUMBER; } else if (isLetter(s[i])) { state = nameofState.IDENTIFIER; } else if (s[i] == ':') { state = nameofState.ASSIGNMENT; } else if (s[i] == '/' && s[i + 1] == '*') { state = nameofState.COMMENTSTATEMENT; } else if (isSymbol(s[i])) { switch (s[i]) { case ';': TokensLabel.Text += tokenindicator + s[i] + "\n"; break; case '"': mytoken += s[i]; do { i++; mytoken += s[i]; }while (s[i] != '"'); i++; TokensLabel.Text += tokenindicator + mytoken + " ---- string \n"; mytoken = ""; break; case '|': case '&': mytoken += s[i]; i++; mytoken += s[i]; i++; TokensLabel.Text += tokenindicator + mytoken + " ---- boolean_operator \n"; mytoken = ""; break; case '+': case '-': case '*': case '/': case '–': mytoken += s[i]; TokensLabel.Text += tokenindicator + mytoken + " ---- arithmetic operator \n"; mytoken = ""; break; case '>': case '<': case '=': mytoken += s[i]; TokensLabel.Text += tokenindicator + mytoken + " ---- condition operator \n"; mytoken = ""; break; default: TokensLabel.Text += s[i] + " ---- symbol \n"; break; } i++; if (i == s.Length) { state = nameofState.END; } else { state = nameofState.START; } } else { state = nameofState.END; } break; case nameofState.COMMENTSTATEMENT: if (state == nameofState.COMMENTSTATEMENT) { mytoken += s[i]; i++; while (s[i] != '/') { mytoken += s[i]; i++; } mytoken += s[i]; TokensLabel.Text += tokenindicator + mytoken + " ---- comment statement \n"; i++; mytoken = ""; if (i == s.Length) { state = nameofState.END; } else { state = nameofState.START; } } break; case nameofState.NUMBER: while (isDigit(s[i]) || s[i] == '.') { mytoken += s[i]; i++; } TokensLabel.Text += tokenindicator + mytoken + " ---- number \n"; mytoken = ""; if (i == s.Length) { state = nameofState.END; } else { state = nameofState.START; } break; case nameofState.IDENTIFIER: while (isLetter(s[i]) || isDigit(s[i])) { mytoken += s[i]; i++; } for (int count = 0; count < 13; count++) { if (RESERVERDWORD[count] == mytoken) { res_flag = true; switch (RESERVERDWORD[count]) { case "return": mytoken += s[i]; while (s[i] != ';') { i++; mytoken += s[i]; } TokensLabel.Text += tokenindicator + mytoken + " ---- return statement \n"; break; case "int": case "float": case "string": TokensLabel.Text += tokenindicator + mytoken + " ---- reserved word(datatype) \n"; break; case "if": TokensLabel.Text += tokenindicator + mytoken + " ---- reserved word(if statement) \n"; break; case "write": mytoken += s[i]; TokensLabel.Text += tokenindicator + mytoken + " ---- write statement \n"; break; case "read": mytoken += s[i]; TokensLabel.Text += tokenindicator + mytoken + " ---- read statement \n"; break; case "repeat": TokensLabel.Text += tokenindicator + mytoken + " ---- reserved word(repeat statement) \n"; break; default: TokensLabel.Text += tokenindicator + mytoken + " ---- reserved word \n"; break; } } ; } if (s[i] == '(') { mytoken += s[i]; do { i++; mytoken += s[i]; }while (s[i] != ')'); i++; TokensLabel.Text += tokenindicator + mytoken + " ---- function call \n"; } else if (res_flag == false) { TokensLabel.Text += tokenindicator + mytoken + " ---- identifier \n"; } mytoken = ""; res_flag = false; if (i == s.Length) { state = nameofState.END; } else { state = nameofState.START; } break; case nameofState.ASSIGNMENT: if (s[i] == ':') { TokensLabel.Text += tokenindicator + ":= ---- assignment operator \n"; i += 2; state = nameofState.START; } else { if (i == s.Length) { state = nameofState.END; } else { state = nameofState.START; } } break; case nameofState.END: break; } } }
public void getNexttokenParser(string s, ref string CurrentToken, ref int startFromHere, ref nameofState state) { state = nameofState.START; if (startFromHere == s.Length) { state = nameofState.END; } else { state = nameofState.START; } CurrentToken = ""; bool res_flag = false; while (state != nameofState.END) { switch (state) { case nameofState.START: if (isSpace(s[startFromHere])) { while (s[startFromHere] != '$') { startFromHere++; if (startFromHere == s.Length) { state = nameofState.END; break; } else { state = nameofState.START; } } startFromHere++; } else if (isDigit(s[startFromHere])) { state = nameofState.NUMBER; } else if (isLetter(s[startFromHere])) { state = nameofState.IDENTIFIERorRESERVEDWORD; } else if (s[startFromHere] == ':') { state = nameofState.ASSIGNMENT; } else if (s[startFromHere] == '/' && s[startFromHere + 1] == '*') { state = nameofState.COMMENTSTATEMENT; } else if (isSymbol(s[startFromHere])) { switch (s[startFromHere]) { case '(': CurrentToken += s[startFromHere]; startFromHere++; return; case ')': CurrentToken += s[startFromHere]; startFromHere++; return; case ';': CurrentToken += s[startFromHere]; startFromHere++; return; case '"': CurrentToken += s[startFromHere]; do { startFromHere++; CurrentToken += s[startFromHere]; }while (s[startFromHere] != '"'); startFromHere++; return; case '|': case '&': CurrentToken += s[startFromHere]; startFromHere++; CurrentToken += s[startFromHere]; startFromHere++; return; case '+': case '-': case '–': CurrentToken += s[startFromHere]; startFromHere++; state = nameofState.OPERATOR; return; case '*': case '/': CurrentToken += s[startFromHere]; startFromHere++; state = nameofState.OPERATOR; return; case '>': case '<': case '=': CurrentToken += s[startFromHere]; startFromHere++; state = nameofState.OPERATOR; return; case ':': CurrentToken += s[startFromHere]; startFromHere++; return; default: break; } startFromHere++; if (startFromHere == s.Length) { state = nameofState.END; } else { state = nameofState.START; } } else { state = nameofState.END; } break; case nameofState.COMMENTSTATEMENT: if (state == nameofState.COMMENTSTATEMENT) { CurrentToken += s[startFromHere]; startFromHere++; while (s[startFromHere] != '/') { CurrentToken += s[startFromHere]; startFromHere++; } CurrentToken += s[startFromHere]; startFromHere++; return; } break; case nameofState.NUMBER: while (isDigit(s[startFromHere]) || s[startFromHere] == '.') { CurrentToken += s[startFromHere]; startFromHere++; } return; case nameofState.IDENTIFIERorRESERVEDWORD: while (isLetter(s[startFromHere]) || isDigit(s[startFromHere])) { CurrentToken += s[startFromHere]; startFromHere++; } for (int count = 0; count < 13; count++) { if (RESERVERDWORD[count] == CurrentToken) { state = nameofState.RESERVEDWORD; res_flag = true; switch (RESERVERDWORD[count]) { case "return": CurrentToken += s[startFromHere]; while (s[startFromHere] != ';') { startFromHere++; CurrentToken += s[startFromHere]; } startFromHere++; return; case "int": case "float": case "string": TokensLabel.Text += CurrentToken + " ---- reserved word(datatype) \n"; return; case "if": return; case "write": return; case "read": return; case "repeat": return; case "end": return; default: return; } } ; } if (s[startFromHere] == '(') { CurrentToken += s[startFromHere]; do { startFromHere++; CurrentToken += s[startFromHere]; }while (s[startFromHere] != ')'); startFromHere++; return; } else if (res_flag == false) { state = nameofState.IDENTIFIER; return; } CurrentToken = ""; res_flag = false; if (startFromHere == s.Length) { state = nameofState.END; } else { state = nameofState.START; } break; case nameofState.ASSIGNMENT: if (s[startFromHere] == ':') { CurrentToken += s[startFromHere]; startFromHere++; CurrentToken += s[startFromHere]; startFromHere++; return; } else if (s[startFromHere] == '=') { CurrentToken += s[startFromHere]; startFromHere++; return; } else { if (startFromHere == s.Length) { state = nameofState.END; } else { state = nameofState.START; } } break; case nameofState.END: break; } } }