Interpreter - EasyCompile

Podobne dokumenty
ForPascal Interpreter języka Pascal

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce.

Programowanie w Turbo Pascal

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Wstęp do programowania

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Programowanie w języku Python. Grażyna Koba

Wprowadzenie do języka Java

Powtórka algorytmów. Wprowadzenie do języka Java.

Programowanie obiektowe

Powtórka algorytmów. Wprowadzenie do języka Java.

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

2 Przygotował: mgr inż. Maciej Lasota

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Programowanie strukturalne i obiektowe

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy i języki programowania

Programowanie komputerowe. Zajęcia 1

Podstawy programowania skrót z wykładów:

Podstawy Programowania

Ćwiczenie 1. Przygotowanie środowiska JAVA

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Powtórka algorytmów. Wprowadzenie do języka Java.

Podstawy Programowania Podstawowa składnia języka C++

Cw.12 JAVAScript w dokumentach HTML

Języki formalne i techniki translacji

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Podstawy Programowania C++

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Warunki logiczne instrukcja if

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Odczyt danych z klawiatury Operatory w Javie

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Języki skryptowe w programie Plans

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy Programowania. Wykład 1

Języki programowania zasady ich tworzenia

Wstęp do Programowania, laboratorium 02

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

Wykład 2 Składnia języka C# (cz. 1)

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

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

Stałe definiuje się używając funkcji define. Przykład: define( PODATEK, 22); define( INSTALACJAOS, 70); define( MS, Microsoft );

Zadanie analizy leksykalnej

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne

Instrukcja warunkowa i złoŝona.

C++ wprowadzanie zmiennych

Informatyka I. dr inż. Andrzej Czerepicki.

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Pascal - wprowadzenie

dr inż. Jarosław Forenc

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

do instrukcja while (wyrażenie);

Podstawowe elementy programowania strukturalnego. Wbudowane typy danych w C++

Język ludzki kod maszynowy

Podstawy programowania w C++

Programowanie obiektowe

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

