YACC / LEX

Kezdőlap Fórumok Programozás YACC / LEX

5 bejegyzés megtekintése - 1-5 / 5
  • Szerző
    Bejegyzés
  • #1983720
    gabaman
    Felhasználó

      Lex: lexikai elemzõ
      YACC: értelmezõ generátor

      A páros nagyon hasznos, ha összetett szöveget kell beolvasni, vagy nagyszámú szabályok vonatkoznak a szövek nyelvezetére. Többek között a forráskódok elemzéséhez és feldolgozásához használják (pl. GCC). A flex a klasszikis lex egy változata, a bison meg a YACC GNU változata. közös jellemzõjük, hogy C forráskódot állítanak elõ .l vagy .y forrásból.

      #1983721
      Gyuszk
      Felhasználó
        #1983722
        tovis
        Felhasználó

          Lex: lexikai elemzõ
          YACC: értelmezõ generátor

          A páros nagyon hasznos, ha összetett szöveget kell beolvasni, vagy nagyszámú szabályok vonatkoznak a szövek nyelvezetére. Többek között a forráskódok elemzéséhez és feldolgozásához használják (pl. GCC). A flex a klasszikis lex egy változata, a bison meg a YACC GNU változata. közös jellemzõjük, hogy C forráskódot állítanak elõ .l vagy .y forrásból.
          [align=right][snapback]96658[/snapback][/align]

          Na itt vannak az én fehér foltjaim, tudnál valami egy sort idézni hogy milyen a .l és a .y forrás?
          ck. egy éve kellett scriptum értelmezõ spéci HW vezérlõ programocskát írnom, és mivel nem bírtam ezeken a dolgokon eligazodni, az egészet meg kellett írnom (stack kezelés, fordított lengyel formátum, „hardwired” szabály gyûjtemény …). :angry2:

          #1983723
          gabaman
          Felhasználó

            Mostanában készülök egy egyszerû C értelmezõt készíteni, akkor csak felvázolom a lényeget:

            scanner.l :

            Code:
            #include

            %x string
            %{
            ”          { BEGIN(string); }
            [^”]*  { strcpy(lval.str, yytext); return TOKEN_STRING; }
            ”       { BEGIN(INITIAL); }

            printf    { return TOKEN_PRINTF; }
            panic    { return TOKEN_PANIC; }

            [ tn]    { printf („%s”, yytext); }
            .          { printf („%s”, yytext); }
            %}

            parser.y :

            Code:
            #include

            %union {
             int i;
             float f;
             char* str;
            }

            %token TOKEN_STRING

            %token TOKEN_PRINTF
            %token TOKEN_PANIC
            %{
            line:
            | line lines
            ;

            lines:
             TOKEN_PRINTF „(” string
               { printf („printf2 (%d, %s”, getid(), $3); }
             | TOKEN_PANIC „(” string „)” „;”
               { printf („panic2 (%d, %s”, getid(), $3); }
            ;

            string:
             TOKEN_STRING
               { $$ = strdup(lval.str); }
            ;
            %}

            Valószínüleg van benne néhány hiba, ez csak vaktában hoztam össze. Annyit csinál, hogy a forrásfájlban (ez a rész nincs meg) megkeresi a printf („valami” és a panic („valami”); sorokat, ahol a tagok között bármennyi szóköz, tab, sorvége jel lehet, majd kicseréli õket. Hasonló feladatra Perl script jobb, mert gyorsabban elkészül (az már megvan), de túlzottan lassú ezért írom meg most C-ben.

            #1876996
            csaba
            Felhasználó

              Hali!

              Tudja valaki, mi ez:

              #YACC= yacc
              #especially for linux:
              YACC= bison -y

              #LEX= lex
              #especially for linux:
              LEX= flex -l

              #LEXLIB= -ll
              #especially for linux:
              LEXLIB= -lfl

              Egy makefile része a fentebbi pár sor, és nem nagyon tudok rájönni, mirõl szól…

              Köszi!

              Attila

            5 bejegyzés megtekintése - 1-5 / 5
            • Be kell jelentkezni a hozzászóláshoz.