apl-mhd

compiler

Jul 29th, 2019
147
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<cstdio>
  2. #include <ctype.h>
  3. #include <map>
  4. #include <string>
  5. #include <iostream>
  6. #include <stack>
  7.  
  8.  
  9. using namespace std;
  10.  
  11.  
  12.  
  13. map<char, int> charPriorty;
  14. stack<char> s;
  15.  
  16. void postfix() {
  17.  
  18.     charPriorty['+'] = 1;
  19.     charPriorty['-'] = 1;
  20.     charPriorty['*'] = 2;
  21.     charPriorty['/'] = 2;
  22.  
  23.     string infix;
  24.  
  25.     cin >> infix;
  26.  
  27.     int i = 0;
  28.  
  29.     while (infix[i] != '\0') {
  30.  
  31.         if (infix[i] >= 'a' && infix[i] <= 'z') {
  32.  
  33.             cout << infix[i] << " ";
  34.         } else if (infix[i] == '(') {
  35.  
  36.             s.push(infix[i]);
  37.         } else if (infix[i] == ')') {
  38.  
  39.             while (s.top() != '(') {
  40.  
  41.                 cout << s.top() << " ";
  42.                 s.pop();
  43.             }
  44.             s.pop();
  45.  
  46.         } else if (s.size() == 0) {
  47.             s.push(infix[i]);
  48.         } else if ((infix[i] == '+' || infix[i] == '-') and (s.top() == '*' || s.top() == '/')) {
  49.             while (s.size() != 0) {
  50.                 cout << s.top() << " ";
  51.                 s.pop();
  52.             }
  53.  
  54.             s.push(infix[i]);
  55.  
  56.         } else if ( charPriorty[infix[i]] ==charPriorty[s.top()]) {
  57.  
  58.             cout << s.top() << " ";
  59.             s.pop();
  60.             s.push(infix[i]);
  61.  
  62.         } else{
  63.  
  64.             s.push(infix[i]);
  65.         }
  66.  
  67.         i++;
  68.     }
  69.  
  70.     while(!s.empty()){
  71.  
  72.         cout<<s.top()<<" ";
  73.         s.pop();
  74.  
  75.     }
  76.  
  77. }
  78.  
  79.  
  80.  
  81. void prefix() {
  82.  
  83.     charPriorty['+'] = 1;
  84.     charPriorty['-'] = 1;
  85.     charPriorty['*'] = 2;
  86.     charPriorty['/'] = 2;
  87.  
  88.     string prefix;
  89.  
  90.     cin >> prefix;
  91.  
  92.  
  93.     int len = prefix.size();
  94.  
  95.     int i=0;
  96.     int j = len-1;
  97.     while(i<j){
  98.  
  99.         char temp = prefix[i];
  100.         prefix[i] = prefix[j];
  101.         prefix[j] = temp;
  102.         i++;
  103.         j--;
  104.  
  105.     }
  106.  
  107.  
  108.      i = 0;
  109.  
  110.     while (prefix[i] != '\0') {
  111.  
  112.         if (prefix[i] >= 'a' && prefix[i] <= 'z') {
  113.  
  114.             cout << prefix[i] << " ";
  115.         } else if (prefix[i] == '(') {
  116.  
  117.             s.push(prefix[i]);
  118.         } else if (prefix[i] == ')') {
  119.  
  120.             while (s.top() != '(') {
  121.  
  122.                 cout << s.top() << " ";
  123.                 s.pop();
  124.             }
  125.             s.pop();
  126.  
  127.         } else if (s.size() == 0) {
  128.             s.push(prefix[i]);
  129.         } else if ((prefix[i] == '+' || prefix[i] == '-') and (s.top() == '*' || s.top() == '/')) {
  130.             while (s.size() != 0) {
  131.                 cout << s.top() << " ";
  132.                 s.pop();
  133.             }
  134.  
  135.             s.push(prefix[i]);
  136.  
  137.         } else if ( charPriorty[prefix[i]] ==charPriorty[s.top()]) {
  138.  
  139.             cout << s.top() << " ";
  140.             s.pop();
  141.             s.push(prefix[i]);
  142.  
  143.         } else{
  144.  
  145.             s.push(prefix[i]);
  146.         }
  147.  
  148.         i++;
  149.     }
  150.  
  151.     while(!s.empty()){
  152.  
  153.         cout<<s.top()<<" ";
  154.         s.pop();
  155.  
  156.     }
  157.  
  158. }
  159.  
  160.  
  161.  
  162.  
  163. int main()
  164. {
  165.  
  166.  
  167.    
  168.  
  169.     //postfix();
  170.  
  171.  
  172.    //prefix();
  173.  
  174.  
  175.  
  176.     return  0;
  177. }
RAW Paste Data