for (i=0; i<10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

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

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

Programowanie obiektowe zastosowanie języka Java SE

Bloki anonimowe w PL/SQL

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Algorytmy i struktury danych

JDK można pobrać ze strony

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Programowania w Javie

Transkrypt:

Akademia Podlaska w Siedlcach Siedlce, dn. 20.V.2006r. Wydział Nauk Ścisłych Instytut Informatyki Interpreter - EasyCompile Projekt z SISW Wykonali: Paweł Sawczuk Edwin Tomczuk Krzysztof Pietraszek I Inf. Mgr uzup. (gr. 3) Prowadzący ćwiczenia: dr inŝ. Krzysztof Trojanowski 1

Spis treści: 1. Ogólny opis projektu... 3 2. Notacja BNF... 3 3. Zasada działania i funkcjonalność... 4 4. Anomalie funkcjonalne ograniczenia... 6 5. Wymagania, instalacja i pliki projektu... 7 2

1. Ogólny opis projektu Celem niniejszego projektu grupowego z przedmiotu Sieci i systemy wirtualne było opracowanie interpretera dowolnego (własnego) języka. Projekt był realizowany w trzech etapach: 1. etap I Skaner, 2. etap II Parser, 3. etap III Linker. Po trzecim etapie otrzymano gotowy interpreter-kompilator poprawnie interpretujący składnię załoŝonego języka (notacja BNF), wyświetlający wyniki plików z programami i informujący uŝytkownika o ewentualnych błędach. Cały projekt (wszystkie jego pliki) zostały zaimplementowane w języku JAVA. 2. Notacja BNF Notacja BNF dla kompilatora EasyCompile: <program>::= program <sekcja_deklaracji> begin <sekwencja_wyrazen> end. <sekcja_deklaracji>::= var {<zmienna>:<type>;} < sekwencja_wyrazen>::= {<wyrazenie_if> <przypisanie> <petla_while> <wyrazenie_we> <wyraŝenie_wy>} <wyrazenie_if>::= if(<wyraŝenie_logiczne>) <sekwencja_wyrazen> [else <sekwencja_wyrazen>] endif; <przypisanie>::= <zmienna>:=<liczba> <zmienna>:=<zmienna> <zmienna>:=<zmienna><dzialanie><zmienna> <zmienna>:=<liczba><dzialanie<zmienna> <zmienna>:=<zmienna><dzialanie><liczba> ; <liczba>::= <calkowita> <zmiennoprzecinkowa> 3

<calkowita>::= <cyfra>{<cyfra>} <cyfra>::= 0 1 2 3 4 5 6 7 8 9 <zmiennoprzecinkowa>::= <cyfra>{<cyfra>}.<cyfra>{<cyfra>} <type>::= int float <zmienna>::= <litera>{<litera literaduza> } <litera>::= a b c d e f g h i j k l m n o p q r s t u v w x y z <znak_specjalny> ::= \ <literaduza>::= A B C D E F G H I J K L M N O P Q R S T U V W X Y Z <string>::= {<litera> <literaduza> <cyfra> <znak_specjalny>} <operator>::= < > <= >= = <> <dzialanie>::= - + * / <wyrazenie_logiczne>::= <zmienna><operator><zmienna> <liczba><operator><zmienna> <zmienna><operator><liczba> <petla_while>::= while(<wyrazenie_logiczne>) <sekwencja_wyrazen> endwhile; <wyrazenie_we>::= read(<zmienna>); <wyrazenie_wy>::= write(<string> <zmienna> ); 3. Zasada działania i funkcjonalność Zasada działania programu polega na uruchomieniu w wierszu poleceń pliku programu wraz z parametrem, którym jest plik z kodem do kompilacji i wykonania. Wygląda to tak: java interpreter <nazwa_pliku>, gdzie nazwa_pliku to ścieŝka do pliku z kodem programu, np.: c:\stud\program1.txt. W wyniku wykonania programu zostaną zwrócone (wyświetlone) jego wyniki komunikaty, liczby, wyniki obliczeń, itp. lub zostanie zwrócony komunikat błędu z numerem linii, w której jest ten błąd. Oprócz tego, gdy nie ma błędów zostaną wyświetlone komunikaty: Proces skanowania zakończył się sukcesem 4

Proces parsowania zakończył się pomyślnie KaŜdy poprawny kod programu w języku rozpoznawanym przez EasyCompile musi mieć następujące elementy, w następującej kolejności: program var [deklaracje zmiennych;] begin [instrukcje;] end. Bez któregokolwiek z tych słów kluczowych lub innej kolejności tych słów wystąpi błąd. Jak wiadomo kaŝdy kod programu, w jakimkolwiek języku posiada sekcję deklaracji zmiennych i sekcję instrukcji (tzw. ciało programu). We wspomnianym języku, zbliŝonym do Pascala, przykładowa deklaracja zmiennych wygląda następująco: var liczba_calk : int; liczba_rzecz: float;... [kolejne zmienne] Jak widać, nasz język rozpoznaje dwa typy liczbowe int i float. KaŜda instrukcja i deklaracja zmiennej musi być zakończona znakiem średnika ( ; ). KaŜda zmienna (i jej typ) musi być oddzielnie deklarowana. KaŜda deklaracja zmiennej innego typu niŝ wymienione, lub przypisanie do zmiennej znaku lub ciągu znaków, nie będących liczbą całkowitą ani liczbą rzeczywistą kończy się błędem. Język rozpoznaje liczby ujemne. Istniej jedna instrukcja wejścia 'read' i jedna instrukcja wyjścia 'write'. Przykład ich zastosowań: read(zmienna); write('ciąg znaków'); lub write(zmienna); jeśli chcemy po wyświetleniu ciągu znaków lub zmiennej przejść do nowej linii to wyświetlamy \n np.: write('ciąg znaków\nto jest nowa linia'); lub samo write('\n'); Instrukcja przypisania pozwala na złoŝone działania i rozpoznaje kolejność działań arytmetycznych, np.: 5

j:=n+1/3-5*2; Niestety nie jest dozwolone zastosowanie nawiasów i grupowanie podwyraŝeń, np.: j:=(n+1/3-5)-2*(n/j-1); //błąd!!! Konstrukcja instrukcji warunkowej jest następująca: if(warunek) instrukcje; [ else instrukcje; ] endif; Jak widać moŝliwe jest wykonanie instrukcji nie spełniających warunku. KaŜdy 'if' musi mieć swój 'endif;'. Konstrukcja jedynej w tym języku pętli (while) jest następująca: while(warunek) instrukcje; endwhile; KaŜde 'while' musi mieć swój 'endwhile;'. Zarówno przy 'if' jak i 'while' jest sprawdzany wynik porównania: zmienna liczba lub liczba zmienna lub zmienna zmienna. Gdy warunek jest prawdziwy zostają wykonane odpowiednie instrukcje, a gdy fałszywy wykona się sekcja 'else' (w przypadku instrukcji 'if') lub nic się nie wykona (w przypadku instrukcji 'while'). Instrukcje 'if' i 'while' mogą być dowolnie (na przemian) i dowolną ilość razy zagnieŝdŝane, z zachowaniem kolejności ich otwarcia i zamknięcia! 4. Anomalie funkcjonalne - ograniczenia Interpreter EasyCompile w wersji obecnej jest kompilatorem bardzo prostego języka, zbliŝonego składnią do języka PASCAL. Spełnia on jednak postawioną mu minimalną funkcjonalność! JeŜeli zaś chodzi o porównanie do innych języków np.: wspomnianego PASCAL'a to moŝemy wyróŝnić następujące ograniczenia-anomalie: 1. po słowie kluczowym 'program' nie moŝe wystąpić Ŝadna nazwa, a tylko słowo 6

kluczowe 'var' rozpoczynające sekcję deklaracji zmiennych, 2. kaŝda zmienna musi być zadeklarowana oddzielnie, tzn. błędem jest np.: var liczba_calk, suma : int; 3. istnieją tylko dwa typy 'int' i 'float'- nie ma typów boolowskich, znakowych ani innych liczbowych, 4. brak jest operatorów logicznych, 5. kaŝda instrukcja warunkowa i pętla musi być zakończona odpowiednim słowem kluczowym, mimo Ŝe moŝe posiadać tylko jedną inną instrukcję np.: przypisania, 6. warunek instrukcji 'if' i 'while' musi być prosty (bez operatorów logicznych), tzn. tylko dwa argumenty: zmienna liczba, liczba zmienna, zmienna zmienna, 7. warunek instrukcji 'if' i 'while' musi być podany w nawiasach zwykłych, 8. istnieje tylko jedna instrukcja wejścia 'read', która wczytuje wartość podaną z klawiatury do zmiennej i przechodzi do następnej linii 9. istnieje tylko jedna instrukcja wyjścia 'write', która wypisuje ciąg znaków lub wartość liczbową 10. jedna instrukcja 'read' wczytuje na raz jedną wartość do jednej zmiennej, 11. jedna instrukcja 'write' wypisuje na raz albo ciąg znaków, albo wartość zmiennej, 12. w instrukcji przypisania nie mogą się pojawić nawiasy, tzn. nie ma moŝliwości budowy bardziej złoŝonych wyraŝeń arytmetycznych, 13.nie moŝna dodawać zmiennych i liczb ze znakiem minusa i odwrotnie, np: j:=j+-5; 14. interpteter nie rozróŝnia duŝych i małych liter wszystkie traktowane jednakowo. 5. Wymagania, instalacja i pliki projektu Aby moŝna było skompilować i uruchomić projekt naleŝy mieć zainstalowaną wirtualną maszynę Javy środowisko JRE (ang. Java Runtime Environment), najlepiej w wersji 1.5.0 (w tej wersji był testowany) lub późniejszej. Przy wersjach wcześniejszych program teŝ powinien działać bez zarzutu. Dalej, naleŝy dodać wpis do zmiennej środowiskowej PATH naszego systemu 7

operacyjnego, mówiący o lokalizacji środowiska Javy, np.: C:\Program Files\Java\jdk1.5.0_05\bin, aby moŝna było uruchomić nasz program z dowolnej lokalizacji w systemie katalogów. Pliki programu moŝna pobrać ze strony http://easycompile.sourceforge.net/, zakładka Interpreter-Binary (pliki źródłowe *.java) lub Interpreter-Source (pliki wykonywalne*.class). Zarówno w jednym jak i drugim przypadku są to archiwa *.zip, które naleŝy po ściągnięciu ze strony rozpakować. Pliki potrzebne do kompilacji programu: 1. Scanner.java, 2. Parser.java, 3. interpreter.java. Pliki potrzebne do uruchomienia programu: 4. Scanner.class, 5. Parser.class, 6. interpreter.class. Dodatkowo, w archiwum Interpreter-bin.zip (zakładka Interpreter-Binary) zostały umieszczone przykładowe pliki z kodem programów w naszym języku. 8