Code
#include <iostream> #include <stdlib.h> using namespace std; /* E->TE' E'->+TE'|-TE'|null T-> FT' T'->*FT'|/FT'|null F-> id|num|(E) */ int count = 0; void E(); void Ed(); void T(); void Td(); void F(); string expr; int main() { cin >> expr; int l = expr.length(); expr += "$"; E(); if (l == count) cout << "Accepted" << endl; else cout << "Rejected" << endl; } void E() { cout << "E->TE'" << endl; T(); Ed(); } void Ed() { if (expr[count] == '+') { count++; cout << "E'->+TE'" << endl; T(); Ed(); } else if (expr[count] == '-') { count++; cout << "E'->-TE'" << endl; T(); Ed(); } else { cout << "E'->null" << endl; } } void T() { cout << "T->FT'" << endl; F(); Td(); } void Td() { if (expr[count] == '*') { count++; cout << "T'->*FT'" << endl; F(); Td(); } else if (expr[count] == '/') { count++; cout << "T'->/FT'" << endl; F(); Td(); } else { cout << "T'->null" << endl; } } void F() { if (isalpha(expr[count])) { count++; cout << "F->id" << endl; } else if (isdigit(expr[count])) { count++; cout << "F->digit" << endl; } else if (expr[count] == '(') { count++; cout << "F->(E)" << endl; E(); if (expr[count] != ')') { cout << "Rejected" << endl; exit(0); } count++; } else { cout << "Rejected" << endl; exit(0); } }
Output
[duke@duke-pc b7]$ g++ b7.cpp [duke@duke-pc b7]$ ./a.out a*2-3 E->TE' T->FT' F->id T'->*FT' F->digit T'->null E'->-TE' T->FT' F->digit T'->null E'->null Accepted
No comments:
Post a Comment