1. Maszyna Turinga, gramatyki formalne i ONP

Podobne dokumenty
Matematyczne Podstawy Informatyki

Języki programowania zasady ich tworzenia

Podstawy Informatyki Maszyna Turinga

Odwrotna Notacja Polska

Języki formalne i automaty Ćwiczenia 9

Maszyna Turinga języki

Algorytmy i struktury danych. wykład 2

Języki formalne i automaty Ćwiczenia 1

Hierarchia Chomsky ego Maszyna Turinga

Podstawy Informatyki Gramatyki formalne

Matematyczna wieża Babel. 4. Ograniczone maszyny Turinga o językach kontekstowych materiały do ćwiczeń

1. Synteza automatów Moore a i Mealy realizujących zadane przekształcenie 2. Transformacja automatu Moore a w automat Mealy i odwrotnie

JAO - Wprowadzenie do Gramatyk bezkontekstowych

TRANSLACJA I TRANSLATORY

Algorytm. a programowanie -

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

1 Automaty niedeterministyczne

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Języki formalne i automaty Ćwiczenia 7

Definicje. Algorytm to:

Arytmetyka liczb binarnych

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Języki formalne i automaty Ćwiczenia 4

Złożoność obliczeniowa zadania, zestaw 2

Hierarchia Chomsky ego

Wstęp do informatyki- wykład 2

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Zadanie 1. Czy prawdziwa jest następująca implikacja? Jeśli L A jest językiem regularnym, to regularnym językiem jest też. A = (A, Q, q I, F, δ)

Obliczenia inspirowane Naturą

Metody Kompilacji Wykład 3

Języki formalne i automaty Ćwiczenia 3

Matematyczne Podstawy Informatyki

Języki formalne i automaty Ćwiczenia 2

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Przykład: Σ = {0, 1} Σ - zbiór wszystkich skończonych ciagów binarnych. L 1 = {0, 00, 000,...,1, 11, 111,... } L 2 = {01, 1010, 001, 11}

Automat ze stosem. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

MODELOWANIE RZECZYWISTOŚCI

Laboratorium 10: Maszyna stanów

Zadanie 2: Arytmetyka symboli

LOGIKA I TEORIA ZBIORÓW

Turing i jego maszyny

Analiza semantyczna. Gramatyka atrybutywna

Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.

Zadanie 1. (6 punktów) Słowo w nazwiemy anagramem słowa v jeśli w można otrzymać z v poprzez zamianę kolejności liter. Niech

Wyrażenie nawiasowe. Wyrażenie puste jest poprawnym wyrażeniem nawiasowym.

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Języki formalne i automaty Ćwiczenia 6

ALGORYTMY I PROGRAMY

Składnia rachunku predykatów pierwszego rzędu

Programowanie i techniki algorytmiczne

Języki i gramatyki formalne

Programowanie komputerów

Temat: Zastosowanie wyrażeń regularnych do syntezy i analizy automatów skończonych

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

Programowanie w języku C++ Grażyna Koba

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Gramatyki atrybutywne

Obliczenia inspirowane Naturą

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

Mikrooperacje. Mikrooperacje arytmetyczne

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

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska

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

Systemy liczbowe używane w technice komputerowej

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

1. Operacje logiczne A B A OR B

wagi cyfry pozycje

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

GRAMATYKI BEZKONTEKSTOWE

Języki, automaty i obliczenia

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Algorytm. Krótka historia algorytmów

Zależności funkcyjne

Matematyczne Podstawy Informatyki

Temat: Algorytm kompresji plików metodą Huffmana

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

UKŁADY MIKROPROGRAMOWALNE

Maszyna Turinga (Algorytmy Część III)

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

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN):

Zadanie nr 3: Sprawdzanie testu z arytmetyki

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

EGZAMIN MATURALNY Z INFORMATYKI 17 MAJA 2016 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Efektywna analiza składniowa GBK

Definicja 2. Twierdzenie 1. Definicja 3

Informatyka. Michał Rad

Technologie informacyjne - wykład 12 -

Algorytmy sztucznej inteligencji

Luty 2001 Algorytmy (7) 2000/2001

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Arytmetyka komputera

Łączenie liczb i tekstu.

Transkrypt:

1. Maszyna uringa, gramatyki formalne i OP 1.1.Maszyna uringa Automat skończony składa się ze skończonego zbioru stanów i zbioru przejść ze stanu do stanu, zachodzących przy różnych symbolach wejściowych wybranych z pewnego alfabetu Σ. Dla każdego symbolu wejściowego istnieje dokładnie jedno przejście z każdego stanu (które może w szczególnym przypadku prowadzić do tego samego stanu) odpowiadające temu symbolowi. Jeden ze stanów, oznaczany zazwyczaj symbolem q 0, jest stanem początkowym, od którego automat rozpoczyna działanie. iektóre ze stanów pełnią rolę końcowych. Automat skończony przedstawiamy formalnie jako piątkę uporządkowaną (Q, Σ, δ, q 0, F), gdzie Q jest zbiorem stanów, Σ jest skończonym alfabetem wejściowym, q 0 należące do Q jest stanem początkowym, F Q jest zbiorem stanów końcowych, a δ jest funkcją odwzorowującą Q Σ w Q. ak więc δ przyporządkowuje każdemu stanowi q i każdemu symbolowi wejściowemu a nowy stan δ(q,a). Maszyna uringa jest automatem abstrakcyjnym, służącym do analizy algorytmów. kłada się ona z podzielonej na kratki nieskończenie długiej taśmy oraz głowicy przesuwającej się nad taśmą. Głowica ma możliwość czytania i zapisywania symboli na taśmę. Zdefiniujemy teraz podstawowe pojęcia używane do opisu maszyny uringa. Zbiór symboli = { s i } - zbiór symboli, które będą przetwarzane przez maszynę uringa, przyjęty jako alfabet. apis - ciąg symboli alfabetu. Głowica - rozróżnia, czyta i zapisuje symbole alfabetu. Może przesuwać się wzdłuż taśmy. Przyjmuje zawsze jeden z m stanów q 1,, q m. tan maszyny - określa jednoznacznie stan głowicy q j i odczytany przez nią symbol s i : ij = (s i, q j ). Ruch maszyny - opisuje akcję, jaką ma wykonać maszyna uringa. Ruch maszyny jest reakcją maszyny na stan ij. Opisywany jest za pomocą trzech parametrów R ij = (s k, K, q l ). s k jest symbolem, który ma być zapisany przez głowicę, K określa sposób przesunięcia taśmy, a q l charakteryzuje stan, do którego ma przejść głowica. Po zapoznaniu się a powyższymi określeniami przejdźmy do opisu działania oraz programowania maszyny uringa. Po pierwsze należy odnotować fakt, iż każdy ruch Rij jest związany jednoznacznie ze stanem maszyny ij. Możemy zatem zapisać następującą zależność: R ij = ( ij ) Funkcję nazywamy tablicą charakterystyczną maszyny uringa. azwa ta związana jest z reprezentacją tej funkcji. Przedstawimy teraz przykładową tablicę charakterystyczną. q 1... q j... q m s 1 R 11... R 1j... R 1m.................. s i R i1... R ij... R im.................. s n R n1... R nj... R nm R ij = (s k, K, q l ) Interpretacja tej tablicy jest następująca: Jeżeli będąc w stanie q j głowica odczytała symbol s i, to należy zapisać na taśmie symbol s k, przesunąć taśmę w kierunku określonym przez K, a głowica ma przejść do stanu q l. ytuację tę zilustrujemy rysunkiem. q j Głowica R ij G s k aśma z symbolami Rysunek 1.1-1 1

1.1.1.wierdzenie: Każdy algorytm może być zrealizowany przez odpowiednio zaprogramowaną (za pomocą tablicy charakterystycznej) maszynę uringa. 1.1.1.1.Przykład W zbiorze napisów trójliterowych utworzonych z liter a, b, c tylko napis abc jest poprawny. Podać algorytm rozpoznawania tego napisu. 1.1.1.1.1.Rozwiązanie Algorytm realizujący powyższe zadanie przedstawimy w postaci opisu słownego. 1. Pobierz symbol. Jeżeli jest nim a, to pobierz następny symbol i idź do 2, w przeciwnym przypadku idź do 4. 2. Jeżeli pobranym symbolem jest b, to pobierz następny symbol i przejdź do 3, jeżeli nie, to idź do 4. 3. Jeżeli pobranym symbolem jest c, idź do 5, w przeciwnym przypadku idź do 4. 4. ygnalizuj nieprawidłowy napis. 5. ygnalizuj napis poprawny. chemat blokowy algorytmu. AR a iepopr. 4 1 Pobierz symbol b iepopr. 4 2 Pobierz symbol iepopr. c 3 4 Poprawny Rysunek 1.1-2 Przedstawimy teraz zapis tego algorytmu w postaci tablicy charakterystycznej maszyny uringa. W tym celu określimy 5 stanów maszyny odpowiadających kolejnym krokom algorytmu. Zgodnie z przyjętym sposobem opisu tabeli stany te zaznaczymy w najwyższym wierszu tabeli. W pierwszej kolumnie umieszczone zostaną wszystkie możliwe symbole, czyli litery a, b, c. Ponieważ algorytm nie wymaga zapisywania żadnych symboli na taśmę i jednocześnie nie występuje konieczność zmiany kierunku przesuwania taśmy, do opisu ruchu maszyny użyjemy następujących symboli: P - pobierz następny symbol, - nie pobieraj niczego, q n - przejdź do stanu n, sam ruch charakteryzując tylko dwoma parametrami: R ij = (K, q l ) Oto tabela charakterystyczna. 5 q 1 q 2 q 3 q 4 q 5 a Pq 2 q 4 q 4 q 4 q 5 b q 4 Pq 3 q 4 q 4 q 5 c q 4 q 4 q 5 q 4 q 5 Zauważmy, że stany q 4 i q 5 są stanami, w których zatrzyma się maszyna po wykonaniu algorytmu. Warto zwrócić tutaj uwagę na semantykę tych stanów: zatrzymanie się maszyny w stanie q 4 oznacza, że wprowadzony ciąg znaków nie był poprawny, a zatrzymanie w stanie q 5 oznacza że był. 1.1.1.2.Przykład Zaprojektować maszynę uringa obliczającą sumę dowolnej liczby zapisanej w systemie dziesiętnym i liczby 1. 1.1.1.2.1.Rozwiązanie 2

Aby do dowolnej liczby dodać 1, należy przeanalizować jej ostatnią cyfrę. Jeżeli jest nią któraś z cyfr 0-8, to dodanie jedynki sprowadzi się do zapisania w tym miejscu danej cyfry zwiększonej o jeden, tzn. Jednej z cyfr 1-9. Jeśli ostatnią cyfrą jest cyfra 9, to należy w jej miejscu zapisać cyfrę 0, a następnie dodać 1 do cyfry przedostatniej lub napisać jedynkę, jeżeli cyfra ta nie występuje. A oto zapis tego algorytmu w języku naturalnym (zaczynamy analizę liczby od jej ostatniej cyfry - maszyna uringa powinna być wstępnie ustawiona właśnie na tej cyfrze): 1. Jeżeli cyfra z zakresu 0-8 pisz odpowiednio 1-9 i idź do 3, w przeciwnym przypadku pisz 0, przesuń głowicę w lewo i idź do 2. 2. Jeżeli miejsce puste pisz 1 i idź do 3, jeśli nie idź do 1. 3. ygnalizuj koniec. Prześledźmy dla przykładu dodanie jedynki do liczby 89: tan maszyny q 1 q 2 q 1 q 3 tan taśmy 89 80 80 90 _ _ _ _ Każda kolumna tabeli ilustruje jeden krok algorytmu. trzałki pionowe oznaczają pozycję głowicy maszyny dla danego stanu (np. dla pierwszej kolumny - maszyna znajduje się w stanie q 1, głowica ustawiona jest na symbolu 9 ). A oto schemat blokowy oraz tablica charakterystyczna: AR zamiast 9 pisz 0, przesuń głowicę w lewo 9 1 pisz zamiast cyfr 0,... 8 cyfry 1,... 9 Θ 2 pisz 1 KOIEC 3 KOIEC 3 Rysunek 1.1-3 q 1 q 2 q 3 9 0Lq 2 q 1 q 3 Θ - 1q 3 q 3 0 1q 3 q 1 q 3 1 2q 3 q 1 q 3............ 8 9q 3 q 1 q 3 Podobnie jak w poprzednim przykładzie w opisie ruchów maszyny pominięto nie występujące w danej sytuacji czynności. Poniżej przedstawimy przykład działania maszyny dla liczby 199. stan maszyny q 1 q 2 q 1 q 2 q 1 q 3 stan taśmy 199 190 190 100 100 200 _ _ 1.2.Języki i gramatyki formalne Zapoznamy się z podstawami lingwistyki formalnej oraz przykładami jej zastosowania. Podamy systemy opisu języków formalnych oraz omówimy Odwrotną otację Polską a także zaprezentujemy algorytm konwersji wyrażeń arytmetycznych na OP. Aby uświadomić sobie, czym są języki formalne, posłużymy się porównaniem z językiem naturalnym który powstał jako środek porozumiewania się ludzi ze sobą. a świecie znanych jest bardzo wiele języków. Do cech charakterystycznych języka 3

naturalnego można zaliczyć dużą swobodę konstruowania zdań (brak ścisłych reguł gramatycznych), dużą ilość wyjątków, etc. ic więc dziwnego, że rozwój nauk ścisłych wymusił opracowywanie systemów formalnych umożliwiających ścisły i jednoznaczny opis tworzonych konstrukcji. ystemy te noszą nazwę języków formalnych. Za twórcę lingwistyki formalnej uważa się Chomsky ego. Uściślijmy pojęcie języka formalnego. kładają się na niego następujące elementy: alfabet, słowo, język, gramatyka alfabet - dowolny zbiór symboli, z których będą zestawiane słowa języka, słowo - uporządkowany ciąg symboli alfabetu, język - zbiór wszystkich możliwych słów, gramatyka - zbiór reguł umożliwiających generowanie słów danego języka jak też rozróżnienie słów poprawnie zbudowanych od zbudowanych niepoprawnie. 1.2.1.1.Przykład Alfabet - {a, b} łowo - np. aaaab, bbbb, a, b Gramatyka - Reguła 1: a jest poprawne (tzn. słowo złożone z pojedynczego symbolu a jest poprawne). Reguła 2: Jeżeli α jest poprawne, to aαb też jest poprawne. Przykłady poprawnych słów: a - na podstawie Reguły 1. aab - na podstawie Reguły 1 i Reguły 2. aaabbb - na podstawie Reguły 1 i dwukrotne zastosowanie Reguły 2. 1.2.2.Gramatyki Chomsky ego Gramatykę Chomsky ego określa związek 4 elementów: G = < V, Σ, P, σ > Znaczenie poszczególnych symboli jest następujące: V - alfabet terminalny: określa zbiór symboli, z których będą budowane słowa generowane przez gramatykę G. Σ - alfabet metajęzyka: zbiór symboli pomocniczych używanych przy określaniu reguł opisujących konstruowanie słów poprawnych w sensie gramatyki G. P - lista produkcji: zestaw reguł. σ - głowa (aksjomat) języka: podaje z jakiej konstrukcji można wyprowadzić wszystkie generowane przez gramatykę G napisy. Język generowany przez gramatykę G jest to zbiór wszystkich możliwych słów powstałych na bazie listy produkcji i wyprowadzonych z głowy języka. L(G) = { x : x Z σ x }, gdzie Z jest zbiorem wszystkich możliwych słów, zaś zapis oznacza proces wywodu słowa x z głowy σ na podstawie listy produkcji P. 1.2.2.1.Przykład Rozważmy gramatykę generującą proste wyrażenia arytmetyczne. Poniżej przedstawiono poszczególne elementy składowe gramatyki. Alfabet terminalny V: V = { a, b, d, +, *, (, ) } Alfabet metajęzyka Σ: Σ = { W,, C } emantyka powyższych symboli jest następująca: W - wyrażenie, - składnik, C - czynnik. Głowa języka σ: σ = W lista produkcji P: P = { W W W + W + W C C * * C C a C b C d C ( W ) } 4

Zastanówmy się teraz nad następującym problemem: W jaki sposób można wykazać, że wyrażenie ( a + b ) * d jest prostym wyrażeniem arytmetycznym. próbujemy tego dokonać wyprowadzając napis ( a + b ) * d z głowy języka na podstawie listy produkcji. Wyprowadzenie to może mieć następującą postać: W C * ( W ) * ( W + ) * C ( + ) * C ( C + C ) * C ( a + b ) * d Jak widać, udało się wyprowadzić zadany napis. Jest on więc prostym wyrażeniem arytmetycznym. Przedstawimy jeszcze jeden sposób dowodzenia poprawności napisu - drzewo wywodu. W C ( W ) C W + d C C b a Rysunek 1.2-1 1.2.3.otacja Backusa otacja Backusa jest jednym ze sposobów prezentowania listy produkcji. kłada się ona z szeregu symboli o określonej semantyce, ułatwiających zdefiniowanie gramatyki. ymbole metajęzyka w notacji Backusa zapisujemy przy użyciu pary nawiasów < >. otacja posługuje się ponadto symbolem ::= rozumianym jako jest zdefiniowane jako oraz symbolem oznaczającym alternatywę. W celu zaprezentowania sposobu posługiwania się notacją Backusa zdefiniujemy za jej pomocą poprzednio opisaną gramatykę generującą proste wyrażenia. Oto lista produkcji tej gramatyki zapisana przy użyciu notacji Backusa: <W> ::= <> <W> + <> <> + <W> <> ::= <C> <C> * <> <> * <C> <C> ::= ( <W> ) a b d ależy zwrócić uwagę na fakt, że symbole zapisane bez nawiasów ostrych < > i nie będące symbolami używanymi przez notację Backusa są symbolami terminalnymi. 1.2.4.Beznawiasowe algebry Łukasiewicza otacją Backusa posłużymy się teraz do zdefiniowania beznawiasowej algebry Łukasiewicza, zwanej Odwrotną otację Polską. Jest to przykład notacji umożliwiającej zapisanie dowolnego wyrażenia arytmetycznego bez użycia nawiasów zmieniających kolejność wykonywania działań. Ze względu na łatwość obliczania wyrażeń zapisanych w OP przy użyciu stosu znalazła ona szerokie zastosowanie w arytmetyce komputerów. Przedstawimy teraz gramatykę pozwalającą na generowanie napisów w OP oraz zaprezentujemy algorytm dokonujący zamiany wyrażeń zapisanych w arytmetyce nawiasowej na OP. 5

Gramatyka prostych wyrażeń arytmetycznych w OP V = { a, b, d, +, * } P: <W> ::= <Z> <Z> <O> <Z> <Z> ::= <X> <X> <O > <X> <X> ::= a b d <O> ::= + * A oto przykład prostego wyrażenia arytmetycznego i odpowiadający mu zapis w OP: ( a + b ) * d a b + d * ależy zaznaczyć, że w podanych tutaj definicjach gramatyk zbiór symboli terminalnych został ograniczony jedynie w celu zwiększenia czytelności. ic nie stoi na przeszkodzie, aby zdefiniować gramatykę OP na podstawie pełnego zestawu symboli stosowanego w matematyce. próbujemy teraz opracować algorytm obliczający wartość wyrażenia zapisanego w OP. Jak już zaznaczono, bardzo wygodne będzie się posłużenie się stosem jako strukturą przechowującą wyniki pośrednie. Dodatkową zaletą tej struktury jest łatwość, z jaką daje się ona zaimplementować w systemie komputerowym. asz algorytm będzie wyglądał następująco: będziemy pobierali po kolei symbole wyrażenia od lewej strony do prawej; jeżeli symbol będzie liczbą (zmienną), to odłożymy go na stos; jeżeli będzie opisem operacji - pobieramy elementy ze stosu, wykonujemy tę operację, a wynik przesyłamy z powrotem na stos. Czynności te wykonujemy aż do wyczerpania się danych wejściowych. a stosie znajdziemy wtedy obliczaną wartość wyrażenia. a rysunku przedstawimy teraz schemat blokowy realizujący tę ideę, a później przykład jego zastosowania. AR Pobierz symbol z lewej ku prawej argument stos operator Pobierz argumenty ze stosu, wykonaj działanie, wynik na stos Θ BŁĄD KOIEC Rysunek 1.2-2 1.2.4.1.Przykład Obliczyć wartość wyrażenia: 2 3 4 5 + * + W celu zilustrowania sposobu obliczania wyrażenia posłużymy się tabelką. Przedstawimy w niej symbole pojawiające się kolejno na wejściu oraz zawartość stosu po każdym obiegu pętli głównej algorytmu obliczającego wyrażenie. wejście stos 2 2 3 2 3 4 2 3 4 5 2 3 4 5 + 2 3 9 * 2 27 + 29 6

1.2.5.ranslacja W praktyce informatycznej często zachodzi konieczność tłumaczenia tekstu zapisanego w jednym języku formalnym na inny język. Jako przykład można przytoczyć przetworzenie tekstu zapisanego w języku wysokiego poziomu na kod maszynowy. Proces tłumaczenia nosi nazwę translacji. Podamy teraz definicję terminu translacja. 1.2.6.Definicja: ranslacja to przekład tekstów zredagowanych w jednym języku zwanym źródłowym na równoważny semantycznie tekst w innym języku zwanym wynikowym. 1.2.6.1.Przykład Opracować algorytm dokonujący translacji prostych wyrażeń arytmetycznych zapisanych w konwencji nawiasowej na proste wyrażenia zapisane w OP. 1.2.6.1.1.Rozwiązanie Zagadnieniami kluczowymi w trakcie dokonywania konwersji (translacji) wyrażeń z notacji nawiasowej na OP są: priorytety operacji arytmetycznych i konwersja wyrażeń w nawiasach. W tym celu należy stworzyć tabelę priorytetów używanych działań arytmetycznych oraz zręcznie posłużyć się stosem. Oto przykładowa tabela priorytetów dla naszego zagadnienia. Przyjmujemy tu założenie, że im cyfra określająca priorytet jest niższa, tym priorytet jest wyższy. operacja * + priorytet 1 2 W konwencji nawiasowej priorytet działania oraz nawiasy wpływają na kolejność, w jakiej wyrażenie jest obliczane. Przykładowo, aby wyznaczyć wartość wyrażenia a+b*d obliczamy najpierw iloczyn b*d, a potem dodajemy a. W OP kolejność wykonywania działań określona jest jedynie poprzez miejsce, w którym operator znajduje się w napisie. Aby dokonać konwersji uwzględniając te założenia, będziemy pobierać kolejne znaki wyrażenia, które ma zostać przekształcone znak po znaku, począwszy od lewej strony. Dalsze postępowanie zależeć będzie od symbolu. I tak jeżeli pobrany znak jest: - argumentem, to należy przesłać go na wyjście, - nawiasem otwierającym (, to należy położyć go na stos, - nawiasem zamykającym ), to zawartość stosu, aż do napotkanego znaku ( należy przesłać na wyjście i usunąć nawias (, - operatorem, to przeglądamy zawartość stosu w poszukiwaniu operatora o wyższym priorytecie: jeśli taki znajdziemy, to przesyłamy zawartość stosu na wyjście, jeśli nie, operator odkładamy na stos. ależy dodać, że stos przeszukujemy do napotkania nawiasu ( lub do końca stosu, jeżeli nawias nie występuje, - znacznikiem końca wprowadzanego napisu, to kopiujemy zawartość stosu na wyjście, w przeciwnym wypadku sygnalizujemy błąd. Przetwarzanie kończymy w momencie napotkania znacznika końca napisu wejściowego. awiasów ( i ) oczywiście nie kopiujemy na wyjście. arysujemy teraz schemat blokowy algorytmu realizującego przedstawione idee. 7

AR Czytaj z lewej ku prawej argument wyjście ( stos ) zawartość stosu aż do ( na wyjście operator czy wyższy w stosie do ( lub dna stos Θ zawartość stosu do ( lub do dna na wyjście stos na wyjście BŁĄD KOIEC Rysunek 1.2-3 próbujemy na podstawie tego algorytmu dokonać konwersji wyrażenia zapisanego w arytmetyce nawiasowej na OP. 1.2.6.2.Przykład Dokonać konwersji wyrażenia (((a))+b+d)*(d+e) na OP. 1.2.6.2.1.Rozwiązanie Całą konwersję zilustrujemy tabelką. Podamy w niej znaki, które kolejno będą pojawiać na wejściu, zawartość stosu oraz to, co będzie wygenerowane na wyjściu. 8

Wejście stos wyjście ( ( ( ( ( ( ( ( ( a ( ( ( a ) ( ( ) ( + ( + b ( + b + ( + + d ( + + d ) + + * * ( * ( d * ( d + * ( + e * ( + e ) * + * 9