Generatory analizatorów



Podobne dokumenty
Laboratorium z użyciem analizatora leksykalnego FLEX

Flex - generator analizatorów leksykalnych

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

10. Translacja sterowana składnią i YACC

Zadanie analizy leksykalnej

Bison - generator analizatorów składniowych

Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ by Kapitol Team

Metody Kompilacji Wykład 13

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Analiza leksykalna i generator LEX

L E X. Generator analizatorów leksykalnych

Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT

Podstawy generatora YACC. Bartosz Bogacki.

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Generator skanerów Flex

Semantyka i Weryfikacja Programów - Laboratorium 6

Parsery LL(1) Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Plan wykładu. Kompilatory. Literatura. Translatory. Literatura Translatory. Paweł J. Matuszyk

Ćwiczenia nr 11. Translatory. Wprowadzenie teoretyczne

PARADYGMATY I JĘZYKI PROGRAMOWANIA. lex/flex i yacc/bison w- 4 (2014)

Analizator syntaktyczny

Metody Kompilacji Wykład 3

Języki programowania zasady ich tworzenia

Zajęcia P2AM. Analizator składniowy (Flex + Bison, Linux)

Program We Kompilator Wy Źródłowy

Metody Kompilacji Wykład 1 Wstęp

Wykład 10. Translacja sterowana składnią

Języki formalne i gramatyki

Translacja sterowana składnią w generatorze YACC

Podstawy Kompilatorów

Podstawy Kompilatorów

automatem skończonym niedeterministycznym (ang. nondeterministic finite automaton) M N nazywamy system:

Generator LLgen. Wojciech Complak Generator LLgen - charakterystyka. Generator LLgen -składnia specyfikacji

Świat parserów. Krzysztof Leszczyński Polska Grupa Użytkowników Linuxa

Języki formalne i automaty Ćwiczenia 6

Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w C/C++ Narzędzia, zastosowanie oraz próby rankingu.

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Gramatyki atrybutywne

Podstawy kompilatorów. Generator LLgen. Wojciech Complak.

Podstawy Kompilatorów

JIP. Analiza składni, gramatyki

Translacja sterowana składnią w metodzie zstępującej

Metody Realizacji Języków Programowania

Tworzenie języków specyfikacji dla zagadnień numerycznych

Wybrane narzędzia do tworzenia analizatorów leksykalnych i składniowych w Javie

Paradygmaty i języki programowania. Analiza leksykalna Skaner, RE, DAS, NAS, ε- NAS

29. Poprawność składniowa i strukturalna dokumentu XML

Generator YACC: gramatyki niejednoznaczne

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Generator analizatorów leksykalnych - Lex. Bartosz Bogacki.

Obiektowa implementacja parsera klasy LL(1)

Wykład 5. Jan Pustelnik

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Wprowadzenie do kompilatorów

Matematyczne Podstawy Informatyki

Zadanie nr 3: Sprawdzanie testu z arytmetyki

Instrukcja Laboratoryjna. Instrukcja Laboratoryjna Parser gramatyki bezkontekstowej BISON Część statyczna

Programy pomocnicze: diff, make, systemy rcs i cvs, debugger. Zarządzanie wersjami.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Języki formalne i kompilatory (15 wyk., 15 ćw. audyt., 15 ćw. lab.)

Gramatyki regularne i automaty skoczone

Szablony klas, zastosowanie szablonów w programach

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

Metody kompilacji Wykłady 4-5

Efektywna analiza składniowa GBK

ZYKI BEZKONTEKSTOWE (KLASA

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Ćwiczenie 1. Ćwiczenie 2. Ćwiczenie 3. Opisz działanie następujących komend systemowych : COPY EDIT FDISK FIND FORMAT XCOPY

KONSTRUKCJA KOMPILATORÓW

Języki i techniki programowania Ćwiczenia 2

5. JĘZYKI BEZKONTEKSTOWE (KLASA "2") GRAMATYKI BEZKONTEKSTOWE AUTOMATY ZE STOSEM DETERMINISTYCZNE JĘZYKI BEZKONTEKSTOWE I

Podstawy Kompilatorów

Języki formalne i automaty Ćwiczenia 4

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Włączenie analizy leksykalnej do analizy składniowej jest nietrudne; po co więc jest wydzielona?

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Podstawy Kompilatorów

Matematyczne Podstawy Informatyki

Użycie Visual Basic for Applications ("VBA")

Informatyka I Lab 06, r.a. 2011/2012 prow. Sławomir Czarnecki. Zadania na laboratorium nr. 6

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

System operacyjny Linux

Laboratorium nr 4: Arytmetyka liczb zespolonych

Szablony. Szablony funkcji

Gramatyki (1-2) Definiowanie języków programowania. Piotr Chrząstowski-Wachjtel

Obliczenia inspirowane Naturą

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Analiza leksykalna i syntaktyczna. w- 5

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Język programowania PASCAL

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Zadanie nr 2: Arytmetyka liczb zespolonych

Języki formalne i automaty Ćwiczenia 9

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Języki i Środowiska Programowania Baz Danych 2010/2011 PJWSTK, 2010

Programowanie w języku Python. Grażyna Koba

Przesłanianie nazw, przestrzenie nazw

Podstawy Programowania

Analiza semantyczna. Gramatyka atrybutywna

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Transkrypt:

Generatory analizatorów Generator analizatora leksykalnego flex ( http://www.gnu.org/software/flex/ ) Generator analizatora składniowego bison ( http://www.gnu.org/software/bison/ ) Idea ogólna Opis atomów leksykalnych lub Opis gramatyki Generator Pliki źródłowe w języku prog. implementujące procedury skanera lub parsera Inne generatory Coco/R (http://www.ssw.uni linz.ac.at/research/projects/coco/) skaner oraz parser "recursive descent", duża ilość języków wyjściowych (C++,Java,C#) ANother Tool for Language Recognition (www.antlr.org) skaner, parser oraz procedury przeglądania wygenerowanego drzewa wywodu O.Świda 2005 wg dokum. www.gnu.org 1

Opis leksemów (wyrażenia regularne) FLEX lex.yy.c yylex() Flex Działanie procedury yylex() Czy dany tekst został rozpoznany jako leksem? Nie Kopiuj tekst na standardowe wyjście format pliku definicje (definicje prostych nazw oraz warunków początk.) %% reguły (wyrażenia regularne z akcjami zapisanymi w C) %% kod użytkownika (wklejany bezpośrednio) Tak Wykonaj akcje zdefiniowane w opisie leksemów O.Świda 2005 wg dokum. www.gnu.org 2

Definicje Flex c.d. "Zwykła" pomaga użytkownikowi definiować często używane elementy np. CYFRA [0 9] IDENT [a za Z][a za Z0 9_]* LICZBA_C {CYFRA}+ Warunek początkowy: %s string lub %x string Każdy tekst odsunięty od początku linii lub zawarty w %{ %} jest kopiowany Reguły składnia bardzo podobna do popularnej składni wyrażeń regularnych <warunek>wyrażenie wyrażenie rozpoznawane tylko wtedy, gdy skaner jest w stanie "warunek" <<EOF>> oznaczenie końca pliku (wejścia) wyrażenia [:alnum:], [:alpha:], [:digit:] itd. O.Świda 2005 wg dokum. www.gnu.org 3

Flex c.d. Generowany algorytm rozpoznawania wyrażeń Znajdź dopasowanie, które pobiera najdłuższy tekst Jeżeli znalazłeś więcej niż jedno dopasowanie o takiej samej długości wybierz to, które zostało zdefiniowane w pliku jako pierwsze Skopiuj tekst leksemu do zmiennej globalnej yytex a długość do yyleng Wykonaj zdefiniowaną akcję Różnica pomiędzy definicją %pointer a %array Akcje Kawałki kodu w języku C (lub C++) Specjalne: ECHO (wypisz yytext), REJECT (przejdź do następnej reguły), yymore() dołącz tekst następnego leksemu yyless(n) wypisz leksem, ale bez n początkowych znaków unput(c) zwróć znak na wejście input() odczytaj znak z wejścia yyterminate() zakończ i wyjdź z 0 BEGIN(<nazwa>) O.Świda 2005 wg dokum. www.gnu.org 4

Flex c.d. Procedura int yylex() oraz jej redefinicja makrem YY_DECL yyin oraz yyout Warunki początkowe (start conditions) INITIAL oraz BEGIN %s inclusive, %x exclusive Przełączanie buforów wejściowych YY_CURRENT_BUFFER YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) void yy_delete_buffer( YY_BUFFER_STATE buffer ) Ćwiczenie definicja reguł dla analizatora implementowanego na pracowni O.Świda 2005 wg dokum. www.gnu.org 5

Bison Generuje parser typu "bottom up" a dokładniej (Generalized LR) w przypadku konfliktu S/R lub R/R tworzymy kopie parserów i próbujemy równolegle wykonywać analizę ( funkcja yyparse() ) Pojęcie wartości semantycznej (semantic value) tokenu i wyrażenia ($) Lokalizacje (@) Format pliku wejściowego %{ Kod użytkownika %} deklaracje (symbole terminalne, nieterminalne, pierwsz. operatorów, wartości sem.) %% produkcje gramatyki (w notacji BNF) %% kod użytkownika (wklejany bezpośrednio) O.Świda 2005 wg dokum. www.gnu.org 6

Deklaracje %token IDENT 100 %token DOT "." Bison numer opcjonalnie Pierwszeństwo operatorów %left '+' ' ' %left '*' '/' Typy symboli terminalnych %union { double val; symrec *tptr; } %token <val> NUM Typy symboli nieterminalnych %type <val> EXPR %start PROGRAM Produkcje <nazwa prod>: <składowe> ; exp: term "+" term { akcja1 } term { akcja 1.5 } " " term { akcja2 } ; O.Świda 2005 wg dokum. www.gnu.org 7

Akcje i symbole specjalne Bison YYABORT / YYACCEPT natychmiastowe wyjście z błędem / bez błędu YYERROR symulacja błędu składni i rozpoczęcie procedury wydobywania YYRECOVERING wartość 1 w czasie wydobywania się z błędu $$ semantyczna wartość lewej strony produkcji $n semantyczna wartość n tej składowej prawej strony produkcji (od 1) @$, @n jak wyżej tylko lokalizacja zamiast wartości yychar aktualny symbol na wejściu lub YYEMPTY Generowany algorytm analizy składniowej Wydobywanie się z błędów yyerror(char *msg) funkcja definiowana przez użytkownika error specjalny symbol terminalny do używania w produkcjach Konflikty Shift/Reduce wybieramy Shift, Reduce/Reduce decyduje kolejność zapisu O.Świda 2005 wg dokum. www.gnu.org 8