Advertisement
yepp

magic

Nov 21st, 2015
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.52 KB | None | 0 0
  1. %baseclass-preinclude "semantics.h"
  2. %lsp-needed
  3.  
  4. %token <szoveg> AZONOSITO
  5. %token WHILE ENDWHILE IF ENDIF ELSE ARIT_ADD ARIT_SUBTRACT ARIT_MULTIPLY ARIT_DIVIDE ARIT_MOD ARIT_BY TO FROM WRITE READ MOVE TYPE PROGRAM DATA SEP_KETTOSPONT SEP_PONT SEP_VESSZO OP_NOT TYPE_INTEGER TYPE_BOOL LIT_TRUE LIT_FALSE LIT_INTEGER NYITO CSUKO
  6.  
  7. %left OP_OR
  8. %left OP_AND
  9. %left OP_EGYENLO
  10. %left OP_KISEBB OP_NAGYOBB
  11.  
  12. %union
  13. {
  14.   std::string *szoveg;
  15. }
  16.  
  17. %%
  18.  
  19. start:
  20.     PROGRAM AZONOSITO SEP_PONT DATA SEP_KETTOSPONT deklaracio   { std::cout << "start -> PROGRAM AZONOSITO SEP_PONT DATA SEP_KETTOSPONT deklaracio" << std::endl; }
  21.     |PROGRAM AZONOSITO SEP_PONT torzs                           {std::cout << "start -> PROGRAM AZONOSITO SEP_PONT torzs " << std::endl;}
  22. ;
  23.  
  24. deklaracio:
  25.     AZONOSITO TYPE TYPE_INTEGER SEP_VESSZO deklaracio {
  26.         if( szimbolumtabla.count(*$1) > 0 ) {
  27.             std::stringstream ss;
  28.             ss << "Ujradeklaralt valtozo: " << *$1 << ".\n" << "Korabbi deklaracio sora: " << szimbolumtabla[*$1].decl_row << std::endl;
  29.             error( ss.str().c_str() );
  30.         }
  31.         szimbolumtabla[*$1] = var_data(d_loc__.first_line, integer);
  32.     }
  33.     |AZONOSITO TYPE TYPE_BOOL SEP_VESSZO deklaracio {
  34.         if( szimbolumtabla.count(*$1) > 0 ) {
  35.             std::stringstream ss;
  36.             ss << "Ujradeklaralt valtozo: " << *$1 << ".\n" << "Korabbi deklaracio sora: " << szimbolumtabla[*$1].decl_row << std::endl;
  37.             error( ss.str().c_str() );
  38.         }
  39.         szimbolumtabla[*$1] = var_data(d_loc__.first_line, boolean);
  40.     }
  41.     |AZONOSITO TYPE TYPE_INTEGER SEP_PONT torzs {
  42.         if( szimbolumtabla.count(*$1) > 0 ) {
  43.             std::stringstream ss;
  44.             ss << "Ujradeklaralt valtozo: " << *$1 << ".\n" << "Korabbi deklaracio sora: " << szimbolumtabla[*$1].decl_row << std::endl;
  45.             error( ss.str().c_str() );
  46.         }
  47.         szimbolumtabla[*$1] = var_data(d_loc__.first_line, integer);       
  48.     }
  49.     |AZONOSITO TYPE TYPE_BOOL SEP_PONT torzs {
  50.         if( szimbolumtabla.count(*$1) > 0 ) {
  51.             std::stringstream ss;
  52.             ss << "Ujradeklaralt valtozo: " << *$1 << ".\n" << "Korabbi deklaracio sora: " << szimbolumtabla[*$1].decl_row << std::endl;
  53.             error( ss.str().c_str() );
  54.         }
  55.         szimbolumtabla[*$1] = var_data(d_loc__.first_line, boolean);           
  56.     }
  57. ;
  58.  
  59. torzs:
  60.     // ures                                                     { std::cout << "torzs -> epszilon" << std::endl; }
  61.     |utasitas torzs                                             { std::cout << "torzs -> utasitas torzs" << std::endl; }
  62. ;
  63.  
  64. utasitas:
  65.     MOVE kifejezes_int TO AZONOSITO SEP_PONT {
  66.         /*if( szimbolumtabla.count(*$4) == 0 ) {
  67.             std::stringstream ss;
  68.             ss << "1 Nem deklaralt valtozo: " << *$4 << std::endl;
  69.             error( ss.str().c_str() );
  70.         }*/
  71.     }
  72.     |READ TO AZONOSITO SEP_PONT {
  73.         if( szimbolumtabla.count(*$3) == 0 ) {
  74.             std::stringstream ss;
  75.             ss << "2 Nem deklaralt valtozo: " << *$3 << std::endl;
  76.             error( ss.str().c_str() );
  77.         }
  78.     }
  79.     |WRITE AZONOSITO SEP_PONT                                                           { std::cout << "utasitas -> WRITE AZONOSITO SEP_PONT" << std::endl; }
  80.     |ARIT_ADD kifejezes_int TO AZONOSITO SEP_PONT                                       { std::cout << "utasitas -> ARIT_ADD kifejezes_int TO AZONOSITO SEP_PONT" << std::endl; }
  81.     |ARIT_SUBTRACT kifejezes_int FROM AZONOSITO SEP_PONT                                { std::cout << "utasitas -> ARIT_SUBTRACT kifejezes_int FROM AZONOSITO SEP_PONT" << std::endl; }
  82.     |ARIT_MULTIPLY AZONOSITO ARIT_BY kifejezes_int SEP_PONT                             { std::cout << "utasitas -> ARIT_MULTIPLY AZONOSITO ARIT_BY kifejezes_int SEP_PONT" << std::endl; }
  83.     |ARIT_DIVIDE AZONOSITO ARIT_BY kifejezes_int SEP_PONT                               { std::cout << "utasitas -> ARIT_DIVIDE AZONOSITO ARIT_BY kifejezes_int SEP_PONT" << std::endl; }
  84.     |ARIT_MOD AZONOSITO ARIT_BY kifejezes_int TO AZONOSITO SEP_PONT                     { std::cout << "utasitas -> ARIT_MOD AZONOSITO ARIT_BY kifejezes_int TO AZONOSITO SEP_PONT" << std::endl; }
  85.     |WHILE kifejezes_bool SEP_PONT utasitas torzs ENDWHILE SEP_PONT                     { std::cout << "utasitas -> WHILE kifejezes_bool SEP_PONT utasitas torzs ENDWHILE SEP_PONT" << std::endl; }
  86.     |IF kifejezes_bool SEP_PONT utasitas torzs ENDIF SEP_PONT                           { std::cout << "utasitas -> IF kifejezes_bool SEP_PONT utasitas torzs ENDIF SEP_PONT" << std::endl; }
  87.     |IF kifejezes_bool SEP_PONT utasitas torzs ELSE SEP_PONT utasitas torzs ENDIF SEP_PONT      { std::cout << "utasitas -> IF kifejezes_bool SEP_PONT utasitas torzs ELSE utasitas torzs ENDIF SEP_PONT" << std::endl; }
  88. ;
  89.  
  90. kifejezes_int:
  91.     LIT_INTEGER                                                 { std::cout << "kifejezes_int -> LIT_INTEGER" << std::endl; }
  92.     |AZONOSITO                                                  { std::cout << "kifejezes_int -> AZONOSITO" << std::endl; }
  93. ;
  94. kifejezes_bool:
  95.     LIT_TRUE                                                    { std::cout << "kifejezes_bool -> LIT_TRUE" << std::endl; }
  96.     |LIT_FALSE                                                  { std::cout << "kifejezes_bool -> LIT_FALSE" << std::endl; }
  97.     |AZONOSITO                                                  { std::cout << "kifejezes_bool -> AZONOSITO" << std::endl; }
  98.     |NYITO kifejezes_bool CSUKO                                 { std::cout << "kifejezes_bool -> NYITO kifejezes_bool CSUKO    " << std::endl; }
  99.     |kifejezes_bool OP_AND kifejezes_bool                       { std::cout << "kifejezes_bool -> kifejezes_bool OP_AND kifejezes_bool " << std::endl; }
  100.     |kifejezes_bool OP_OR kifejezes_bool                        { std::cout << "kifejezes_bool -> kifejezes_bool OP_OR kifejezes_bool " << std::endl; }
  101.     |kifejezes_int_to_bool OP_AND kifejezes_bool                { std::cout << "kifejezes_bool -> kifejezes_bool OP_AND kifejezes_bool " << std::endl; }
  102.     |kifejezes_bool OP_OR kifejezes_int_to_bool                 { std::cout << "kifejezes_bool -> kifejezes_bool OP_OR kifejezes_bool " << std::endl; }
  103.     |kifejezes_bool OP_AND kifejezes_int_to_bool                { std::cout << "kifejezes_bool -> kifejezes_bool OP_AND kifejezes_bool " << std::endl; }
  104.     |kifejezes_int_to_bool OP_OR kifejezes_bool                 { std::cout << "kifejezes_bool -> kifejezes_bool OP_OR kifejezes_bool " << std::endl; }
  105.     |OP_NOT kifejezes_bool                                      { std::cout << "kifejezes_bool -> OP_NOT kifejezes_bool" << std::endl; }
  106.     |kifejezes_int_to_bool OP_AND kifejezes_int_to_bool         { std::cout << "kifejezes_bool -> kifejezes_int_to_bool OP_AND kifejezes_int_to_bool" << std::endl; }
  107.     |kifejezes_int_to_bool OP_OR kifejezes_int_to_bool          { std::cout << "kifejezes_bool -> kifejezes_int_to_bool OP_OR kifejezes_int_to_bool" << std::endl; }
  108.     |OP_NOT kifejezes_int_to_bool                               { std::cout << "kifejezes_bool -> OP_NOT kifejezes_int_to_bool" << std::endl; }
  109. ;
  110.  
  111. kifejezes_int_to_bool:
  112.     kifejezes_int OP_EGYENLO kifejezes_int                      { std::cout << "kifejezes_int_to_bool -> kifejezes_int OP_EGYENLO kifejezes_int" << std::endl; }
  113.     |kifejezes_int OP_KISEBB kifejezes_int                      { std::cout << "kifejezes_int_to_bool -> kifejezes_int OP_KISEBB kifejezes_int" << std::endl; }
  114.     |kifejezes_int OP_NAGYOBB kifejezes_int                     { std::cout << "kifejezes_int_to_bool -> kifejezes_int OP_NAGYOBB kifejezes_int" << std::endl; }
  115. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement