Guest User

Untitled

a guest
Jan 12th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <limits>
  3.  
  4. char ch;
  5. bool error_c = 0;
  6.  
  7. void Read();
  8. void Expression();
  9. void Radical();
  10. void Natural();
  11. void Number();
  12. void TryRead();
  13. void Error();
  14.  
  15. int main() {
  16.     while (true) {
  17.         TryRead();
  18.         if (!error_c) {
  19.             std::cout << "Parsing complete!\n";
  20.         }
  21.     }
  22.     return 0;
  23. }
  24.  
  25. void Expression() {
  26.     if (error_c) return;
  27.     if ((ch == 'V') || (ch == '{')) {
  28.         Radical();
  29.         Expression();
  30.     }
  31.     else if (ch == '(') {
  32.         Read();
  33.         Expression();
  34.         if ((ch == '+') || (ch == '-')) Read(); else { Error(); return;}
  35.         Expression();
  36.         if (ch == ')') Read(); else { Error(); return; }
  37.     }
  38.     else if ((ch > '0') && (ch <= '9')) {
  39.         Natural();
  40.     } else {Error(); return;}
  41. }
  42.  
  43. void Radical() {
  44.     if (ch == 'V') Read();
  45.     else if (ch == '{') {
  46.         Read();
  47.         Natural();
  48.         if (ch == '}') Read(); else {Error(); return;}
  49.         if (ch == 'V') Read(); else {Error(); return;}
  50.     } else Error();
  51. }
  52.  
  53. void Natural() {
  54.     if ((ch > '0') && (ch <= '9')) Read(); else Error();
  55.     Number();
  56. }
  57.  
  58. void Number() {
  59.     if ((ch >= '0') && (ch <= '9')) {
  60.         Read();
  61.         Number();
  62.     }
  63. }
  64.  
  65. void Error() {
  66.     std::cout << "Error parsing expression!\n";
  67.     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
  68.     std::cin.clear();
  69.     error_c = 1;
  70. }
  71.  
  72. void TryRead() {
  73.     error_c = 0;
  74.     std::cout << "Enter expression (it should end with '.' e.g. \"1234.\" is valid expression): ";
  75.     std::cin >> ch;
  76.     Expression();
  77. }
  78.  
  79. void Read() {
  80.     std::cin >> ch;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment