Advertisement
Babul_420

compiler Design

Jan 10th, 2020
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.62 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<bits/stdc++.h>
  4. using namespace std;
  5.  
  6. set <string > veriable;
  7. set <string > keyword;
  8. set<string > oparator;
  9. set<string > integer;
  10. set<string> special;
  11. set< string > real_number;
  12. set< string > un_var;
  13.  
  14. int valid =1;
  15. char stdio[]="stdio.h";
  16. char strig[]="string.h";
  17. char algo[]="algorithm";
  18. char math[]="math.h";
  19. char stdlib[]="stdlib.h";
  20. char conio[]="conio.h";
  21. char ctyp[]="ctype.h";
  22. char inc[]="include";
  23. char defin[] ="define";
  24.  
  25. /// Include Header File
  26.  
  27. void inclu(char str[],int n)
  28. {
  29.     int i=0,j;
  30.     while(str[i]==' ')
  31.     {
  32.         i++;
  33.     }
  34.     i++;
  35.     while(str[i]==' ')
  36.     {
  37.         i++;
  38.     }
  39.     char st[10];
  40.     for(j=0; j<7; j++)
  41.     {
  42.         st[j]=str[i++];
  43.     }
  44.     st[j]='\0';
  45.  
  46.     if(strcmp(st,inc)!=0)
  47.     {
  48.         printf("Error!!!   include expected at %d line\n\n",n);
  49.         valid =0;
  50.         return ;
  51.     }
  52.     while(str[i]==' ')
  53.     {
  54.         i++;
  55.     }
  56.     if(str[i]!='<')
  57.     {
  58.         printf("Error Error!!!  ' < ' expected at %d line\n\n",n);
  59.         valid =0;
  60.         return ;
  61.  
  62.     }
  63.     i++;
  64.     while(str[i]==' ')
  65.     {
  66.         i++;
  67.     }
  68.     int c=0;
  69.     for(j=0; ; j++)
  70.     {
  71.         if(str[i]=='.')
  72.             c++;
  73.         if(str[i]==' ' || str[i]=='>' || c>=2)
  74.             break;
  75.         st[j]=str[i++];
  76.     }
  77.     st[j]='\0';
  78.     if((strcmp(st,stdio)!=0) &&  (strcmp(st,strig)!=0) && (strcmp(st,algo)!=0) && (strcmp(st,math)!=0) && (strcmp(st,stdio)!=0) && (strcmp(st,stdlib)!=0))
  79.     {
  80.         printf("Error!!!  valid header file expected at %d line\n\n",n);
  81.         valid =0;
  82.         return ;
  83.  
  84.     }
  85.     while(str[i]==' ')
  86.     {
  87.         i++;
  88.     }
  89.  
  90.     if(str[i]=='>')
  91.     {
  92.         //printf("success");
  93.     }
  94.     else
  95.     {
  96.         printf("Error!!!  ' > ' expected at %d line\n\n",n);
  97.         valid =0;
  98.         return ;
  99.  
  100.     }
  101.     i++;
  102.     while(str[i]==' ')
  103.     {
  104.         i++;
  105.     }
  106.     if(str[i]==';')
  107.     {
  108.         printf("syntax error  in %d line\n\n",n);
  109.         valid =0;
  110.         return ;
  111.  
  112.     }
  113. }
  114.  
  115. /// #define function
  116.  
  117. char ss[1000];
  118. void def(char str[],int n)
  119. {
  120.     int i=0,j=0;
  121.     while(str[i]==' ')
  122.     {
  123.         i++;
  124.     }
  125.     i++;
  126.     while(str[i]==' ')
  127.     {
  128.         i++;
  129.     }
  130.     char st[100];
  131.     for(j=0; j<6; j++)
  132.     {
  133.         st[j]=str[i++];
  134.     }
  135.     st[j]='\0';
  136.     if(strcmp(st,defin)!=0)
  137.     {
  138.         printf("syntax error in %d line \n",n);
  139.         valid =0;
  140.         return ;
  141.  
  142.     }
  143.     while(str[i]==' ')
  144.     {
  145.         i++;
  146.     }
  147.     int ln = strlen(str);
  148.     for(j=0; str[i]!=' ' ; j++)
  149.     {
  150.         ss[j]=str[i++];
  151.     }
  152.     ss[j]='\0';
  153.     while(str[i]==' ')
  154.     {
  155.         i++;
  156.     }
  157.     int jj=0;
  158.     int num=0;
  159.     char nu[100];
  160.     for(jj=0; str[i]!=' ' && str[i]!=';' && str[i]!='\0'; jj++)
  161.     {
  162.         nu[jj]=str[i++];
  163.     }
  164.     nu[jj]='\0';
  165.     for(jj=0; nu[jj]!='\0'; jj++)
  166.     {
  167.         if(nu[jj]>='0' &&  nu[jj]<='9') {}
  168.         else
  169.         {
  170.             printf("there is not define number in %d line \n",n);
  171.             valid =0;
  172.             return ;
  173.  
  174.         }
  175.     }
  176.     while(str[i]==' ')
  177.     {
  178.         i++;
  179.     }
  180.     if( str[i]==';')
  181.     {
  182.         printf("Syntax error at %d line \n",n);
  183.         valid =0;
  184.         return ;
  185.  
  186.     }
  187.     printf("\n\n\nvalue of %s = ",ss);
  188.     veriable.insert(ss);
  189.     printf("%s\n",nu);
  190. }
  191.  
  192. int keyword_( string str)
  193. {
  194.     if (str == "if"  || str == "else" ||
  195.             str == "while" ||  str == "do"  ||
  196.             str == "break"  ||
  197.             str == "continue" || str == "int"
  198.             ||  str == "double" ||  (str == "float")
  199.             ||  (str == "return") ||  (str == "char")
  200.             ||  (str == "case") ||  (str == "char")
  201.             ||  (str == "sizeof") ||  (str == "long")
  202.             ||  (str == "short") ||  (str == "typedef")
  203.             ||  (str == "switch") ||  (str == "unsigned")
  204.             ||  (str == "void") ||  (str == "static")
  205.             ||  (str == "struct") ||  (str == "goto"))
  206.         return 1;
  207.     return 0;
  208. }
  209.  
  210. int special_(char *str )
  211. {
  212.     if(strlen(str)==1)
  213.         if (str[0] == ' ' || str[0] == '+' || str[0] == '-' || str[0] == '*' ||
  214.                 str[0] == '/' || str[0] == ',' || str[0] == ';' || str[0] == '>' ||
  215.                 str[0] == '<' || str[0] == '=' || str[0] == '(' || str[0] == ')' ||
  216.                 str[0] == '[' || str[0] == ']' || str[0] == '{' || str[0] == '}')
  217.             return 1;
  218.     return 0;
  219.  
  220.  
  221.  
  222. }
  223.  
  224. bool isvalid(char str[] )
  225. {
  226.     int i=0;
  227.     string st;
  228.     st.clear();
  229.     while(str[i]==' ')
  230.         i++;
  231.     for(int j=i; str[j]>='a' && str[j]<='z' ; j++)
  232.         st+= str[j];
  233.  
  234.     if( st== "include" || st =="define")
  235.         return 0;
  236.     else
  237.         return 1;
  238. }
  239.  
  240. int special_char(char ch)
  241. {
  242.     if (ch == ' ' || ch == '+' || ch == '-' || ch == '*' ||
  243.             ch == '/' || ch == ',' || ch == ';' || ch == '>' ||
  244.             ch == '<' || ch == '=' || ch == '(' || ch == ')' ||
  245.             ch == '[' || ch == ']' || ch == '{' || ch == '}')
  246.         return 1;
  247.     return 0;
  248. }
  249. int integer_( string str)
  250. {
  251.     int i, len = str.length();
  252.  
  253.     if (len == 0)
  254.         return 0;
  255.     for (i = 0; i < len; i++)
  256.     {
  257.         if (str[i] != '0' && str[i] != '1' && str[i] != '2'
  258.                 && str[i] != '3' && str[i] != '4' && str[i] != '5'
  259.                 && str[i] != '6' && str[i] != '7' && str[i] != '8'
  260.                 && str[i] != '9' || (str[i] == '-' && i > 0))
  261.             return 0;
  262.     }
  263.     return 1;
  264.  
  265. }
  266.  
  267.  
  268. int oparator_(char ch)
  269. {
  270.     if (ch == '+' || ch == '-' || ch == '*' ||
  271.             ch == '/' || ch == '>' || ch == '<' ||
  272.             ch == '=')
  273.         return 1;
  274.     return 0;
  275.  
  276. }
  277.  
  278. int syntaxanalysis(string str)
  279. {
  280.     int i= str.length();
  281.     i--;
  282.     while(str[i]==' ')
  283.         i--;
  284.     if(str[i]==';')
  285.         return 1;
  286.     else
  287.         return 0;
  288.  
  289. }
  290.  
  291.  
  292. int var(string str)
  293. {
  294.  
  295.     if (str[0] == '0' || str[0] == '1' || str[0] == '2' ||
  296.             str[0] == '3' || str[0] == '4' || str[0] == '5' ||
  297.             str[0] == '6' || str[0] == '7' || str[0] == '8' ||
  298.             str[0] == '9' || special_char(str[0]) == 1)
  299.         return 0;
  300.     return 1;
  301.  
  302. }
  303.  
  304. int real_number_(string str)
  305. {
  306.     int i, len = str.length();
  307.     bool flag = 0;
  308.     if (len == 0)
  309.         return 0;
  310.     for (i = 0; i < len; i++)
  311.     {
  312.         if (str[i] != '0' && str[i] != '1' && str[i] != '2'
  313.                 && str[i] != '3' && str[i] != '4' && str[i] != '5'
  314.                 && str[i] != '6' && str[i] != '7' && str[i] != '8'
  315.                 && str[i] != '9' && str[i] != '.' || (str[i] == '-' && i > 0))
  316.             return 0;
  317.         if (str[i] == '.')
  318.             flag = 1;
  319.     }
  320.     return flag;
  321.  
  322. }
  323.  
  324. void valid_stament( char str[], int n)
  325. {
  326.     if(!syntaxanalysis(str))
  327.     {
  328.         printf("syntax error in %d line \n",n);
  329.         valid =0;
  330.         return ;
  331.  
  332.     }
  333.     stack <string> stck;
  334.     string st;
  335.     string sp;
  336.     int i=0;
  337.     while(str[i]==' ')
  338.         i++;
  339.     for( ; i<strlen(str); i++)
  340.     {
  341.         if(str[i]!=' ')
  342.         {
  343.             if(!special_char(str[i]))
  344.                 st+=str[i];
  345.             else
  346.             {
  347.                 sp+= str[i];
  348.                 stck.push(sp);
  349.                 stck.push(st);
  350.                 st.clear();
  351.                 sp.clear();
  352.             }
  353.         }
  354.         else
  355.         {
  356.  
  357.             stck.push(st);
  358.             st.clear();
  359.         }
  360.     }
  361.     if(str[strlen(str)-1]!=';')
  362.         stck.push(st);
  363.     string stt;
  364.     string s= stck.top();
  365.  
  366.     while(!stck.empty())
  367.     {
  368.         stt= stck.top();
  369.  
  370.  
  371.         if(stt.length()==1 && special_char(stt[0]))
  372.             special.insert(stck.top());
  373.  
  374.         else if(stt.length()==1 && oparator_(stt[0]))
  375.             oparator.insert(stck.top());
  376.  
  377.         else if( keyword_(stck.top()))
  378.             keyword.insert(stck.top());
  379.  
  380.         else if(integer_(stck.top()))
  381.             integer.insert(stck.top());
  382.  
  383.         else if(real_number_(stck.top()))
  384.             real_number.insert(stck.top());
  385.  
  386.         else if(var(stck.top()))
  387.             veriable.insert(stck.top());
  388.  
  389.         else
  390.             un_var.insert(stck.top());
  391.  
  392.         stck.pop();
  393.     }
  394.  
  395. }
  396.  
  397. int main()
  398. {
  399.     char str[100][1000];
  400.     int i=0;
  401.     vector< string > vt;
  402.     printf("%d ",i+1) ;
  403.     while(gets(str[i]))
  404.     {
  405.         i++;
  406.         printf("%d ",i+1) ;
  407.     }
  408.     int j=0,k=0;
  409.     string st;
  410.     for(j=0; j<i; j++)
  411.     {
  412.  
  413.         int k=0;
  414.         if(str[j][0]=='\0' || str[j][0]=='\n')
  415.             continue;
  416.         while(str[j][k]==' ')
  417.         {
  418.             k++;
  419.         }
  420.         if(str[j][k]!='#')
  421.         {
  422.             if(isvalid(str[j])==0)
  423.             {
  424.                 printf("Error!!! ' # ' missing at %d line\n\n",j+1);
  425.                 valid =0;
  426.                 return 0;
  427.  
  428.             }
  429.         }
  430.         else
  431.             k++;
  432.         while(str[j][k]==' ')
  433.         {
  434.             k++;
  435.         }
  436.  
  437.         for(int ii=k ; str[j][ii]>='a' && str[j][ii]<='z'; ii++)
  438.             st+=str[j][ii];
  439.         if(st=="include")
  440.             inclu(str[j],j+1);
  441.  
  442.         else if(st=="define")
  443.         {
  444.             def(str[j],j+1);
  445.         }
  446.         else
  447.         {
  448.             valid_stament(str[j],j+1);
  449.         }
  450.  
  451.         st.clear();
  452.     }
  453.  
  454.     set< string > :: iterator it;
  455.  
  456.     if(un_var.size()>0)
  457.     {
  458.         cout<<"variable is not valid "<<endl;
  459.     }
  460.     else if(valid==1)
  461.     {
  462.         if(keyword.size()>0)
  463.         {
  464.             cout<<"\n\n\nkeyWord's : ";
  465.             for(it = keyword.begin(); it!=keyword.end(); it++)
  466.                 cout<<*it<<"  ";
  467.  
  468.         }
  469.  
  470.         if(oparator.size()>0)
  471.         {
  472.             cout<<"\n\n\nOperator's : ";
  473.             for(it=oparator.begin(); it!=oparator.end(); it++)
  474.                 cout<<*it<<"  ";
  475.         }
  476.  
  477.  
  478.         if(veriable.size()>0)
  479.         {
  480.             cout<<"\n\n\nVeriable's  : ";
  481.             for(it=veriable.begin(); it!=veriable.end(); it++)
  482.                 cout<<*it<<"  " ;
  483.         }
  484.  
  485.         if(integer.size()>0)
  486.         {
  487.             cout<<"\n\n\nInteger number's : ";
  488.             for(it=integer.begin(); it!=integer.end(); it++)
  489.                 cout<<*it<<"  ";
  490.         }
  491.  
  492.         if(real_number.size()>0)
  493.         {
  494.             cout<<"\n\n\nreal number's : ";
  495.             for(it=real_number.begin(); it!=real_number.end(); it++)
  496.                 cout<<*it<<"  ";
  497.         }
  498.  
  499.         if(special.size()>0)
  500.         {
  501.             cout<<"\n\n\nSpacial character's   : ";
  502.             for(it=special.begin(); it!=special.end(); it++)
  503.                 cout<<*it<<"  ";
  504.         }
  505.  
  506.     }
  507.  
  508.     return 0;
  509. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement