Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 16.27 KB | None | 0 0
  1. %%
  2.  
  3. Program:
  4.         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);}}
  5.         |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);}}
  6.         ;
  7.  
  8. Declarations:
  9.         VarDeclaration SEMICOLON                                                        {$$ = $1;}
  10.         |FuncDeclaration SEMICOLON                                                      {$$ = $1;}
  11.         |Declarations VarDeclaration SEMICOLON                                          {if($1 != NULL){
  12.                                                                                             $$ = $1;
  13.                                                                                             add_Irmao($$,$2);
  14.                                                                                         }else{
  15.                                                                                             $$ = $2;
  16.  
  17.                                                                                         }
  18.                                                                                         }
  19.         |Declarations FuncDeclaration SEMICOLON                                         {if($1 != NULL){
  20.                                                                                             $$ = $1;
  21.                                                                                             add_Irmao($$,$2);
  22.                                                                                         }else{
  23.                                                                                             $$ = $2;
  24.  
  25.                                                                                         }
  26.                                                                                         }
  27.         ;
  28.  
  29. VarDeclaration:
  30.         VAR VarSpec                                                                     {$$ = $2;}
  31.         |VAR LPAR VarSpec SEMICOLON RPAR                                                {$$ = $3;}
  32.         ;
  33.  
  34. VarSpec:
  35.         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));}}
  36.         ;
  37.  
  38. VarSpec_2:
  39.         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);}}
  40.         |                                    {$$ = NULL;}
  41.         ;
  42.  
  43. Type:
  44.         INT                                                                             {$$ = new_node(NULL,"Int",line_conter,colunas_counter-strlen("Int"));}
  45.         |FLOAT32                                                                        {$$ = new_node(NULL,"Float32",line_conter,colunas_counter-strlen("Float32"));}
  46.         |BOOL                                                                           {$$ = new_node(NULL,"Bool",line_conter,colunas_counter-strlen("Bool"));}
  47.         |STRING                                                                         {$$ = new_node(NULL,"String",line_conter,colunas_counter-strlen("String"));}
  48.         ;
  49.  
  50. FuncDeclaration:
  51.         FuncHeader FuncBody                                                             {$$=new_node(NULL,"FuncDecl",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$2);}
  52.         ;
  53.  
  54. FuncHeader:
  55.         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));}
  56.         |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);}
  57.         |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));}
  58.         |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);}
  59.         ;
  60.  
  61.  
  62. Parameters:
  63.         ParamDecl                                                                       {$$=new_node(NULL,"FuncParams",line_conter,colunas_counter);add_Filhos($$,$1);}
  64.         |Parameters COMMA ParamDecl                                                     {$$=$1;add_Irmao($$->filhos,$3);}
  65.         ;
  66.  
  67. ParamDecl:
  68.         ID Type                                                                         {$$=new_node(NULL,"ParamDecl",line_conter,colunas_counter);add_Filhos($$,$2);add_Irmao($$->filhos,new_node($1,"Id",line_conter,colunas_counter));}
  69.         ;
  70.  
  71.  
  72. FuncBody:
  73.         LBRACE VarsAndStatements RBRACE                                                 {$$=new_node(NULL,"FuncBody",line_conter,colunas_counter);
  74.                                                                                         if($2!=NULL){
  75.                                                                                             add_Filhos($$,$2);
  76.                                                                                         }
  77.                                                                                         }
  78.         ;
  79.  
  80. VarsAndStatements:
  81.         VarsAndStatements SEMICOLON                                                     {$$ = $1;}
  82.         |VarsAndStatements VarDeclaration SEMICOLON                                     {if($1 != NULL){
  83.                                                                                             $$ = $1;
  84.                                                                                             add_Irmao($$,$2);
  85.                                                                                         }else{
  86.                                                                                             $$ = $2;
  87.  
  88.                                                                                         }
  89.                                                                                         }
  90.         |VarsAndStatements Statement SEMICOLON                                          {if($1 != NULL){
  91.                                                                                             $$ = $1;
  92.                                                                                             add_Irmao($$,$2);
  93.                                                                                         }else{
  94.                                                                                             $$ = $2;
  95.  
  96.                                                                                         }
  97.                                                                                         }
  98.         |                                                                               {$$ = NULL;}
  99.         ;
  100.  
  101. Statement:
  102.         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);}
  103.         |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;}}
  104.         |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);}}
  105.         |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);}}
  106.         |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);}}
  107.         |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);}}
  108.         |RETURN                                                                         {$$ = new_node(NULL,"Return",line_conter,colunas_counter);}
  109.         |RETURN Expression                                                              {$$ = new_node(NULL,"Return",line_conter,colunas_counter);add_Filhos($$,$2);}
  110.         |FuncInvocation                                                                 {$$ = $1;}
  111.         |ParseArgs                                                                      {$$ = $1;}
  112.         |PRINT LPAR Expression RPAR                                                     {$$ = new_node(NULL,"Print",line_conter,colunas_counter);add_Filhos($$,$3);}
  113.         |PRINT LPAR STRLIT RPAR                                                         {$$ = new_node(NULL,"Print",line_conter,colunas_counter);add_Filhos($$,new_node($3,"StrLit",line_conter,colunas_counter));}
  114.         |error                                                                          {$$ = NULL;}
  115.         ;
  116.  
  117. Statement_2:
  118.         Statement_2 Statement SEMICOLON                                                 {$$ = add_Irmao_2($1,$2);if($1 != NULL){cont += 1;}}
  119.         |                                                                               {$$ = NULL;}
  120.         ;
  121.  
  122. ParseArgs:
  123.         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);}
  124.         |ID COMMA BLANKID ASSIGN PARSEINT LPAR error RPAR                               {$$ = NULL;}
  125.         ;
  126.  
  127. FuncInvocation:
  128.         ID LPAR RPAR                                                                    {$$ = new_node(NULL,"Call",line_conter,colunas_counter);add_Filhos($$,new_node($1,"Id",line_conter,colunas_counter));}
  129.         |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);}
  130.         |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);}
  131.         |ID LPAR error RPAR                                                             {$$ = NULL;}
  132.         ;
  133.  
  134. FuncInvocation_2:
  135.         COMMA Expression                                                                {$$ = $2;}
  136.         |FuncInvocation_2 COMMA Expression                                              {if($1 != NULL){
  137.                                                                                             $$ = $1;
  138.                                                                                             add_Irmao($$,$3);
  139.                                                                                         }else{
  140.                                                                                             $$ = $3;
  141.  
  142.                                                                                         }
  143.                                                                                         }
  144.         ;
  145.  
  146. Expression:
  147.         INTLIT                                                                          {$$ = new_node($1,"IntLit",line_conter,colunas_counter);}
  148.         |REALLIT                                                                        {$$ = new_node($1,"RealLit",line_conter,colunas_counter);}
  149.         |ID                                                                             {$$ = new_node($1,"Id",line_conter,colunas_counter);}
  150.         |FuncInvocation                                                                 {$$ = $1;}
  151.         |LPAR Expression RPAR                                                           {$$ = $2;}
  152.         |Expression OR Expression                                                       {$$ = new_node(NULL,"Or",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  153.         |Expression AND Expression                                                      {$$ = new_node(NULL,"And",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  154.         |Expression LT Expression                                                       {$$ = new_node(NULL,"Lt",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  155.         |Expression GT Expression                                                       {$$ = new_node(NULL,"Gt",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  156.         |Expression EQ Expression                                                       {$$ = new_node(NULL,"Eq",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  157.         |Expression NE Expression                                                       {$$ = new_node(NULL,"Ne",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  158.         |Expression LE Expression                                                       {$$ = new_node(NULL,"Le",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  159.         |Expression GE Expression                                                       {$$ = new_node(NULL,"Ge",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  160.         |NOT Expression                                                                 {$$ = new_node(NULL,"Not",line_conter,colunas_counter);add_Filhos($$,$2);}
  161.         |MINUS Expression                                                               {$$ = new_node(NULL,"Minus",line_conter,colunas_counter);add_Filhos($$,$2);}
  162.         |PLUS Expression                                                                {$$ = new_node(NULL,"Plus",line_conter,colunas_counter);add_Filhos($$,$2);}
  163.         |Expression PLUS Expression                                                     {$$ = new_node(NULL,"Add",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  164.         |Expression MINUS Expression                                                    {$$ = new_node(NULL,"Sub",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  165.         |Expression STAR Expression                                                     {$$ = new_node(NULL,"Mul",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  166.         |Expression DIV Expression                                                      {$$ = new_node(NULL,"Div",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  167.         |Expression MOD Expression                                                      {$$ = new_node(NULL,"Mod",line_conter,colunas_counter);add_Filhos($$,$1);add_Irmao($$->filhos,$3);}
  168.         |LPAR error RPAR                                                                {$$ = NULL;}
  169.         ;
  170.  
  171. %%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement