• Nie Znaleziono Wyników

Projekt 3: analiza syntaktyczna i leksykalna

N/A
N/A
Protected

Academic year: 2021

Share "Projekt 3: analiza syntaktyczna i leksykalna"

Copied!
2
0
0

Pełen tekst

(1)

Projekt 3: analiza syntaktyczna i leksykalna

1. Wstęp.

Celem niniejszego projektu jest zaimplementowanie skanera i parsera dla C– przy użyciu generatora skanerów lex lub flex i generatora parserów bison. Dokumentację do lex’a/flex’a znajdziecie tutaj:

http://www.kompilatory.agh.edu.pl/pages/tk-laboratorium/flex.html a do bison’a tutaj:

http://www.kompilatory.agh.edu.pl/pages/tk-laboratorium/bison.html z kolei specyfikację języka C– tutaj:

http://www.math.us.edu.pl/˜pgladki/teaching/2011-2012/tk-cminusminus.html

Na potrzeby tego zadania zajmować będziecie się tylko regułami leksykalnymi i syntaktycznymi C–.

Innymi słowy, wszystko to, co wymaga informacji semantycznej, tj. wykorzystuje deklaracje – powinno zostać zignorowane.

2. Skaner

2.1. Uwagi ogólne. Skaner powinien zostać zaimplementowany jako funkcja, która za każdym wywo- łaniem zwraca albo liczbę naturalną oznaczającą, jakiego rodzaju token został znaleziony w strumieniu wejściowym, albo liczbę zero (koniec pliku) oznaczającą, że nie ma dalszych danych na wejściu. Słowa kluczowe nie mogą zostać użyte jako identyfikatory.

Wartości dla poszczególnych rodzajów tokenów powinny być zdefiniowane jako makra celem uprosz- czenia interfejsu pomiędzy skanerem i parserem. W tym celu najprościej jest zdefiniować jednoznakowe tokeny takie, jak ( i ; aby miały wartość odpowiadającej stałej znakowej, tj. aby wartość tokena ”lewego nawiasu” była równa wartości stałej znakowej ”(”.

2.2. Komentarze i białe spacje. Komentarze i białe spacje mają zostać pominięte ”po cichu”. W szczególności błędem będzie rozpoznanie końca pliku wewnątrz komentarza.

2.3. Błędy. Najprostszym sposobem radzenia sobie z błędami leksykalnymi będzie zostawienie ich ob- sługi parserowi. Można to osiągnąć po prostu przez zwracanie wartości każdego nieznanego znaku do parsera.

3. Parser

3.1. Uwagi ogólne. Należy przekształcić gramatykę tak, aby wyeliminować konflikty. Jedyne dopusz- czalne konflikty to konflikt pomiędzy przesuwaniem i redukowaniem ”złośliwie” zapętlającego się else oraz konflikt pomiędzy przesuwaniem i redukowaniem produkcji błędów.

3.2. Błędy. Waszym zadaniem będzie zaimplementowanie obsługi błędów oraz wychodzenia z błędów dla błędów syntaktycznych. W szczególności nie obejmuje to błędów semantycznych (tj. wszystkiego, co żąda informacji z deklaracji) – tym zajmiemy się w kolejnym projekcie.

Program powinien sobie radzić z błędami w sensowny sposób i zapisywać komunikaty o błędach do pli- ku stderr. Informacja o błędzie powinna być specyficzna i zawierać numer linii tak, aby użytkownik mógł łatwo dotrzeć do błędu. Wychodzenie z błędu powinno pozwolić parserowi zgrabnie wyjść i kontynuować parsowanie danych z wejścia nawet wtedy, gdy zostaną wykryte błędy syntaktyczne.

(2)

4. Wywoływanie programu.

Plik wykonywalny powinien się nazywać compile i powinien czytać z pliku stdin i zapisywać do pliku stdout. Komunikaty o błędach powinny być zapisane do pliku stderr.

Cytaty

Powiązane dokumenty

Jeśli najdłuższy możliwy prefiks pasuje do dwóch lub więcej wzorców, preferowany jest ten wzorzec, który jest wymieniony wcześniej w programie Lex.. 1.3.2 Operator

Istnieje raport lub formularz, który generuje listę najlepszych uczniów biorąc pod uwagę średnią z ocen.. Istnieje parametr, który określa jaka część uczniów (wyrażona

Utwórz zapytanie, które wyświetli nazwisko, imię, wiek pracownika i komentarz (osobom poniżej 40 ma się wyświetlić „junior”, osobom od 40 – „senior”).. Ćwiczenie

• Porównanie domyślnych wymagań czasowych każdej stacji – zegar rotacji tokenu (TRT) – jak często token musi docierać do stacji. • Zgłaszanie ofert rozpoczyna się

Temat: Mnożenie ułamków przez liczbę naturalną - rozwiązywanie zadań.. Przypomnij sobie informacje z poprzednich lekcji i obejrzyj film

Zrób rysunek na kartonie, albo w formie slajdu (1 slajd) obrazujący kolejność wykonywania działań i prześlij nauczycielowi. Sprawdzam i oceniam prace przesłane dzisiaj

Wyniki przedstaw w postaci liczby mieszanej lub liczby naturalnej... Mnożenie ułamka przez

W obiektowych bibliotekach we/wy zdefiniowano róŜne klasy obiektów − strumieni (w zaleŜności od specyficznych cech danego „urządzenia”). Cechy strumienia moŜna