muhammad_nasif

parser.y function_unadjusted

Jun 6th, 2021
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 30.86 KB | None | 0 0
  1. %{
  2. #include<iostream>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<bits/stdc++.h>
  7. #include "symbolTable.cpp"
  8. //#define YYSTYPE SymbolInfo*
  9.  
  10. using namespace std;
  11.  
  12. int yyparse(void);
  13. int yylex(void);
  14. extern int line_count;
  15. extern FILE *yyin;
  16. FILE *output;
  17. SymbolTable table(30);
  18. ofstream out("output.txt");
  19. ofstream outxx("output_test.txt");
  20. int counter = 0;            ///counts the total variables as the rules detect them... used in function_scopeTable_adjustment()
  21.  
  22. vector<SymbolInfo*> names;      ///stores all the names of the variables and functions
  23. vector<SymbolInfo*> parameter;      ///stores the parameters of a function
  24.  
  25. void yyerror(char *s)
  26. {
  27.     //cout<<"At line no: "<<line_count<<s<<endl;
  28. }
  29.  
  30.  
  31.  
  32. void function_scopeTable_adjustment(){
  33.     int len = names.size();
  34.     int tempCtr = 0;
  35.     cout<<"----------------------------"<<endl;
  36.     cout<<"counter: "<<counter<<endl;
  37.     cout<<"len: "<<len<<endl;
  38.    
  39.     for(int i=counter;i<len;i++){
  40.         cout<<names[i]->getName()<<" "<<names[i]->getType()<<endl;
  41.         table.Insert(names[i]->getName(), names[i]->getType());
  42.         cout<<names[i]->getName()<<" "<<names[i]->getType()<<endl;
  43.         tempCtr++;
  44.     }
  45.     counter += tempCtr;
  46.     table.printAllScope(out);
  47. }
  48.  
  49.  
  50. void parameter_to_scopeTable(){
  51.     int len = parameter.size();
  52.     for(int i=0;i<len;i++){
  53.         table.Insert(parameter[i]->getName(), parameter[i]->getType());
  54.     }
  55.     parameter.clear();
  56. }
  57.  
  58. %}
  59.  
  60. %union{
  61.     SymbolInfo *symbol;
  62. }
  63.  
  64. %token  LPAREN RPAREN COMMA SEMICOLON ASSIGNOP LCURL RCURL NOT INCOP DECOP  LTHIRD RTHIRD WHILE IF PRINTLN ELSE FOR VOID INT FLOAT RETURN CONTINUE BREAK CHAR DO NEWLINE
  65.  
  66. %token <symbol> CONST_FLOAT CONST_INT RELOP LOGICOP ADDOP ID MULOP
  67.  
  68. %type<symbol>start program unit func_declaration parameter_list compound_statement var_declaration type_specifier declaration_list statements statement expression_statement variable expression  logic_expression rel_expression simple_expression term unary_expression factor argument_list arguments func_definition
  69.  
  70. //%left
  71. //%right
  72.  
  73. %nonassoc LOWER_THAN_ELSE
  74. %nonassoc ELSE
  75.  
  76.  
  77. %%
  78.  
  79. start : program
  80.     {
  81.         //write your code in this block in all the similar blocks below
  82.         //cout<<"At line no: "<<line_count<<" start : program\n"<<endl<<endl;
  83.         out<<"At line no: "<<line_count<<" start : program\n"<<endl<<endl;
  84.        
  85.         SymbolInfo *x = new SymbolInfo($1->getName(),"program");
  86.         $$ = x;
  87.         //cout<< $$->getName() <<endl;
  88.         out<< $$->getName() <<endl;
  89.        
  90.        
  91.         cout<<"-----------\n\n\nVector_Names_List:"<<endl;
  92.         int len = names.size();
  93.         for(int i=0;i<len;i++){
  94.             cout<<names[i]->getName()<<" ";
  95.             if(names[i]->getArrLen()!=0){
  96.                 cout<<" "<<names[i]->getArrLen();
  97.             }
  98.             cout<<endl;
  99.         }
  100.         cout<<"-----------\n\n\n";
  101.        
  102.     }
  103.     ;
  104.  
  105. program : program unit
  106.     {
  107.         //cout<<"At line no: "<<line_count<<" program : program unit"<<endl<<endl;
  108.         out<<"At line no: "<<line_count<<" program : program unit"<<endl<<endl;
  109.         SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName(),"program");
  110.         $$ = x;
  111.         //cout<< $$->getName() <<endl<<endl;
  112.         out<< $$->getName() <<endl<<endl;      
  113.     }
  114.     | unit
  115.     {
  116.         //cout<<"At line no: "<<line_count<<" program : unit"<<endl<<endl;
  117.         out<<"At line no: "<<line_count<<" program : unit"<<endl<<endl;
  118.         SymbolInfo *x = new SymbolInfo($1->getName(),"program");
  119.         $$=x;
  120.         //cout<<$$->getName()<<endl<<endl;
  121.         out<<$$->getName()<<endl<<endl;
  122.     }
  123.     ;
  124.    
  125. unit : var_declaration
  126.     {
  127.         //cout<<"At line no: "<<line_count<<" unit : var_declaration"<<endl<<endl;
  128.         out<<"At line no: "<<line_count<<" unit : var_declaration"<<endl<<endl;
  129.         SymbolInfo *x = new SymbolInfo($1->getName(),"unit");
  130.         $$=x;
  131.         //cout<<$$->getName()<<endl<<endl;
  132.         out<<$$->getName()<<endl<<endl;
  133.     }
  134.      | func_declaration
  135.      {
  136.         //cout<<"At line no: "<<line_count<<" unit : func_declaration"<<endl<<endl;
  137.         out<<"At line no: "<<line_count<<" unit : func_declaration"<<endl<<endl;
  138.        
  139.         SymbolInfo *x = new SymbolInfo($1->getName(),"unit");
  140.     $$=x;
  141.     //cout<<$$->getName()<<endl<<endl;
  142.     out<<$$->getName()<<endl<<endl;
  143.      }
  144.      | func_definition
  145.      {
  146.         //cout<<"unit : func_definition"<<endl<<endl;
  147.     out<<"unit : func_definition"<<endl<<endl;      
  148.         SymbolInfo *x = new SymbolInfo($1->getName(),"unit");
  149.     $$=x;
  150.     //cout<<$$->getName()<<endl<<endl;
  151.         out<<$$->getName()<<endl<<endl;
  152.      }
  153.      ;
  154.      
  155. func_declaration : type_specifier ID LPAREN parameter_list RPAREN SEMICOLON
  156.         {
  157.             //cout<<"At line no: "<<line_count<<" func_declaration : type_specifier ID LPAREN parameter_list RPAREN SEMICOLON"<<endl<<endl;
  158.             out<<"At line no: "<<line_count<<" func_declaration : type_specifier ID LPAREN parameter_list RPAREN SEMICOLON"<<endl<<endl;
  159.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+"("+$4->getName()+")"+";\n","func_declaration");
  160.             $$=x;
  161.             //cout<<$$->getName()<<endl<<endl;
  162.             out<<$$->getName()<<endl<<endl;
  163.            
  164.             //-----------int function_name(int x, double b, char c);
  165.             //-----------store function name in global scope and variables in local scope
  166.            
  167.             //inserted function_name in scopeTable
  168.             names.push_back($2);
  169.             function_scopeTable_adjustment();
  170.            
  171.             //inserted function parameter in scopeTable inside new Scope
  172.             table.EnterScope();
  173.             parameter_to_scopeTable();
  174.             table.ExitScope();
  175.            
  176.            
  177.            
  178.         }
  179.         | type_specifier ID LPAREN RPAREN SEMICOLON
  180.         {
  181.             //cout<<"At line no: "<<line_count<<" func_declaration : type_specifier ID LPAREN RPAREN SEMICOLON"<<endl<<endl;
  182.             out<<"At line no: "<<line_count<<" func_declaration : type_specifier ID LPAREN RPAREN SEMICOLON"<<endl<<endl;
  183.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+"("+")"+";\n","func_declaration");
  184.             $$=x;
  185.             //cout<<$$->getName()<<endl<<endl;
  186.             out<<$$->getName()<<endl<<endl;
  187.        
  188.             //-------int bubble_sort();
  189.             //-------store function name in global scope
  190.             names.push_back($2);
  191.             function_scopeTable_adjustment();
  192.             table.EnterScope();
  193.             table.ExitScope();
  194.            
  195.        
  196.        
  197.         }
  198.         ;
  199.          
  200. func_definition : type_specifier ID LPAREN parameter_list RPAREN compound_statement/*{names.push_back($2); function_scopeTable_adjustment();table.EnterScope(); }*/
  201.         {
  202.        
  203.             //cout<<"At line no: "<<line_count<<" func_definition : type_specifier ID LPAREN parameter_list RPAREN compound_statement"<<endl<<endl;
  204.             out<<"At line no: "<<line_count<<" func_definition : type_specifier ID LPAREN parameter_list RPAREN compound_statement"<<endl<<endl;
  205.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+"("+$4->getName()+")"+$6->getName(),"func_definition");
  206.             $$=x;
  207.             //cout<<$$->getName()<<endl<<endl;
  208.             out<<$$->getName()<<endl<<endl;
  209.            
  210.             //---------------int function_name(double a, double b){ .. }
  211.             //---------------insert function_name in global scope and function_variables in local scope
  212.            
  213.             //---------------inserted function_name in global_scope directly
  214.             //names.push_back($2);
  215.             $2->setReturnType($1->getName());       //set return type of function_name. Getting return type from type_specifier($1)
  216.             table.Insert($2->getName(), $2->getType());
  217.            
  218.            
  219.             table.EnterScope();
  220.             parameter_to_scopeTable();
  221.             function_scopeTable_adjustment();
  222.             table.ExitScope();
  223.            
  224.            
  225.            
  226.         }
  227.         | type_specifier ID LPAREN RPAREN compound_statement{table.EnterScope();names.push_back($2); function_scopeTable_adjustment();}
  228.         {
  229.             //cout<<"At line no: "<<line_count<<" func_definition : type_specifier ID LPAREN RPAREN compound_statement"<<endl<<endl;
  230.             out<<"At line no: "<<line_count<<" func_definition : type_specifier ID LPAREN RPAREN compound_statement"<<endl<<endl;
  231.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+"("+")"+$5->getName(),"func_definition");
  232.             $$=x;
  233.             //cout<<$$->getName()<<endl<<endl;         
  234.             out<<$$->getName()<<endl<<endl;
  235.            
  236.            
  237.            
  238.             //---------------int function_name(){ .. }
  239.             //---------------insert function_name in global scope and function_variables in local scope
  240.             //---------------inserted function_name directly in global scope
  241.             $2->setReturnType($1->getName());       //set return type of function_name. Getting return type from type_specifier($1)
  242.             table.Insert($2->getName(), $2->getType());
  243.            
  244.            
  245.            
  246.             //names.push_back($2);
  247.             table.EnterScope();
  248.             function_scopeTable_adjustment();
  249.             table.ExitScope();
  250.         }
  251.         ;              
  252.  
  253.  
  254. parameter_list  : parameter_list COMMA type_specifier ID
  255.         {
  256.             //cout<<"At line no: "<<line_count<<" parameter_list : pararmeter_list COMMA  type_specifier ID"<<endl<<endl;
  257.             out<<"At line no: "<<line_count<<" parameter_list : pararmeter_list COMMA  type_specifier ID"<<endl<<endl;
  258.             SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName()+$4->getName(),"parameter_list");
  259.             $$ = x;
  260.             //cout<<$$->getName()<<endl<<endl;
  261.             out<<$$->getName()<<endl<<endl;
  262.            
  263.            
  264.             ///------ insert parameter in variable container (vector)-> parameter
  265.             parameter.push_back($4);
  266.            
  267.         }
  268.         | parameter_list COMMA type_specifier
  269.         {
  270.             //cout<<"At line no: "<<line_count<<" parameter_list : pararmeter_list COMMA  type_specifier"<<endl<<endl;
  271.             out<<"At line no: "<<line_count<<" parameter_list : pararmeter_list COMMA  type_specifier"<<endl<<endl;
  272.             SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName(),"parameter_list");
  273.             $$ = x;
  274.             //cout<<$$->getName()<<endl;
  275.             out<<$$->getName()<<endl;
  276.            
  277.            
  278.         }
  279.         | type_specifier ID
  280.         {
  281.             //cout<<"At line no: "<<line_count<<" parameter_list : type_specifier ID"<<endl<<endl;
  282.             out<<"At line no: "<<line_count<<" parameter_list : type_specifier ID"<<endl<<endl;
  283.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName(),"parameter_list");
  284.             $$ = x;
  285.             //cout<<$$->getName()<<endl<<endl;
  286.             out<<$$->getName()<<endl<<endl;
  287.            
  288.             ///------ insert parameter in variable container (vector)-> parameter
  289.             parameter.push_back($2);
  290.            
  291.         }
  292.         | type_specifier
  293.         {
  294.             //cout<<"At line no: "<<line_count<<" parameter_list : type_specifier"<<endl<<endl;
  295.             out<<"At line no: "<<line_count<<" parameter_list : type_specifier"<<endl<<endl;
  296.             SymbolInfo *x = new SymbolInfo($1->getName(),"parameter_list");
  297.             $$ = x;
  298.             //cout<<"At line no: "<<line_count<< $$->getName()<<endl;
  299.             out<<"At line no: "<<line_count<< $$->getName()<<endl;
  300.         }
  301.         ;
  302.  
  303.        
  304. compound_statement : LCURL statements RCURL
  305.             {
  306.                 //cout<<"At line no: "<<line_count<<" compound_statement : LCURL statements RCURL"<<endl<<endl;
  307.                 out<<"At line no: "<<line_count<<" compound_statement : LCURL statements RCURL"<<endl<<endl;
  308.                 SymbolInfo *x = new SymbolInfo("{\n"+$2->getName()+"}\n","compound_statement");
  309.             $$ = x;
  310.             //cout<< $$->getName()<<endl;
  311.             out<< $$->getName()<<endl;
  312.             }
  313.             | LCURL RCURL
  314.             {
  315.                 //cout<<"At line no: "<<line_count<<" compound_statement : LCURL RCURL"<<endl<<endl;
  316.                 out<<"At line no: "<<line_count<<" compound_statement : LCURL RCURL"<<endl<<endl;
  317.                 SymbolInfo *x = new SymbolInfo(string("{ }\n"),"compound_statement");
  318.             $$ = x;
  319.             //cout<<"At line no: "<<line_count<< $$->getName()<<endl;
  320.             out<<"At line no: "<<line_count<< $$->getName()<<endl;
  321.             }
  322.             ;
  323.            
  324. var_declaration : type_specifier declaration_list SEMICOLON
  325.         {
  326.             //cout<<"At line no: "<<line_count<<" var_declaration : type_specifier declaration_list SEMICOLON"<<endl<<endl;
  327.             out<<"At line no: "<<line_count<<" var_declaration : type_specifier declaration_list SEMICOLON"<<endl<<endl;
  328.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+";\n","var_declaration");
  329.             $$=x;
  330.             //cout<<$$->getName()<<endl<<endl;
  331.             out<<$$->getName()<<endl<<endl;
  332.         }
  333.          ;
  334.          
  335. type_specifier  : INT  
  336.         {
  337.             //cout<<"At line no: "<<line_count<<" type_specifier : INT"<<endl<<endl;
  338.             out<<"At line no: "<<line_count<<" type_specifier : INT"<<endl<<endl;
  339.             SymbolInfo *x = new SymbolInfo("int ","type_specifier");
  340.             $$=x;
  341.             //cout<<$$->getName()<<endl<<endl;
  342.             out<<$$->getName()<<endl<<endl;
  343.            
  344.         }
  345.         | FLOAT
  346.         {
  347.             //cout<<"At line no: "<<line_count<<" type_specifier : FLOAT"<<endl<<endl;
  348.             out<<"At line no: "<<line_count<<" type_specifier : FLOAT"<<endl<<endl;
  349.             SymbolInfo *x = new SymbolInfo("float ","type_specifier");
  350.             $$=x;
  351.             //cout<<$$->getName()<<endl<<endl;
  352.             out<<$$->getName()<<endl<<endl;
  353.         }
  354.        
  355.        
  356.         | VOID 
  357.         {
  358.             //cout<<"At line no: "<<line_count<<" type_specifier : VOID"<<endl<<endl;
  359.             out<<"At line no: "<<line_count<<" type_specifier : VOID"<<endl<<endl;
  360.             SymbolInfo *x = new SymbolInfo("void ","type_specifier");
  361.             $$=x;
  362.             //cout<<$$->getName()<<endl<<endl;         
  363.             out<<$$->getName()<<endl<<endl;        
  364.         }
  365.         ;
  366.        
  367. declaration_list : declaration_list COMMA ID
  368.           {
  369.             //------------declaration like
  370.             //------------x,y
  371.            
  372.            
  373.             //cout<<"At line no: "<<line_count<<" declaration_list : declaration_list COMMA ID"<<endl<<endl;
  374.             out<<"At line no: "<<line_count<<" declaration_list : declaration_list COMMA ID"<<endl<<endl;
  375.             SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName(),"declaration_list");
  376.             $$ = x;
  377.             //cout<<$$->getName()<<endl<<endl;
  378.             out<<$$->getName()<<endl<<endl;
  379.            
  380.            
  381.             //-----have to insert into scopeTable
  382.             cout<<"Rule_1\n";
  383.             names.push_back($3);
  384.            
  385.           }
  386.           | declaration_list COMMA ID LTHIRD CONST_INT RTHIRD
  387.           {
  388.            
  389.            
  390.             // ----------- this section is for declartion like
  391.             //------------- int y,x[4]
  392.             //------------- that means array declaration           
  393.            
  394.             //cout<<"At line no: "<<line_count<<" declaration_list : declaration_list COMMA ID LTHIRD CONST_INT RTHIRD"<<endl;
  395.             out<<"At line no: "<<line_count<<" declaration_list : declaration_list COMMA ID LTHIRD CONST_INT RTHIRD"<<endl;
  396.             SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName()+"["+$5->getName()+"]","declaration_list");
  397.             $$ = x;
  398.             //cout<<$$->getName()<<endl<<endl;
  399.             out<<$$->getName()<<endl<<endl;
  400.            
  401.            
  402.            
  403.             //-----have to insert into scopeTable
  404.             cout<<"Rule_2\n";
  405.             $3->setArrLen(stoi($5->getName()));
  406.             names.push_back($3);
  407.            
  408.            
  409.            
  410.           }
  411.           | ID
  412.           {
  413.             //cout<<"At line no: "<<line_count<<" declaration_list : ID"<<endl<<endl;
  414.             out<<"At line no: "<<line_count<<" declaration_list : ID"<<endl<<endl;
  415.             out<<"ID "<<$1->getName()<<" found"<<endl;
  416.            
  417.             //cout<<$1->getName()<<endl<<endl;
  418.             out<<$1->getName()<<endl<<endl;
  419.          
  420.            
  421.             SymbolInfo *x = new SymbolInfo($1->getName(),"declaration_list");
  422.             $$=x;
  423.            
  424.            
  425.            
  426.            
  427.             //-----have to insert into scopeTable
  428.             cout<<"Rule_3\n";
  429.             names.push_back($1);
  430.            
  431.           }
  432.           | ID LTHIRD CONST_INT RTHIRD
  433.           //----------- x[5]
  434.           {
  435.             //cout<<"At line no: "<<line_count<<" declaration_list : ID LTHIRD CONST_INT RTHIRD"<<endl<<endl;
  436.             out<<"At line no: "<<line_count<<" declaration_list : ID LTHIRD CONST_INT RTHIRD"<<endl<<endl;
  437.            
  438.             SymbolInfo *x = new SymbolInfo($1->getName()+"["+$3->getName()+"]","declaration_list");
  439.             $$ = x;
  440.             //cout<<$$->getName()<<endl<<endl;
  441.             out<<$$->getName()<<endl<<endl;
  442.            
  443.            
  444.            
  445.            
  446.             //---------have to insert into scopeTable
  447.             cout<<"Rule_4\n";
  448.             $1->setArrLen(stoi($3->getName()));
  449.             names.push_back($1);
  450.            
  451.            
  452.           }
  453.           ;
  454.          
  455. statements : statement
  456.         {
  457.             //cout<<"At line no: "<<line_count<<" statements : statement"<<endl<<endl;
  458.             out<<"At line no: "<<line_count<<" statements : statement"<<endl<<endl;
  459.             SymbolInfo *x = new SymbolInfo($1->getName(),"statements");
  460.             $$=x;
  461.             //cout<<$$->getName()<<endl<<endl;
  462.             out<<$$->getName()<<endl<<endl;
  463.            
  464.         }
  465.        | statements statement
  466.        {
  467.         //cout<<"At line no: "<<line_count<<" statements : statements statement"<<endl<<endl;
  468.         out<<"At line no: "<<line_count<<" statements : statements statement"<<endl<<endl;
  469.         SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName(),"statements");
  470.         $$=x;
  471.         //cout<<$$->getName()<<endl<<endl;
  472.         out<<$$->getName()<<endl<<endl;
  473.        
  474.        }
  475.        ;
  476.        
  477. statement : var_declaration
  478.       {
  479.         //cout<<"At line no: "<<line_count <<" statement : var_declaration"<<endl<<endl;
  480.         out<<"At line no: "<<line_count <<" statement : var_declaration"<<endl<<endl;
  481.         SymbolInfo *x = new SymbolInfo($1->getName(),"statement");
  482.         $$ = x;
  483.         //cout<<$$->getName()<<endl<<endl;
  484.         out<<$$->getName()<<endl<<endl;
  485.       }
  486.       | expression_statement
  487.       {
  488.         //cout<<"At line no: "<<line_count<<" statement : expression_statement"<<endl<<endl;
  489.         out<<"At line no: "<<line_count<<" statement : expression_statement"<<endl<<endl;
  490.         SymbolInfo *x = new SymbolInfo($1->getName(),"statement");
  491.         $$ = x;
  492.         //cout<<$$->getName()<<endl<<endl;
  493.         out<<$$->getName()<<endl<<endl;
  494.       }
  495.       | compound_statement
  496.       {
  497.         //cout<<"At line no: "<<line_count<<" statement : compound_statement"<<endl<<endl;
  498.         out<<"At line no: "<<line_count<<" statement : compound_statement"<<endl<<endl;
  499.         SymbolInfo *x = new SymbolInfo($1->getName(),"statement");
  500.         $$ = x;
  501.         //cout<<$$->getName()<<endl<<endl;
  502.         out<<$$->getName()<<endl<<endl;
  503.       }
  504.      
  505.       | FOR LPAREN expression_statement expression_statement expression RPAREN statement
  506.       {
  507.         //cout<<"At line no: "<<line_count<<" statement : FOR LPAREN expression_statement expression_statement expression RPAREN statement"<<endl<<endl;
  508.         out<<"At line no: "<<line_count<<" statement : FOR LPAREN expression_statement expression_statement expression RPAREN statement"<<endl<<endl;
  509.         SymbolInfo *x = new SymbolInfo(string("for")+"("+$3->getName()+$4->getName()+$5->getName()+")"+$7->getName(),"statement");
  510.         $$ = x;
  511.         //cout<<$$->getName()<<endl<<endl;
  512.         out<<$$->getName()<<endl<<endl;
  513.       }
  514.       | IF LPAREN expression RPAREN statement %prec LOWER_THAN_ELSE
  515.       {
  516.         //cout<<"At line no: "<<line_count<<" statement : IF LPAREN expression RPAREN statement"<<endl<<endl;
  517.         out<<"At line no: "<<line_count<<" statement : IF LPAREN expression RPAREN statement"<<endl<<endl;
  518.         SymbolInfo *x = new SymbolInfo(string("if")+"("+$3->getName()+")"+$5->getName(),"statement");
  519.         $$ = x;
  520.         //cout<<$$->getName()<<endl<<endl;
  521.         out<<$$->getName()<<endl<<endl;    
  522.       }
  523.       | IF LPAREN expression RPAREN statement ELSE statement
  524.       {
  525.         //cout<<"At line no: "<<line_count<<" statement : IF LPAREN expression RPAREN statement ELSE statement"<<endl<<endl;
  526.         out<<"At line no: "<<line_count<<" statement : IF LPAREN expression RPAREN statement ELSE statement"<<endl<<endl;
  527.         SymbolInfo *x = new SymbolInfo(string("if")+"("+$3->getName()+")"+$5->getName()+"else"+$7->getName(),"statement");
  528.         $$=x;
  529.         //cout<<$$->getName()<<endl<<endl;
  530.         out<<$$->getName()<<endl<<endl;
  531.       }
  532.       | WHILE LPAREN expression RPAREN statement
  533.       {
  534.         //cout<<"At line no: "<<line_count<<" statement : WHILE LPAREN expression RPAREN statement"<<endl<<endl;
  535.         out<<"At line no: "<<line_count<<" statement : WHILE LPAREN expression RPAREN statement"<<endl<<endl;
  536.         SymbolInfo *x = new SymbolInfo(string("while ")+"("+$3->getName()+")"+";\n","statement");
  537.         $$=x;
  538.         //cout<<$$->getName()<<endl<<endl;
  539.         out<<$$->getName()<<endl<<endl;
  540.       }
  541.       | PRINTLN LPAREN ID RPAREN SEMICOLON
  542.       {
  543.         //cout<<"At line no: "<<line_count<<" statement : PRINTLN LPAREN ID RPAREN SEMICOLON"<<endl;
  544.         out<<"At line no: "<<line_count<<" statement : PRINTLN LPAREN ID RPAREN SEMICOLON"<<endl;
  545.         SymbolInfo *x = new SymbolInfo(string("println ")+"("+$3->getName()+")"+";\n","statement");
  546.         $$=x;
  547.         //cout<<$$->getName()<<endl<<endl;
  548.         out<<$$->getName()<<endl<<endl;
  549.       }
  550.      
  551.       | RETURN expression SEMICOLON
  552.       {
  553.         //cout<<"At line no: "<<line_count<<" statement : RETURN expression SEMICOLON"<<endl<<endl;
  554.         out<<"At line no: "<<line_count<<" statement : RETURN expression SEMICOLON"<<endl<<endl;
  555.         SymbolInfo *x = new SymbolInfo(string("return ")+$2->getName()+";\n","statement");
  556.         $$ = x;
  557.         //cout<<$$->getName() <<endl;
  558.         out<<$$->getName() <<endl;
  559.                        
  560.       }
  561.       ;
  562.      
  563. expression_statement    : SEMICOLON    
  564.             {
  565.                 //cout<<"At line no: "<<line_count<<" expression_statement : SEMICOLON"<<endl<<endl;
  566.                 out<<"At line no: "<<line_count<<" expression_statement : SEMICOLON"<<endl<<endl;
  567.                 SymbolInfo *x = new SymbolInfo(";\n","expression_statement");
  568.                 $$ = x;
  569.                 //cout<<$$->getName()<<endl<<endl;
  570.                 out<<$$->getName()<<endl<<endl;
  571.             }  
  572.             | expression SEMICOLON
  573.             {
  574.                 //cout<<"At line no: "<<line_count<<" expression_statement : expression SEMICOLON"<<endl<<endl;
  575.                 out<<"At line no: "<<line_count<<" expression_statement : expression SEMICOLON"<<endl<<endl;
  576.                 SymbolInfo *x = new SymbolInfo($1->getName()+";\n","expression_statement");
  577.                 $$ = x;
  578.                 //cout<<$$->getName()<<endl<<endl; 
  579.                 out<<$$->getName()<<endl<<endl;
  580.             }  
  581.             ;
  582.      
  583. variable : ID
  584.     {
  585.         //cout<<"At line no: "<<line_count<< " variable : ID"<<endl<<endl;
  586.         out<<"At line no: "<<line_count<< " variable : ID"<<endl<<endl;
  587.         SymbolInfo *x = new SymbolInfo($1->getName(),"int");
  588.         $$ = x;
  589.         //cout<<$$->getName()<<endl<<endl;
  590.         out<<$$->getName()<<endl<<endl;
  591.        
  592.     }
  593.      | ID LTHIRD expression RTHIRD
  594.      {
  595.         //cout<<"At line no: "<<line_count<<" variable : ID LTHIRD expression RTHIRD"<<endl<<endl;
  596.         out<<"At line no: "<<line_count<<" variable : ID LTHIRD expression RTHIRD"<<endl<<endl;
  597.         SymbolInfo *x = new SymbolInfo($1->getName()+ "["+ $3->getName()+"]","rel_expression");
  598.         $$ = x;
  599.         //cout<<$$->getName()<<endl<<endl;
  600.         out<<$$->getName()<<endl<<endl;
  601.      }
  602.      ;
  603.      
  604.  expression : logic_expression
  605.         {
  606.             //cout<<"At line no: "<<line_count<< " expression : logic_expression"<<endl<<endl;
  607.             out<<"At line no: "<<line_count<< " expression : logic_expression"<<endl<<endl;
  608.             SymbolInfo *x = new SymbolInfo($1->getName(),"expression");
  609.             $$ = x;
  610.             //cout<<$$->getName()<<endl<<endl;
  611.             out<<$$->getName()<<endl<<endl;
  612.         }
  613.        | variable ASSIGNOP logic_expression
  614.        {
  615.         //cout<<"At line no: "<<line_count<<" expression : variable ASSIGNOP logic_expression" <<endl<<endl;
  616.         out<<"At line no: "<<line_count<<" expression : variable ASSIGNOP logic_expression" <<endl<<endl;
  617.         SymbolInfo *x = new SymbolInfo($1->getName()+"="+$3->getName(),"expression");
  618.         $$ = x;
  619.         //cout<<$$->getName()<<endl<<endl;
  620.         out<<$$->getName()<<endl<<endl;
  621.        }    
  622.        ;
  623.            
  624. logic_expression : rel_expression
  625.         {
  626.             //cout<<"At line no: "<<line_count << " logic_expression : rel_expression"<<endl<<endl;
  627.             out<<"At line no: "<<line_count << " logic_expression : rel_expression"<<endl<<endl;
  628.            
  629.             SymbolInfo *x = new SymbolInfo($1->getName(),"logic_expression");
  630.             $$ = x;
  631.             //cout<<$$->getName()<<endl<<endl;
  632.             out<<$$->getName()<<endl<<endl;
  633.            
  634.         }
  635.          | rel_expression LOGICOP rel_expression    
  636.         {
  637.             //cout<<"At line no: "<<line_count<<" logic_expression : rel_expression LOGICOP rel_expression"<<endl<<endl;
  638.             out<<"At line no: "<<line_count<<" logic_expression : rel_expression LOGICOP rel_expression"<<endl<<endl;
  639.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+$3->getName(),"logic_expression");
  640.             $$ = x;
  641.             //cout<<$$->getName()<<endl<<endl;
  642.             out<<$$->getName()<<endl<<endl;        
  643.         }
  644.          ;
  645.            
  646. rel_expression  : simple_expression
  647.         {
  648.             //cout<<"At line no: "<<line_count<<" rel_expression : simple_expression"<<endl<<endl;
  649.             out<<"At line no: "<<line_count<<" rel_expression : simple_expression"<<endl<<endl;
  650.             SymbolInfo *x = new SymbolInfo($1->getName(),"rel_expression");
  651.             $$ = x;
  652.             //cout<<$$->getName()<<endl<<endl;
  653.             out<<$$->getName()<<endl<<endl;
  654.            
  655.         }
  656.         | simple_expression RELOP simple_expression
  657.         {
  658.             //cout<<"At line no: "<<line_count<<" rel_expression : simple_expression RELOP simple_expression"<<endl<<endl;
  659.             out<<"At line no: "<<line_count<<" rel_expression : simple_expression RELOP simple_expression"<<endl<<endl;
  660.             SymbolInfo *x = new SymbolInfo($1->getName()+ $2->getName()+ $3->getName(),"rel_expression");
  661.             $$ = x;
  662.             //cout<<$$->getName()<<endl<<endl;
  663.             out<<$$->getName()<<endl<<endl;
  664.         }
  665.         ;
  666.                
  667. simple_expression : term
  668.         {
  669.             //cout<<"At line no: "<<line_count<< " simple_expression : term"<<endl<<endl;
  670.             out<<"At line no: "<<line_count<< " simple_expression : term"<<endl<<endl;
  671.             SymbolInfo *x = new SymbolInfo($1->getName(),"simple_expression");
  672.             $$ = x;
  673.             //cout<<$$->getName()<<endl<<endl;
  674.             out<<$$->getName()<<endl<<endl;
  675.         }
  676.           | simple_expression ADDOP term
  677.         {
  678.             //cout<<"At line no: "<<line_count<< " simple_expression : simple_expression ADDOP term"<<endl<<endl;
  679.             out<<"At line no: "<<line_count<< " simple_expression : simple_expression ADDOP term"<<endl<<endl;
  680.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+$3->getName(),"simple_expression");
  681.             $$ = x;
  682.             //cout<<$$->getName()<<endl<<endl;
  683.             out<<$$->getName()<<endl<<endl;
  684.            
  685.         }
  686.           ;
  687.                    
  688. term :  unary_expression
  689.     {
  690.         //cout<<"At line no: "<<line_count<<" term : unary_expression"<<endl<<endl;
  691.         out<<"At line no: "<<line_count<<" term : unary_expression"<<endl<<endl;
  692.         SymbolInfo *x = new SymbolInfo($1->getName(),"term");
  693.         $$ = x;
  694.         //cout<<$$->getName()<<endl<<endl;
  695.         out<<$$->getName()<<endl<<endl;
  696.     }
  697.      |  term MULOP unary_expression
  698.     {
  699.         //cout<<"At line no: "<<line_count<<" term : term MULOP unary_expression"<<endl<<endl;
  700.         out<<"At line no: "<<line_count<<" term : term MULOP unary_expression"<<endl<<endl;
  701.         SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+$3->getName(),"term");
  702.         $$ = x;
  703.         //cout<<$$->getName()<<endl<<endl;
  704.         out<<$$->getName()<<endl<<endl;
  705.     }
  706.      ;
  707.  
  708. unary_expression : ADDOP unary_expression
  709.         {
  710.             //cout<<"At line no: "<<line_count<<" unary_expression : ADDOP unary_expression"<<endl;
  711.             out<<"At line no: "<<line_count<<" unary_expression : ADDOP unary_expression"<<endl;
  712.             SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName(),"unary_expression");
  713.             $$ = x;
  714.             //cout<<$$->getName()<<endl<<endl;
  715.             out<<$$->getName()<<endl<<endl;
  716.            
  717.         }  
  718.          | NOT unary_expression
  719.         {
  720.             //cout<<"At line no: "<<line_count<<" unary_expression : NOT unary_expression"<<endl<<endl;
  721.             out<<"At line no: "<<line_count<<" unary_expression : NOT unary_expression"<<endl<<endl;
  722.             SymbolInfo *x = new SymbolInfo("!"+$2->getName(),"unary_expression");
  723.             $$ = x;
  724.             //cout<<$$->getName()<<endl<<endl;
  725.             out<<$$->getName()<<endl<<endl;
  726.         }
  727.          | factor
  728.         {
  729.             //cout<<"At line no: "<<line_count<<" unary_expression : factor"<<endl<<endl;
  730.             out<<"At line no: "<<line_count<<" unary_expression : factor"<<endl<<endl;
  731.             SymbolInfo *x = new SymbolInfo($1->getName(),"unary_expression");
  732.             $$ = x;
  733.             //cout<<$$->getName()<<endl<<endl;
  734.             out<<$$->getName()<<endl<<endl;
  735.         }
  736.          ;
  737.    
  738. factor  : variable
  739.     {
  740.         //cout<<"At line no: "<<line_count<<" factor : variable"<<endl<<endl;
  741.         out<<"At line no: "<<line_count<<" factor : variable"<<endl<<endl;
  742.         SymbolInfo *x = new SymbolInfo($1->getName(),"factor");
  743.         $$ = x;
  744.         //cout<<$$->getName()<<endl<<endl;
  745.         out<<$$->getName()<<endl<<endl;
  746.     }
  747.     | ID LPAREN argument_list RPAREN
  748.     {
  749.         //cout<<"At line no: "<<line_count<<" factor : ID LPAREN argument_list RPAREN"<<endl<<endl;
  750.         out<<"At line no: "<<line_count<<" factor : ID LPAREN argument_list RPAREN"<<endl<<endl;
  751.        
  752.         SymbolInfo *x = new SymbolInfo($1->getName()+"("+$3->getName()+")","factor");
  753.         $$ = x;
  754.         //cout<<$$->getName()<<endl<<endl;
  755.         out<<$$->getName()<<endl<<endl;
  756.     }
  757.     | LPAREN expression RPAREN
  758.     {
  759.         //cout<<"At line no: "<<line_count<<" factor : LPAREN expression RPAREN"<<endl;
  760.         out<<"At line no: "<<line_count<<" factor : LPAREN expression RPAREN"<<endl;
  761.         SymbolInfo *x = new SymbolInfo("("+$2->getName()+")","factor");
  762.         $$ = x;
  763.         //cout<<$$->getName()<<endl<<endl;
  764.         out<<$$->getName()<<endl<<endl;
  765.        
  766.     }
  767.     | CONST_INT
  768.     {
  769.         //cout<<"At line no: "<<line_count<<" factor : CONST_INT\n"<<endl;
  770.         out<<"At line no: "<<line_count<<" factor : CONST_INT\n"<<endl;
  771.         SymbolInfo *x = new SymbolInfo($1->getName(),"int");
  772.         $$ = x;
  773.         //cout<<$$->getName()<<endl<<endl;
  774.         out<<$$->getName()<<endl<<endl;
  775.     }
  776.     | CONST_FLOAT
  777.     {
  778.         //cout<<"At line no: "<<line_count<<" factor : CONST_FLOAT\n"<<endl<<endl;
  779.         out<<"At line no: "<<line_count<<" factor : CONST_FLOAT\n"<<endl<<endl;
  780.         SymbolInfo *x = new SymbolInfo($1->getName(),"float");
  781.         $$ = x;
  782.         //cout<<$$->getName()<<endl<<endl;
  783.         out<<$$->getName()<<endl<<endl;    
  784.     }
  785.     | variable INCOP
  786.     {
  787.         //cout<<"At line no: "<<line_count<<" factor : variable INCOP\n"<<endl;
  788.         out<<"At line no: "<<line_count<<" factor : variable INCOP\n"<<endl;
  789.         SymbolInfo *x = new SymbolInfo($1->getName() + "++","factor");
  790.         $$ = x;
  791.         //cout<<$$->getName()<<endl<<endl;
  792.         out<<$$->getName()<<endl<<endl;    
  793.     }
  794.     | variable DECOP
  795.     {
  796.         //cout<<"At line no: "<<line_count<<" factor : variable DECOP\n"<<endl<<endl;
  797.         out<<"At line no: "<<line_count<<" factor : variable DECOP\n"<<endl<<endl;
  798.         SymbolInfo *x = new SymbolInfo($1->getName()+"--","factor");
  799.         $$ = x;
  800.         //cout<<$$->getName()<<endl<<endl;
  801.         out<<$$->getName()<<endl<<endl;
  802.     }
  803.     ;
  804.    
  805. argument_list : arguments
  806.     {
  807.         //cout<<"At line no: "<<line_count<<" argument_list : arguments"<<endl<<endl;
  808.         out<<"At line no: "<<line_count<<" argument_list : arguments"<<endl<<endl;
  809.         SymbolInfo *x = new SymbolInfo($1->getName(),"argument_list");
  810.         $$ = x;
  811.         //cout<<$$->getName()<<endl<<endl;
  812.         out<<$$->getName()<<endl<<endl;
  813.    
  814.     }
  815.     |
  816.     {
  817.         SymbolInfo *argumentInfo = new SymbolInfo("","argument_list");
  818.         $$ = argumentInfo;
  819.         //cout<<"At line no: "<<line_count<<$$->getName()<<endl<<endl;
  820.         out<<"At line no: "<<line_count<<$$->getName()<<endl<<endl;
  821.         //cout<<$$->getName()<<endl<<endl;     
  822.         out<<$$->getName()<<endl<<endl;
  823.     }
  824.     ;
  825.    
  826. arguments : arguments COMMA logic_expression
  827.         {
  828.             //cout<<"At line no: "<<line_count<<" arguments : arguments COMMA logic_expression"<<endl<<endl;
  829.             out<<"At line no: "<<line_count<<" arguments : arguments COMMA logic_expression"<<endl<<endl;
  830.             SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName(),"argument_list");
  831.             $$ = x;
  832.             //cout<<$$->getName()<<endl<<endl;
  833.             out<<$$->getName()<<endl<<endl;
  834.         }
  835.           | logic_expression
  836.           {
  837.                 //cout<<"At line no: "<<line_count<<" arguments : logic_expression"<<endl<<endl;
  838.                 out<<"At line no: "<<line_count<<" arguments : logic_expression"<<endl<<endl;
  839.                 SymbolInfo *x = new SymbolInfo($1->getName(),"argument_list");
  840.             $$ = x;
  841.             //cout<<$$->getName()<<endl<<endl;
  842.             out<<$$->getName()<<endl<<endl;
  843.            
  844.           }
  845.           ;
  846.  
  847.  
  848. %%
  849. int main(int argc,char *argv[])
  850. {
  851.     FILE  *fp, *fp2, *fp3;
  852.  
  853. //  if((fp=fopen(argv[1],"r"))==NULL)
  854. //  {
  855. //      printf("Cannot Open Input File.\n");
  856. //      exit(1);
  857. //  }
  858.    
  859. //  //cout<<"At line no: "<<line_count<<argv[2]<<endl;
  860.    
  861. //  fp2= fopen(argv[2],"w");
  862. //  fclose(fp2);
  863. //  fp3= fopen(argv[3],"w");
  864. //  fclose(fp3);
  865.    
  866. //  fp2= fopen(argv[2],"a");
  867. //  fp3= fopen(argv[3],"a");
  868.    
  869.     output = fopen("output_scope.txt","w");
  870.     fclose(output);
  871.     output = fopen("output_scope.txt","a");
  872.    
  873.    
  874.     yyin=fp;
  875.    
  876.     yyin = fopen("input.txt","r");
  877.    
  878.     yyparse();
  879.  
  880. //  fclose(fp2);
  881. //  fclose(fp3);
  882.    
  883.     return 0;
  884. }
  885.  
Advertisement
Add Comment
Please, Sign In to add comment