Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %%
- Program:
- PACKAGE ID SEMICOLON {n1 root = new_node(NULL,"Program",line_conter,colunas_counter);if(flagt == 1){imprime_AST(root,0);}else if(flagt == 2){percorre_AST(root);}}
- |PACKAGE ID SEMICOLON Declarations {n1 root = new_node(NULL,"Program",line_conter,colunas_counter);add_Filhos(root,$4);if(flagt == 1){imprime_AST(root,0);}else if(flagt == 2){percorre_AST(root);}}
- ;
- Declarations:
- VarDeclaration SEMICOLON {$$ = $1;}
- |FuncDeclaration SEMICOLON {$$ = $1;}
- |Declarations VarDeclaration SEMICOLON {if($1 != NULL){
- $$ = $1;
- add_Irmao($$,$2);
- }else{
- $$ = $2;
- }
- }
- |Declarations FuncDeclaration SEMICOLON {if($1 != NULL){
- $$ = $1;
- add_Irmao($$,$2);
- }else{
- $$ = $2;
- }
- }
- ;
- VarDeclaration:
- VAR VarSpec {$$ = $2;}
- |VAR LPAR VarSpec SEMICOLON RPAR {$$ = $3;}
- ;
- VarSpec:
- ID VarSpec_2 Type {$$ = new_node(NULL, "VarDecl",line_conter,colunas_counter);add_Filhos($$,$3);add_Irmao($$->filhos,new_node($1,"Id",line_conter,$$->filhos->coluna-1-strlen($1)));if($2 != NULL){add_Irmao($$, add_Type2Irmao($2,$3));}}
- ;
- VarSpec_2:
- COMMA ID VarSpec_2 {$$ = new_node(NULL, "VarDecl",line_conter,colunas_counter);add_Filhos($$,new_node(NULL, NULL,line_conter,colunas_counter)); add_Irmao($$->filhos, new_node($2, "Id",line_conter,colunas_counter)); if($3 != NULL){add_Irmao($$, $3);}}
- | {$$ = NULL;}
- ;
- Type:
- INT {$$ = new_node(NULL,"Int",line_conter,colunas_counter-strlen("Int"));}
- |FLOAT32 {$$ = new_node(NULL,"Float32",line_conter,colunas_counter-strlen("Float32"));}
- |BOOL {$$ = new_node(NULL,"Bool",line_conter,colunas_counter-strlen("Bool"));}
- |STRING {$$ = new_node(NULL,"String",line_conter,colunas_counter-strlen("String"));}
- ;
- FuncDeclaration:
- FuncHeader FuncBody {$$=new_node(NULL,"FuncDecl",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$2);}
- ;
- FuncHeader:
- FUNC ID LPAR RPAR {$$=new_node(NULL,"FuncHeader",line_conter,colunas_counter);add_Filhos($$,new_node($2,"Id",line_conter,colunas_counter));add_Irmao($$->filhos,new_node(NULL,"FuncParams",line_conter,colunas_counter));}
- |FUNC ID LPAR Parameters RPAR {$$=new_node(NULL,"FuncHeader",line_conter,colunas_counter);add_Filhos($$,new_node($2,"Id",line_conter,colunas_counter));add_Irmao($$->filhos,$4);}
- |FUNC ID LPAR RPAR Type {$$=new_node(NULL,"FuncHeader",line_conter,colunas_counter);add_Filhos($$,new_node($2,"Id",line_conter,colunas_counter));add_Irmao($$->filhos,$5);add_Irmao($$->filhos,new_node(NULL,"FuncParams",line_conter,colunas_counter));}
- |FUNC ID LPAR Parameters RPAR Type {$$=new_node(NULL,"FuncHeader",line_conter,colunas_counter);add_Filhos($$,new_node($2,"Id",line_conter,colunas_counter));add_Irmao($$->filhos,$6);add_Irmao($$->filhos,$4);}
- ;
- Parameters:
- ParamDecl {$$=new_node(NULL,"FuncParams",line_conter,colunas_counter);add_Filhos($$,$1);}
- |Parameters COMMA ParamDecl {$$=$1;add_Irmao($$->filhos,$3);}
- ;
- ParamDecl:
- ID Type {$$=new_node(NULL,"ParamDecl",line_conter,colunas_counter);add_Filhos($$,$2);add_Irmao($$->filhos,new_node($1,"Id",line_conter,colunas_counter));}
- ;
- FuncBody:
- LBRACE VarsAndStatements RBRACE {$$=new_node(NULL,"FuncBody",line_conter,colunas_counter);
- if($2!=NULL){
- add_Filhos($$,$2);
- }
- }
- ;
- VarsAndStatements:
- VarsAndStatements SEMICOLON {$$ = $1;}
- |VarsAndStatements VarDeclaration SEMICOLON {if($1 != NULL){
- $$ = $1;
- add_Irmao($$,$2);
- }else{
- $$ = $2;
- }
- }
- |VarsAndStatements Statement SEMICOLON {if($1 != NULL){
- $$ = $1;
- add_Irmao($$,$2);
- }else{
- $$ = $2;
- }
- }
- | {$$ = NULL;}
- ;
- Statement:
- ID ASSIGN Expression {$$ = new_node(NULL,"Assign",line_conter,colunas_counter);add_Filhos($$,new_node($1,"Id",line_conter,colunas_counter));add_Irmao($$->filhos,$3);}
- |LBRACE Statement_2 RBRACE {if($2 != NULL){if(conta_filhos($2) > 1){$$ = new_node(NULL,"Block",line_conter,colunas_counter);add_Filhos($$,$2);cont = 0;}else{$$ = $2;}}else{$$ = NULL;}}
- |IF Expression LBRACE Statement_2 RBRACE {$$ = new_node(NULL,"If",line_conter,colunas_counter);add_Filhos($$,$2);aux_1 = new_node(NULL,"Block",line_conter,colunas_counter);aux_2 = new_node(NULL,"Block",line_conter,colunas_counter);add_Irmao($2,aux_1);add_Irmao(aux_1,aux_2);if($4 != NULL){add_Filhos(aux_1,$4);}}
- |IF Expression LBRACE Statement_2 RBRACE ELSE LBRACE Statement_2 RBRACE {$$ = new_node(NULL,"If",line_conter,colunas_counter);add_Filhos($$,$2);aux_1 = new_node(NULL,"Block",line_conter,colunas_counter);aux_2 = new_node(NULL,"Block",line_conter,colunas_counter);add_Irmao($2,aux_1);add_Irmao(aux_1,aux_2);if($4 != NULL){add_Filhos(aux_1,$4);}if($8 != NULL){add_Filhos(aux_2,$8);}}
- |FOR LBRACE Statement_2 RBRACE {$$ = new_node(NULL,"For",line_conter,colunas_counter);aux_1 = new_node(NULL,"Block",line_conter,colunas_counter);add_Filhos($$,aux_1);if($3 != NULL){add_Filhos(aux_1,$3);}}
- |FOR Expression LBRACE Statement_2 RBRACE {$$ = new_node(NULL,"For",line_conter,colunas_counter);add_Filhos($$,$2);aux_1 = new_node(NULL,"Block",line_conter,colunas_counter);add_Irmao($$->filhos,aux_1);if($4 != NULL){add_Filhos(aux_1,$4);}}
- |RETURN {$$ = new_node(NULL,"Return",line_conter,colunas_counter);}
- |RETURN Expression {$$ = new_node(NULL,"Return",line_conter,colunas_counter);add_Filhos($$,$2);}
- |FuncInvocation {$$ = $1;}
- |ParseArgs {$$ = $1;}
- |PRINT LPAR Expression RPAR {$$ = new_node(NULL,"Print",line_conter,colunas_counter);add_Filhos($$,$3);}
- |PRINT LPAR STRLIT RPAR {$$ = new_node(NULL,"Print",line_conter,colunas_counter);add_Filhos($$,new_node($3,"StrLit",line_conter,colunas_counter));}
- |error {$$ = NULL;}
- ;
- Statement_2:
- Statement_2 Statement SEMICOLON {$$ = add_Irmao_2($1,$2);if($1 != NULL){cont += 1;}}
- | {$$ = NULL;}
- ;
- ParseArgs:
- ID COMMA BLANKID ASSIGN PARSEINT LPAR CMDARGS LSQ Expression RSQ RPAR {$$ = new_node(NULL,"ParseArgs",line_conter,colunas_counter);add_Filhos($$,new_node($1,"Id",line_conter,colunas_counter));add_Irmao($$->filhos,$9);}
- |ID COMMA BLANKID ASSIGN PARSEINT LPAR error RPAR {$$ = NULL;}
- ;
- FuncInvocation:
- ID LPAR RPAR {$$ = new_node(NULL,"Call",line_conter,colunas_counter);add_Filhos($$,new_node($1,"Id",line_conter,colunas_counter));}
- |ID LPAR Expression FuncInvocation_2 RPAR {$$ = new_node(NULL,"Call",line_conter,colunas_counter);add_Filhos($$,new_node($1,"Id",line_conter,colunas_counter));add_Irmao($$->filhos,$3);add_Irmao($$->filhos,$4);}
- |ID LPAR Expression RPAR {$$ = new_node(NULL,"Call",line_conter,colunas_counter);add_Filhos($$,new_node($1,"Id",line_conter,colunas_counter));add_Irmao($$->filhos,$3);}
- |ID LPAR error RPAR {$$ = NULL;}
- ;
- FuncInvocation_2:
- COMMA Expression {$$ = $2;}
- |FuncInvocation_2 COMMA Expression {if($1 != NULL){
- $$ = $1;
- add_Irmao($$,$3);
- }else{
- $$ = $3;
- }
- }
- ;
- Expression:
- INTLIT {$$ = new_node($1,"IntLit",line_conter,colunas_counter);}
- |REALLIT {$$ = new_node($1,"RealLit",line_conter,colunas_counter);}
- |ID {$$ = new_node($1,"Id",line_conter,colunas_counter);}
- |FuncInvocation {$$ = $1;}
- |LPAR Expression RPAR {$$ = $2;}
- |Expression OR Expression {$$ = new_node(NULL,"Or",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression AND Expression {$$ = new_node(NULL,"And",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression LT Expression {$$ = new_node(NULL,"Lt",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression GT Expression {$$ = new_node(NULL,"Gt",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression EQ Expression {$$ = new_node(NULL,"Eq",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression NE Expression {$$ = new_node(NULL,"Ne",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression LE Expression {$$ = new_node(NULL,"Le",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression GE Expression {$$ = new_node(NULL,"Ge",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |NOT Expression {$$ = new_node(NULL,"Not",line_conter,colunas_counter);add_Filhos($$,$2);}
- |MINUS Expression {$$ = new_node(NULL,"Minus",line_conter,colunas_counter);add_Filhos($$,$2);}
- |PLUS Expression {$$ = new_node(NULL,"Plus",line_conter,colunas_counter);add_Filhos($$,$2);}
- |Expression PLUS Expression {$$ = new_node(NULL,"Add",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression MINUS Expression {$$ = new_node(NULL,"Sub",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression STAR Expression {$$ = new_node(NULL,"Mul",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression DIV Expression {$$ = new_node(NULL,"Div",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |Expression MOD Expression {$$ = new_node(NULL,"Mod",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
- |LPAR error RPAR {$$ = NULL;}
- ;
- %%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement