Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include<iostream>
- #include<cstdlib>
- #include<cstring>
- #include<cmath>
- #include<bits/stdc++.h>
- #include "symbolTable.cpp"
- //#define YYSTYPE SymbolInfo*
- using namespace std;
- int yyparse(void);
- int yylex(void);
- extern int line_count;
- extern FILE *yyin;
- FILE *output;
- SymbolTable table(30);
- ofstream out("output.txt");
- ofstream outxx("output_test.txt");
- int counter = 0; ///counts the total variables as the rules detect them... used in function_scopeTable_adjustment()
- vector<SymbolInfo*> names; ///stores all the names of the variables and functions
- vector<SymbolInfo*> parameter; ///stores the parameters of a function
- void yyerror(char *s)
- {
- //cout<<"At line no: "<<line_count<<s<<endl;
- }
- void printVector(){
- }
- void function_scopeTable_adjustment(){
- int len = names.size();
- int tempCtr = 0;
- cout<<"----------------------------"<<endl;
- cout<<"counter: "<<counter<<endl;
- cout<<"len: "<<len<<endl;
- for(int i=counter;i<len;i++){
- cout<<names[i]->getName()<<" "<<names[i]->getType()<<endl;
- table.Insert(names[i]->getName(), names[i]->getType());
- cout<<names[i]->getName()<<" "<<names[i]->getType()<<endl;
- tempCtr++;
- }
- counter += tempCtr;
- table.printAllScope(out);
- }
- void parameter_to_scopeTable(){
- int len = parameter.size();
- for(int i=0;i<len;i++){
- table.Insert(parameter[i]->getName(), parameter[i]->getType());
- }
- parameter.clear();
- }
- void setFuncParameter(SymbolInfo* x){
- int len = parameter.size();
- for(int i=0;i<len;i++){
- x->func_param.push_back(parameter[i]);
- cout<<parameter[i]->getName()<<" "<<"pushed"<<endl;
- cout<<"size:"<< x->func_param.size() <<endl;
- }
- cout<<"--- --- --- --- ---"<<endl;
- }
- %}
- %union{
- SymbolInfo *symbol;
- }
- %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
- %token <symbol> CONST_FLOAT CONST_INT RELOP LOGICOP ADDOP ID MULOP
- %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
- //%left
- //%right
- %nonassoc LOWER_THAN_ELSE
- %nonassoc ELSE
- %%
- start : program
- {
- //write your code in this block in all the similar blocks below
- //cout<<"At line no: "<<line_count<<" start : program\n"<<endl<<endl;
- out<<"At line no: "<<line_count<<" start : program\n"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"program");
- $$ = x;
- //cout<< $$->getName() <<endl;
- out<< $$->getName() <<endl;
- cout<<"-----------\n\n\nVector_Names_List:"<<endl;
- int len = names.size();
- for(int i=0;i<len;i++){
- cout<<names[i]->getName()<<" ";
- if(names[i]->getArrLen()!=0){
- cout<<" "<<names[i]->getArrLen();
- }
- cout<<endl;
- }
- cout<<"-----------\n\n\n";
- table.printAllScope(out);
- }
- ;
- program : program unit
- {
- //cout<<"At line no: "<<line_count<<" program : program unit"<<endl<<endl;
- out<<"At line no: "<<line_count<<" program : program unit"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName(),"program");
- $$ = x;
- //cout<< $$->getName() <<endl<<endl;
- out<< $$->getName() <<endl<<endl;
- }
- | unit
- {
- //cout<<"At line no: "<<line_count<<" program : unit"<<endl<<endl;
- out<<"At line no: "<<line_count<<" program : unit"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"program");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- unit : var_declaration
- {
- //cout<<"At line no: "<<line_count<<" unit : var_declaration"<<endl<<endl;
- out<<"At line no: "<<line_count<<" unit : var_declaration"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"unit");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | func_declaration
- {
- //cout<<"At line no: "<<line_count<<" unit : func_declaration"<<endl<<endl;
- out<<"At line no: "<<line_count<<" unit : func_declaration"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"unit");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | func_definition
- {
- //cout<<"unit : func_definition"<<endl<<endl;
- out<<"unit : func_definition"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"unit");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- func_declaration : type_specifier ID LPAREN parameter_list RPAREN SEMICOLON
- {
- //cout<<"At line no: "<<line_count<<" func_declaration : type_specifier ID LPAREN parameter_list RPAREN SEMICOLON"<<endl<<endl;
- out<<"At line no: "<<line_count<<" func_declaration : type_specifier ID LPAREN parameter_list RPAREN SEMICOLON"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+"("+$4->getName()+")"+";\n","func_declaration");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- //-----------int function_name(int x, double b, char c);
- //-----------store function name in global scope and variables in local scope
- //inserted function_name in scopeTable
- $2->func_param = parameter;
- names.push_back($2);
- function_scopeTable_adjustment();
- //inserted function parameter in scopeTable inside new Scope
- table.EnterScope();
- //setFuncParameter($2);
- parameter_to_scopeTable();
- table.ExitScope();
- }
- | type_specifier ID LPAREN RPAREN SEMICOLON
- {
- //cout<<"At line no: "<<line_count<<" func_declaration : type_specifier ID LPAREN RPAREN SEMICOLON"<<endl<<endl;
- out<<"At line no: "<<line_count<<" func_declaration : type_specifier ID LPAREN RPAREN SEMICOLON"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+"("+")"+";\n","func_declaration");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- //-------int bubble_sort();
- //-------store function name in global scope
- names.push_back($2);
- function_scopeTable_adjustment();
- table.EnterScope();
- table.ExitScope();
- }
- ;
- func_definition : type_specifier ID LPAREN parameter_list RPAREN compound_statement
- {
- //cout<<"At line no: "<<line_count<<" func_definition : type_specifier ID LPAREN parameter_list RPAREN compound_statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" func_definition : type_specifier ID LPAREN parameter_list RPAREN compound_statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+"("+$4->getName()+")"+$6->getName(),"func_definition");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- //---------------int function_name(double a, double b){ .. }
- //---------------insert function_name in global scope and function_variables in local scope
- //----search if the function exists
- SymbolInfo *search = table.LookUp($2->getName());
- if(search){
- //the function is found... hence inside if
- //if function_name is declared before
- //then no need to insert it into symbolTable
- table.EnterScope();
- table.ExitScope();
- cout<<"$2 for : "<< $2->getName() <<endl;
- cout<<"$2 size: "<< $2->func_param.size() <<endl;
- cout<<"$2 name: "<< $2->getName() <<endl;
- cout<<"$2 type: "<< $2->getType() <<endl;
- cout<<"Function declared before 1st"<<endl;
- cout<<"search size: "<< search->func_param.size() <<endl;
- cout<<"search name: "<< search->getName() <<endl;
- cout<<"search type: "<< search->getType() <<endl;
- }
- else{
- //function_name not declared. Hence pushing it into scopeTable
- //---------------inserted function_name in global_scope directly
- //names.push_back($2);
- //setFuncParameter($2);
- $2->func_param = parameter;
- $2->setReturnType($1->getName()); //set return type of function_name. Getting return type from type_specifier($1)
- table.Insert($2->getName(), $2->getType());
- table.EnterScope();
- parameter_to_scopeTable();
- function_scopeTable_adjustment();
- table.ExitScope();
- cout<<"Name: "<<$2->getName() <<endl;
- cout<<"Param_Size: "<<$2->func_param.size()<<endl;
- }
- }
- | type_specifier ID LPAREN RPAREN compound_statement
- {
- //cout<<"At line no: "<<line_count<<" func_definition : type_specifier ID LPAREN RPAREN compound_statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" func_definition : type_specifier ID LPAREN RPAREN compound_statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+"("+")"+$5->getName(),"func_definition");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- //---------------int function_name(){ .. }
- //---------------insert function_name in global scope and function_variables in local scope
- //---------------inserted function_name directly in global scope
- //----search if the function exists
- SymbolInfo *search = table.LookUp($2->getName());
- if(search){
- //if function_name is declared before
- //then no need to insert it into symbolTable
- table.EnterScope();
- table.ExitScope();
- cout<<"$2 for : "<< $2->getName() <<endl;
- cout<<"$2 size: "<< $2->func_param.size() <<endl;
- cout<<"$2 name: "<< $2->getName() <<endl;
- cout<<"$2 type: "<< $2->getType() <<endl;
- cout<<"Function declared before 2nd"<<endl;
- cout<<"search size: "<< search->func_param.size() <<endl;
- cout<<"search name: "<< search->getName() <<endl;
- cout<<"search type: "<< search->getType() <<endl;
- }
- else{
- //function_name not declared. Hence pushing it into scopeTable
- //---------------inserted function_name in global_scope directly
- //names.push_back($2);
- $2->setReturnType($1->getName()); //set return type of function_name. Getting return type from type_specifier($1)
- table.Insert($2->getName(), $2->getType());
- //names.push_back($2);
- table.EnterScope();
- function_scopeTable_adjustment();
- table.ExitScope();
- }
- }
- ;
- parameter_list : parameter_list COMMA type_specifier ID
- {
- //cout<<"At line no: "<<line_count<<" parameter_list : pararmeter_list COMMA type_specifier ID"<<endl<<endl;
- out<<"At line no: "<<line_count<<" parameter_list : pararmeter_list COMMA type_specifier ID"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName()+$4->getName(),"parameter_list");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- ///------ insert parameter in variable container (vector)-> parameter
- parameter.push_back($4);
- }
- | parameter_list COMMA type_specifier
- {
- //cout<<"At line no: "<<line_count<<" parameter_list : pararmeter_list COMMA type_specifier"<<endl<<endl;
- out<<"At line no: "<<line_count<<" parameter_list : pararmeter_list COMMA type_specifier"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName(),"parameter_list");
- $$ = x;
- //cout<<$$->getName()<<endl;
- out<<$$->getName()<<endl;
- }
- | type_specifier ID
- {
- //cout<<"At line no: "<<line_count<<" parameter_list : type_specifier ID"<<endl<<endl;
- out<<"At line no: "<<line_count<<" parameter_list : type_specifier ID"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName(),"parameter_list");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- ///------ insert parameter in variable container (vector)-> parameter
- parameter.push_back($2);
- }
- | type_specifier
- {
- //cout<<"At line no: "<<line_count<<" parameter_list : type_specifier"<<endl<<endl;
- out<<"At line no: "<<line_count<<" parameter_list : type_specifier"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"parameter_list");
- $$ = x;
- //cout<<"At line no: "<<line_count<< $$->getName()<<endl;
- out<<"At line no: "<<line_count<< $$->getName()<<endl;
- }
- ;
- compound_statement : LCURL statements RCURL
- {
- //cout<<"At line no: "<<line_count<<" compound_statement : LCURL statements RCURL"<<endl<<endl;
- out<<"At line no: "<<line_count<<" compound_statement : LCURL statements RCURL"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo("{\n"+$2->getName()+"}\n","compound_statement");
- $$ = x;
- //cout<< $$->getName()<<endl;
- out<< $$->getName()<<endl;
- }
- | LCURL RCURL
- {
- //cout<<"At line no: "<<line_count<<" compound_statement : LCURL RCURL"<<endl<<endl;
- out<<"At line no: "<<line_count<<" compound_statement : LCURL RCURL"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo(string("{ }\n"),"compound_statement");
- $$ = x;
- //cout<<"At line no: "<<line_count<< $$->getName()<<endl;
- out<<"At line no: "<<line_count<< $$->getName()<<endl;
- }
- ;
- var_declaration : type_specifier declaration_list SEMICOLON
- {
- //cout<<"At line no: "<<line_count<<" var_declaration : type_specifier declaration_list SEMICOLON"<<endl<<endl;
- out<<"At line no: "<<line_count<<" var_declaration : type_specifier declaration_list SEMICOLON"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+";\n","var_declaration");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- type_specifier : INT
- {
- //cout<<"At line no: "<<line_count<<" type_specifier : INT"<<endl<<endl;
- out<<"At line no: "<<line_count<<" type_specifier : INT"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo("int ","type_specifier");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | FLOAT
- {
- //cout<<"At line no: "<<line_count<<" type_specifier : FLOAT"<<endl<<endl;
- out<<"At line no: "<<line_count<<" type_specifier : FLOAT"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo("float ","type_specifier");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | VOID
- {
- //cout<<"At line no: "<<line_count<<" type_specifier : VOID"<<endl<<endl;
- out<<"At line no: "<<line_count<<" type_specifier : VOID"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo("void ","type_specifier");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- declaration_list : declaration_list COMMA ID
- {
- //------------declaration like
- //------------x,y
- //cout<<"At line no: "<<line_count<<" declaration_list : declaration_list COMMA ID"<<endl<<endl;
- out<<"At line no: "<<line_count<<" declaration_list : declaration_list COMMA ID"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName(),"declaration_list");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- //-----have to insert into scopeTable
- cout<<"Rule_1\n";
- names.push_back($3);
- }
- | declaration_list COMMA ID LTHIRD CONST_INT RTHIRD
- {
- // ----------- this section is for declartion like
- //------------- int y,x[4]
- //------------- that means array declaration
- //cout<<"At line no: "<<line_count<<" declaration_list : declaration_list COMMA ID LTHIRD CONST_INT RTHIRD"<<endl;
- out<<"At line no: "<<line_count<<" declaration_list : declaration_list COMMA ID LTHIRD CONST_INT RTHIRD"<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName()+"["+$5->getName()+"]","declaration_list");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- //-----have to insert into scopeTable
- cout<<"Rule_2\n";
- $3->setArrLen(stoi($5->getName()));
- names.push_back($3);
- }
- | ID
- {
- //cout<<"At line no: "<<line_count<<" declaration_list : ID"<<endl<<endl;
- out<<"At line no: "<<line_count<<" declaration_list : ID"<<endl<<endl;
- out<<"ID "<<$1->getName()<<" found"<<endl;
- //cout<<$1->getName()<<endl<<endl;
- out<<$1->getName()<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"declaration_list");
- $$=x;
- //-----have to insert into scopeTable
- cout<<"Rule_3\n";
- names.push_back($1);
- }
- | ID LTHIRD CONST_INT RTHIRD
- //----------- x[5]
- {
- //cout<<"At line no: "<<line_count<<" declaration_list : ID LTHIRD CONST_INT RTHIRD"<<endl<<endl;
- out<<"At line no: "<<line_count<<" declaration_list : ID LTHIRD CONST_INT RTHIRD"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+"["+$3->getName()+"]","declaration_list");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- //---------have to insert into scopeTable
- cout<<"Rule_4\n";
- $1->setArrLen(stoi($3->getName()));
- names.push_back($1);
- }
- ;
- statements : statement
- {
- //cout<<"At line no: "<<line_count<<" statements : statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statements : statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"statements");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | statements statement
- {
- //cout<<"At line no: "<<line_count<<" statements : statements statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statements : statements statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName(),"statements");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- statement : var_declaration
- {
- //cout<<"At line no: "<<line_count <<" statement : var_declaration"<<endl<<endl;
- out<<"At line no: "<<line_count <<" statement : var_declaration"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"statement");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | expression_statement
- {
- //cout<<"At line no: "<<line_count<<" statement : expression_statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statement : expression_statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"statement");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | compound_statement
- {
- //cout<<"At line no: "<<line_count<<" statement : compound_statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statement : compound_statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"statement");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | FOR LPAREN expression_statement expression_statement expression RPAREN statement
- {
- //cout<<"At line no: "<<line_count<<" statement : FOR LPAREN expression_statement expression_statement expression RPAREN statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statement : FOR LPAREN expression_statement expression_statement expression RPAREN statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo(string("for")+"("+$3->getName()+$4->getName()+$5->getName()+")"+$7->getName(),"statement");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | IF LPAREN expression RPAREN statement %prec LOWER_THAN_ELSE
- {
- //cout<<"At line no: "<<line_count<<" statement : IF LPAREN expression RPAREN statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statement : IF LPAREN expression RPAREN statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo(string("if")+"("+$3->getName()+")"+$5->getName(),"statement");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | IF LPAREN expression RPAREN statement ELSE statement
- {
- //cout<<"At line no: "<<line_count<<" statement : IF LPAREN expression RPAREN statement ELSE statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statement : IF LPAREN expression RPAREN statement ELSE statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo(string("if")+"("+$3->getName()+")"+$5->getName()+"else"+$7->getName(),"statement");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | WHILE LPAREN expression RPAREN statement
- {
- //cout<<"At line no: "<<line_count<<" statement : WHILE LPAREN expression RPAREN statement"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statement : WHILE LPAREN expression RPAREN statement"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo(string("while ")+"("+$3->getName()+")"+";\n","statement");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | PRINTLN LPAREN ID RPAREN SEMICOLON
- {
- //cout<<"At line no: "<<line_count<<" statement : PRINTLN LPAREN ID RPAREN SEMICOLON"<<endl;
- out<<"At line no: "<<line_count<<" statement : PRINTLN LPAREN ID RPAREN SEMICOLON"<<endl;
- SymbolInfo *x = new SymbolInfo(string("println ")+"("+$3->getName()+")"+";\n","statement");
- $$=x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | RETURN expression SEMICOLON
- {
- //cout<<"At line no: "<<line_count<<" statement : RETURN expression SEMICOLON"<<endl<<endl;
- out<<"At line no: "<<line_count<<" statement : RETURN expression SEMICOLON"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo(string("return ")+$2->getName()+";\n","statement");
- $$ = x;
- //cout<<$$->getName() <<endl;
- out<<$$->getName() <<endl;
- }
- ;
- expression_statement : SEMICOLON
- {
- //cout<<"At line no: "<<line_count<<" expression_statement : SEMICOLON"<<endl<<endl;
- out<<"At line no: "<<line_count<<" expression_statement : SEMICOLON"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo(";\n","expression_statement");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | expression SEMICOLON
- {
- //cout<<"At line no: "<<line_count<<" expression_statement : expression SEMICOLON"<<endl<<endl;
- out<<"At line no: "<<line_count<<" expression_statement : expression SEMICOLON"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+";\n","expression_statement");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- variable : ID
- {
- //cout<<"At line no: "<<line_count<< " variable : ID"<<endl<<endl;
- out<<"At line no: "<<line_count<< " variable : ID"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"int");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | ID LTHIRD expression RTHIRD
- {
- //cout<<"At line no: "<<line_count<<" variable : ID LTHIRD expression RTHIRD"<<endl<<endl;
- out<<"At line no: "<<line_count<<" variable : ID LTHIRD expression RTHIRD"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+ "["+ $3->getName()+"]","rel_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- expression : logic_expression
- {
- //cout<<"At line no: "<<line_count<< " expression : logic_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<< " expression : logic_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | variable ASSIGNOP logic_expression
- {
- //cout<<"At line no: "<<line_count<<" expression : variable ASSIGNOP logic_expression" <<endl<<endl;
- out<<"At line no: "<<line_count<<" expression : variable ASSIGNOP logic_expression" <<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+"="+$3->getName(),"expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- logic_expression : rel_expression
- {
- //cout<<"At line no: "<<line_count << " logic_expression : rel_expression"<<endl<<endl;
- out<<"At line no: "<<line_count << " logic_expression : rel_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"logic_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | rel_expression LOGICOP rel_expression
- {
- //cout<<"At line no: "<<line_count<<" logic_expression : rel_expression LOGICOP rel_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<<" logic_expression : rel_expression LOGICOP rel_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+$3->getName(),"logic_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- rel_expression : simple_expression
- {
- //cout<<"At line no: "<<line_count<<" rel_expression : simple_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<<" rel_expression : simple_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"rel_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | simple_expression RELOP simple_expression
- {
- //cout<<"At line no: "<<line_count<<" rel_expression : simple_expression RELOP simple_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<<" rel_expression : simple_expression RELOP simple_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+ $2->getName()+ $3->getName(),"rel_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- simple_expression : term
- {
- //cout<<"At line no: "<<line_count<< " simple_expression : term"<<endl<<endl;
- out<<"At line no: "<<line_count<< " simple_expression : term"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"simple_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | simple_expression ADDOP term
- {
- //cout<<"At line no: "<<line_count<< " simple_expression : simple_expression ADDOP term"<<endl<<endl;
- out<<"At line no: "<<line_count<< " simple_expression : simple_expression ADDOP term"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+$3->getName(),"simple_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- term : unary_expression
- {
- //cout<<"At line no: "<<line_count<<" term : unary_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<<" term : unary_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"term");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | term MULOP unary_expression
- {
- //cout<<"At line no: "<<line_count<<" term : term MULOP unary_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<<" term : term MULOP unary_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName()+$3->getName(),"term");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- unary_expression : ADDOP unary_expression
- {
- //cout<<"At line no: "<<line_count<<" unary_expression : ADDOP unary_expression"<<endl;
- out<<"At line no: "<<line_count<<" unary_expression : ADDOP unary_expression"<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+$2->getName(),"unary_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | NOT unary_expression
- {
- //cout<<"At line no: "<<line_count<<" unary_expression : NOT unary_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<<" unary_expression : NOT unary_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo("!"+$2->getName(),"unary_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | factor
- {
- //cout<<"At line no: "<<line_count<<" unary_expression : factor"<<endl<<endl;
- out<<"At line no: "<<line_count<<" unary_expression : factor"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"unary_expression");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- factor : variable
- {
- //cout<<"At line no: "<<line_count<<" factor : variable"<<endl<<endl;
- out<<"At line no: "<<line_count<<" factor : variable"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"factor");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | ID LPAREN argument_list RPAREN
- {
- //cout<<"At line no: "<<line_count<<" factor : ID LPAREN argument_list RPAREN"<<endl<<endl;
- out<<"At line no: "<<line_count<<" factor : ID LPAREN argument_list RPAREN"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+"("+$3->getName()+")","factor");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | LPAREN expression RPAREN
- {
- //cout<<"At line no: "<<line_count<<" factor : LPAREN expression RPAREN"<<endl;
- out<<"At line no: "<<line_count<<" factor : LPAREN expression RPAREN"<<endl;
- SymbolInfo *x = new SymbolInfo("("+$2->getName()+")","factor");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | CONST_INT
- {
- //cout<<"At line no: "<<line_count<<" factor : CONST_INT\n"<<endl;
- out<<"At line no: "<<line_count<<" factor : CONST_INT\n"<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"int");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | CONST_FLOAT
- {
- //cout<<"At line no: "<<line_count<<" factor : CONST_FLOAT\n"<<endl<<endl;
- out<<"At line no: "<<line_count<<" factor : CONST_FLOAT\n"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"float");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | variable INCOP
- {
- //cout<<"At line no: "<<line_count<<" factor : variable INCOP\n"<<endl;
- out<<"At line no: "<<line_count<<" factor : variable INCOP\n"<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName() + "++","factor");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | variable DECOP
- {
- //cout<<"At line no: "<<line_count<<" factor : variable DECOP\n"<<endl<<endl;
- out<<"At line no: "<<line_count<<" factor : variable DECOP\n"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+"--","factor");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- argument_list : arguments
- {
- //cout<<"At line no: "<<line_count<<" argument_list : arguments"<<endl<<endl;
- out<<"At line no: "<<line_count<<" argument_list : arguments"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"argument_list");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- |
- {
- SymbolInfo *argumentInfo = new SymbolInfo("","argument_list");
- $$ = argumentInfo;
- //cout<<"At line no: "<<line_count<<$$->getName()<<endl<<endl;
- out<<"At line no: "<<line_count<<$$->getName()<<endl<<endl;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- arguments : arguments COMMA logic_expression
- {
- //cout<<"At line no: "<<line_count<<" arguments : arguments COMMA logic_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<<" arguments : arguments COMMA logic_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName()+","+$3->getName(),"argument_list");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- | logic_expression
- {
- //cout<<"At line no: "<<line_count<<" arguments : logic_expression"<<endl<<endl;
- out<<"At line no: "<<line_count<<" arguments : logic_expression"<<endl<<endl;
- SymbolInfo *x = new SymbolInfo($1->getName(),"argument_list");
- $$ = x;
- //cout<<$$->getName()<<endl<<endl;
- out<<$$->getName()<<endl<<endl;
- }
- ;
- %%
- int main(int argc,char *argv[])
- {
- FILE *fp, *fp2, *fp3;
- // if((fp=fopen(argv[1],"r"))==NULL)
- // {
- // printf("Cannot Open Input File.\n");
- // exit(1);
- // }
- // //cout<<"At line no: "<<line_count<<argv[2]<<endl;
- // fp2= fopen(argv[2],"w");
- // fclose(fp2);
- // fp3= fopen(argv[3],"w");
- // fclose(fp3);
- // fp2= fopen(argv[2],"a");
- // fp3= fopen(argv[3],"a");
- output = fopen("output_scope.txt","w");
- fclose(output);
- output = fopen("output_scope.txt","a");
- yyin=fp;
- yyin = fopen("input.txt","r");
- yyparse();
- // fclose(fp2);
- // fclose(fp3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement