Kezdőlap › Fórumok › Programozás › YACC / LEX
- This topic has 4 hozzászólás, 4 résztvevő, and was last updated 20 years, 7 months telt el by
gabaman.
-
SzerzőBejegyzés
-
2004-11-12-14:57 #1983720
Lex: lexikai elemzõ
YACC: értelmezõ generátorA 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.
2004-11-12-15:53 #19837212004-11-16-08:25 #1983722Lex: lexikai elemzõ
YACC: értelmezõ generátorA 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:2004-11-18-18:29 #1983723Mostaná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.
2009-12-04-19:56 #1876996Hali!
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= -lflEgy makefile része a fentebbi pár sor, és nem nagyon tudok rájönni, mirõl szól…
Köszi!
Attila
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz