Advertisement
Coder_22

Lexical Analyzer

Jan 4th, 2025
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4.     vector<set<string>> sto;
  5.     set<string> st{"if", "else", "then", "for", "while",
  6.                    "int", "string", "float", "char"};
  7.     sto.push_back(st);
  8.     st.clear();
  9.     st = {"+", "-", "*", "/", "++", "--"};
  10.     sto.push_back(st);
  11.     st.clear();
  12.     st = {"==", ">", "<", ">=", "<=", "!="};
  13.     sto.push_back(st);
  14.     st.clear();
  15.     st = {"&", "|", "~", "^", ">>", "<<"};
  16.     sto.push_back(st);
  17.     st.clear();
  18.     st = {"&&", "||", "!"};
  19.     sto.push_back(st);
  20.     st.clear();
  21.     st = {"="};
  22.     sto.push_back(st);
  23.     st.clear();
  24.     st = {";", "(", ")"};
  25.     sto.push_back(st);
  26.     string s, r;
  27.     getline(cin, s);
  28.     map<string, int> cnt;
  29.     for (auto &e : s) {
  30.         if (e == ' ' or e == '(' or e == ')' or e == ';') {
  31.             cnt[r]++;
  32.             r = e;
  33.             cnt[r]++;
  34.             r.clear();
  35.         } else
  36.             r += e;
  37.     }
  38.     cnt.erase(" ");
  39.     cnt.erase(cnt.begin());
  40.     set<pair<string, int>> id, flo, in, ari, bit, rel,
  41.         as, pun, key, log, ps;
  42.     for (auto [f, s] : cnt) {
  43.         bool ok = 1;
  44.         for (int i = 0; i < 7; ++i) {
  45.             if (sto[i].find(f) != sto[i].end()) {
  46.                 ok = 0;
  47.                 if (!i)
  48.                     key.insert({f, s});
  49.                 else if (i == 1)
  50.                     ari.insert({f, s});
  51.                 else if (i == 2)
  52.                     rel.insert({f, s});
  53.                 else if (i == 3)
  54.                     bit.insert({f, s});
  55.                 else if (i == 4)
  56.                     log.insert({f, s});
  57.                 else if (i == 5)
  58.                     as.insert({f, s});
  59.                 else
  60.                     ps.insert({f, s});
  61.                 break;
  62.             }
  63.         }
  64.         if (!ok) continue;
  65.         ok = 1;
  66.         for (auto e : f) {
  67.             if (e == ' ' || e == ';' || e == '(' || e == ')') {
  68.                 ps.insert({f, s});
  69.                 ok = 0;
  70.                 break;
  71.             }
  72.             if (e >= 'a' and e <= 'z') {
  73.                 id.insert({f, s});
  74.                 ok = 0;
  75.                 break;
  76.             }
  77.             if (e == '.') {
  78.                 flo.insert({f, s});
  79.                 ok = 0;
  80.                 break;
  81.             }
  82.         }
  83.         if (ok) in.insert({f, s});
  84.     }
  85.     cout << "IDENTIFIER:\t";
  86.     for (auto &[f, s] : id)
  87.         cout << f << "(" << s << ") ";
  88.     cout << '\n';
  89.     cout << "Keyword:\t";
  90.     for (auto &[f, s] : key)
  91.         cout << f << "(" << s << ") ";
  92.     cout << '\n';
  93.     cout << "OPERATOR:\nArithmetic Operator:\t";
  94.     for (auto &[f, s] : ari)
  95.         cout << f << "(" << s << ") ";
  96.     cout << '\n';
  97.     cout << "Relational Operator:\t";
  98.     for (auto &[f, s] : rel)
  99.         cout << f << "(" << s << ") ";
  100.     cout << '\n';
  101.     cout << "Assignment Operator:\t";
  102.     for (auto &[f, s] : as)
  103.         cout << f << "(" << s << ") ";
  104.     cout << '\n';
  105.     cout << "Bitwise Operator:\t";
  106.     for (auto &[f, s] : bit)
  107.         cout << f << "(" << s << ") ";
  108.     cout << '\n';
  109.     cout << "PUNCTUATION SYMBOL:\t";
  110.     for (auto &[f, s] : ps)
  111.         cout << f << "(" << s << ") ";
  112.     cout << '\n';
  113.     cout << "INTEGER:\t";
  114.     for (auto &[f, s] : in)
  115.         cout << f << "(" << s << ") ";
  116.     cout << '\n';
  117.     cout << "FLOAT:\t";
  118.     for (auto &[f, s] : flo)
  119.         cout << f << "(" << s << ") ";
  120.     cout << '\n';
  121.     return 0;
  122. }
  123.  
  124. // if (a == b) then (c = 10 + 2 * a & d = 12.56 + 3.5 - 2);
  125.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement