sintakses analiz t ju eneratori n.
Skip this Video
Loading SlideShow in 5 Seconds..
Sintakses analizētāju ģeneratori PowerPoint Presentation
Download Presentation
Sintakses analizētāju ģeneratori

Loading in 2 Seconds...

  share
play fullscreen
1 / 13
Download Presentation

Sintakses analizētāju ģeneratori - PowerPoint PPT Presentation

leon
99 Views
Download Presentation

Sintakses analizētāju ģeneratori

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Sintakses analizētāju ģeneratori

  2. Hierarhiskā analīze Kompilatoru kontekstā hierarhisko analīzi sauc par sintaksesanalīzi. Angliski – parsing. Sintakses analīzes procesā notiek vienumu grupēšana gramatiskās frāzēs, ko kompilators tālāk izmantos sintēzes procesā. Parasti izejas programmas gramatiskās frāzes tiek attēlotas koka formā.

  3. Sintakses analizētāju ģenerators BISON Pārveido kontekstneatkarīgas LALR(1) gramatikas aprakstu C programmā, kas veic šai gramatikai atbilstošo sintakses analīzi.

  4. Sintakses analizētāja būve, izmantojot BISON Analizētāja ģenerētājs BISON Analizētāja izejas teksts valodā C BISON programma Jāveido tieši šajā brīdī Leksikas analizētājsyylex() Analizētājaizpildāmsmodulis Analizētāja izejas teksts valodā C C kompilators Analizētājaizpildāmsmodulis Ievaddati (analizējamais teksts) Izvaddati(analīzes rezultāts)

  5. BISON programmas struktūra deklarācijas %% gramatikas likumi %% ārējās procedūras Obligātā daļa

  6. deklarācijas %% gramatikas likumi %% ārējās procedūras • Satur: • C valodas specifikācijas (starp %{ un %} ), kas jāiekļauj sintakses analizētāja sākumā • Vienumu deklarācijas (%token)%token IDENT NUMBER vienumiem tiks piešķirtas skaitliskas vērtības un tās izmantos lai sazinātos ar leksikas analizētāju. Ja ļoti vajag, skaitlisko vērtību var pats atklāti norādīt.Vienuma nosaukums nedrīkst sakrist ar C atslēgas vārdu. Ar “yy” sākumā arī var būt nepatikšanas. • Informāciju par operatoru prioritāti un asociativitāti • Gramatikas starta simbola aprakstu (%start)%start pirmais_likums

  7. deklarācijas %% gramatikas likumi %% ārējās procedūras • Satur: • C valodas deklarācijas un/vai definīcijas (starp %{ un %} ) • Gramatiku produkciju aprakstus formā • neterminālis: • labā_puse_1 {semantiskā_akcija_1} • | labā_puse_2 {semantiskā_akcija_2} • … • | labā_puse_n {semantiskā_akcija_n} • ;

  8. deklarācijas %% gramatikas likumi %% ārējās procedūras • Īpaši pseidomainīgie: • $$ ir vērtība, ko atdod gramatikas likums • $1, $2, … ir vērtības, ko atdod gramatikas likumu labās puses attiecīgās daļas • exp : ‘(‘ exp ‘)’ {$$ = $2;} ; • Tiek atpazīta izteiksme iekavās un tās vērtība atdota kā izteiksmes vērtība • exp : NUMBER {$$ = $1;} ; • Tiek atpazīts skaitlis un tā vērtība (ko saņem no leksikas analizētāja kā yylval) atdota kā izteiksmes vērtība

  9. Praktiskā darbināšana veido .h failu izdrukā stāvokļus bison -d -v mo_piem1.y flex mo_piem1.lex gcc -c mo_piem1_tab.c -o mo_piem1_tab.o gcc -c lex.yy.c -o lex.yy.o gcc -o mo_piem1 lex.yy.o mo_piem1_tab.o

  10. %{ #define YYSTYPE double %} %token burts_a burts_b %token beigas nelabs %start input %% /* Produkcijas un darbības */ input : /* empty */ | input line ; line : S beigas { printf ("Der\n"); } | Kluda beigas {printf ("Neder"); } ; S : burts_a S { printf ("Satikts a\n"); } | burts_b S { printf ("Satikts b\n"); } | /*empty */ { printf ("Tukšums\n"); } ; Kluda : S nelabs S {} ; %% int main () /* The ``Main'' function to make this stand-alone */ { yyparse (); } #include <stdio.h> yyerror (s) /* Called by yyparse on error */ char *s; { printf ("_%s_\n", s); } mo_piem1.y

  11. mo_piem1.lex %option noyywrap %{ #include "mo_piem1_tab.h" %} %% a { printf("Flex saticis a\n"); return(burts_a);} b { printf("Flex saticis b\n"); return(burts_b);} \n { printf("Flex saticis rindas beigas\n"); return(beigas); } . { printf("Flex saticis simbolu %s\n",yytext); return(nelabs);} %%

  12. Ievads abbca Izvads Flex saticis a Flex saticis b Flex saticis b Flex saticis simbolu c Tukšums Satikts b Satikts b Satikts a Flex saticis a Flex saticis rindas beigas Tukšums Satikts a Neder

  13. Ievads abba Izvads Flex saticis a Flex saticis b Flex saticis b Flex saticis a Flex saticis rindas beigas Tukšums Satikts a Satikts b Satikts b Satikts a Der