Facebook
From Bistre Pudu, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 295
  1. Node *PolynomialParser::ParseC(int k) {
  2.     char *start = input;
  3.  
  4.     if (accept('(')) {
  5.         auto n = ParseW(k + 1);
  6.  
  7.         if (n == nullptr) {
  8.             input = start;
  9.             return nullptr;
  10.         } else {
  11.             if (accept(')')) {
  12.                 if (accept('^')) {
  13.                     if (accept('[')) {
  14.                         auto m = ParseL(k + 1);
  15.                         if (accept(']')) {
  16.                             if (m == nullptr) {
  17.                                 input = start;
  18.                                 return nullptr;
  19.                             } else {
  20.                                 if (accept('^')) {
  21.                                     input = start;
  22.                                     return nullptr;
  23.                                 } else {
  24.                                     n = new Node(Node::Type::POW, n, m);
  25.                                     return n;
  26.                                 }
  27.                             }
  28.                         } else {
  29.                             input = start;
  30.                             return nullptr;
  31.                         }
  32.                     } else {
  33.                         input = start;
  34.                         return nullptr;
  35.                     }
  36.                 } else {
  37.                     return n;
  38.                 }
  39.             } else {
  40.                 input = start;
  41.                 return nullptr;
  42.             }
  43.         }
  44.     } else {
  45.         if (accept('x')) {
  46.             return new Node(Node::Type::VAR);
  47.         } else {
  48.             if (accept('[')) {
  49.                 auto n = ParseL(k + 1);
  50.                 if (accept(']')) {
  51.                     if (n != nullptr) {
  52.                         if (accept('^')) {
  53.                             if (accept('[')) {
  54.                                 auto m = ParseL(k + 1);
  55.  
  56.                                 if (accept(']')) {
  57.                                     if (m == nullptr) {
  58.                                         input = start;
  59.                                         return nullptr;
  60.                                     } else {
  61.                                         n = new Node(Node::Type::POW, n, m);
  62.                                         return n;
  63.                                     }
  64.                                 } else {
  65.                                     input = start;
  66.                                     return nullptr;
  67.                                 }
  68.                             } else {
  69.                                 input = start;
  70.                                 return nullptr;
  71.                             }
  72.                         } else {
  73.                             return n;
  74.                         }
  75.                     } else {
  76.                         return nullptr;
  77.                     }
  78.                 } else {
  79.                     return nullptr;
  80.                 }
  81.             } else {
  82.                 return nullptr;
  83.             }
  84.         }
  85.     }
  86. }