Friday, 24 January 2020

variable declaration of c program

  1. #include <stdbool.h>
  2. #include<bits/stdc++.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. using namespace std;
  7. map< string, int > mp;
  8. set <string > variable;
  9. set <string > datatype;
  10. set<string > unvar;
  11. set <string > kword;
  12. set<char > operat;
  13. set<string > num;
  14. int flag = 0;
  15. bool isDelimiter(char ch)
  16. {
  17.     if (ch == ' ' || ch == '+' || ch == '-' || ch == '*' ||
  18.             ch == '/' || ch == ',' || ch == ';' || ch == '>' ||
  19.             ch == '<' || ch == '=' || ch == '(' || ch == ')' ||
  20.             ch == '[' || ch == ']' || ch == '{' || ch == '}')
  21.         return (true);
  22.     return (false);
  23. }
  24. bool isOperator(char ch)
  25. {
  26.     if (ch == '+' || ch == '-' || ch == '*' ||
  27.             ch == '/' || ch == '>' || ch == '<' ||
  28.             ch == '=')
  29.         return (true);
  30.     return (false);
  31. }
  32. bool validIdentifier(char* str)
  33. {
  34.     if (str[0] == '0' || str[0] == '1' || str[0] == '2' ||
  35.             str[0] == '3' || str[0] == '4' || str[0] == '5' ||
  36.             str[0] == '6' || str[0] == '7' || str[0] == '8' ||
  37.             str[0] == '9' || isDelimiter(str[0]) == true)
  38.         return (false);
  39.     return (true);
  40. }
  41. bool isdatatype(char str[])
  42. {
  43.     if (  !strcmp(str, "int")
  44.             || !strcmp(str, "double") || !strcmp(str, "float")
  45.             || !strcmp(str, "return") || !strcmp(str, "char")
  46.             || !strcmp(str, "case") || !strcmp(str, "char"))
  47.         return (true);
  48.     return (false);
  49. }
  50. bool isKeyword(char* str)
  51. {
  52.     if (!strcmp(str, "if") || !strcmp(str, "else") ||
  53.             !strcmp(str, "while") || !strcmp(str, "do") ||
  54.             !strcmp(str, "break") ||
  55.             !strcmp(str, "continue")
  56.             || !strcmp(str, "return")
  57.             || !strcmp(str, "case")
  58.             || !strcmp(str, "sizeof")
  59.             || !strcmp(str, "short") || !strcmp(str, "typedef")
  60.             || !strcmp(str, "switch") || !strcmp(str, "unsigned")
  61.             || !strcmp(str, "void") || !strcmp(str, "static")
  62.             || !strcmp(str, "struct") || !strcmp(str, "goto"))
  63.         return (true);
  64.     return (false);
  65. }
  66. bool isInteger(char* str)
  67. {
  68.     int i, len = strlen(str);
  69.     if (len == 0)
  70.         return (false);
  71.     for (= 0; i < len; i++)
  72.     {
  73.         if (str[i] != '0' && str[i] != '1' && str[i] != '2'
  74.                 && str[i] != '3' && str[i] != '4' && str[i] != '5'
  75.                 && str[i] != '6' && str[i] != '7' && str[i] != '8'
  76.                 && str[i] != '9' || (str[i] == '-' && i > 0))
  77.             return (false);
  78.     }
  79.     return (true);
  80. }
  81. bool isRealNumber(char* str)
  82. {
  83.     int i, len = strlen(str);
  84.     bool hasDecimal = false;
  85.     if (len == 0)
  86.         return (false);
  87.     for (= 0; i < len; i++)
  88.     {
  89.         if (str[i] != '0' && str[i] != '1' && str[i] != '2'
  90.                 && str[i] != '3' && str[i] != '4' && str[i] != '5'
  91.                 && str[i] != '6' && str[i] != '7' && str[i] != '8'
  92.                 && str[i] != '9' && str[i] != '.' ||
  93.                 (str[i] == '-' && i > 0))
  94.             return (false);
  95.         if (str[i] == '.')
  96.             hasDecimal = true;
  97.     }
  98.     return (hasDecimal);
  99. }
  100. char* subString(char* str, int left, int right)
  101. {
  102.     int i;
  103.     char* subStr = (char*)malloc(
  104.                        sizeof(char) * (right - left + 2));
  105.     for (= left; i <= right; i++)
  106.         subStr[- left] = str[i];
  107.     subStr[right - left + 1] = '\0';
  108.     return (subStr);
  109. }
  110. void parse(char* str)
  111. {
  112.     int left = 0, right = 0;
  113.     int len = strlen(str);
  114.     while (right <= len && left <= right)
  115.     {
  116.         if (isDelimiter(str[right]) == false)
  117.             right++;
  118.         if (isDelimiter(str[right]) == true && left == right)
  119.         {
  120.             if (isOperator(str[right]) == true)
  121.                 operat.insert(str[right]);
  122.             right++;
  123.             left = right;
  124.         }
  125.         else if (isDelimiter(str[right]) == true && left != right
  126.                  || (right == len && left != right))
  127.         {
  128.             char* subStr = subString(str, left, right - 1);
  129.             if (isKeyword(subStr) == true)
  130.                 kword.insert(subStr);
  131.             if(isdatatype(subStr)==true)
  132.                 datatype.insert(subStr);
  133.             else if (isInteger(subStr) == true)
  134.                 num.insert(subStr);
  135.             else if (isRealNumber(subStr) == true)
  136.                 num.insert(subStr);
  137.             else if (validIdentifier(subStr) == true
  138.                      && isDelimiter(str[right - 1]) == false)
  139.             {
  140.                 if(mp[subStr]==0)
  141.                 {
  142.                     variable.insert(subStr);
  143.                     mp[subStr]++;
  144.                 }
  145.                 else
  146.                 {
  147.                     flag = 1;
  148.                 }
  149.             }
  150.             else if (validIdentifier(subStr) == false
  151.                      && isDelimiter(str[right - 1]) == false)
  152.                 unvar.insert(subStr);
  153.             left = right;
  154.         }
  155.     }
  156.     return;
  157. }
  158. int main()
  159. {
  160.     char str[100]  ;
  161.     gets(str);
  162.     parse(str);
  163.     set<string> :: iterator it;
  164.     if( flag ==1)
  165.     {
  166.         cout<<"variable is redeclaration "<<endl;
  167.         return 0;
  168.     }
  169.     if(unvar.size()>0)
  170.     {
  171.         cout<<"Variable is not valid "<<endl;
  172.         return 0;
  173.     }
  174.     if(datatype.size()>0)
  175.     {
  176.         cout<<"DataType's : "  ;
  177.         for(it = datatype.begin(); it!= datatype.end(); it++)
  178.         {
  179.             cout<<*it<<"  ";
  180.         }
  181.     }
  182.     if(variable.size()>0)
  183.     {
  184.         cout<<"\n\n\nVariable's : " ;
  185.         for(it = variable.begin(); it!= variable.end(); it++)
  186.         {
  187.             cout<<*it<<"  ";
  188.         }
  189.     }
  190.     cout<<endl;
  191.     return (0);
  192. }


variable declaration of c program

#include <stdbool.h> #include<bits/stdc++.h> #include <stdio.h> #include <string.h> #include <std...