javapas
Class Prekompilator

java.lang.Object
  |
  +--javapas.Prekompilator

public class Prekompilator
extends java.lang.Object

Title: Javapas

Description: Pascal Interpreter

Copyright: Copyright (c) 2003

Company: AP

Klasa odpowiedzialna jest za stworzenie pseudokodu wykonywalnego przez maszynę wirtualną VM z kodu źródłowego w języku Pascal.

Version:
1.0
Author:
Wojciech Nabiałek

Field Summary
private  java.util.Vector operacje
          Wektor zawierający listę operacji (pseudokod)
private  java.util.Vector zmienne
          Wektor zawierający nazwy zmiennych
private  java.lang.String zrodlo
          Kod źródłowy programu w języku Pascal
 
Constructor Summary
Prekompilator(java.lang.String Zrodlo)
          Konstrukor klasy wymaga podania w parametrze łańcucha znaków zawierającego pełen kod żródłowy programu.
 
Method Summary
private  boolean czyWStringu(java.lang.String kod, int poz)
          Metoda sprawdza czy znak o indeksie poz znajduje się wewnątrz apostrofów ''.
private  java.lang.String dajBlokGlowny()
          Metoda wczytuje z kodu źródłowego programu blok główny Begin ...
private  Blok dajBlokOperacji(java.lang.String kod)
          Funkcja zwraca wnętrze bloku Begin ...
private  java.lang.String dajNawiasy(java.lang.String kod)
          Metoda odpowiedzialna za pobranie wnętrza nawiasów ()
private  void dajStale()
          Metoda wczytuje blok const oraz następnie dodaje je do wektora zmiennych z zaznaczeniem bitu stałości.
private  java.lang.String dajString(java.lang.String kod)
          Metoda odpowiedzialna za pobranie wnętrza apostrofów ''
private  void dajZmienne()
          Metoda wczytuje blok var oraz następnie dodaje je do wektora zmiennych.
private  java.lang.String FOR(java.lang.String warunek, java.lang.String kod)
          Metoda tworzy pseudokod pętli FOR ...
private  java.lang.String IF(java.lang.String warunek, java.lang.String kod)
          Metoda tworzy pseudokod instrukcji warunkowej IF ...
private  int indexZmiennej(java.lang.String nazwa)
          Metoda sprawdza istnienie zmiennej o nazwie nazwa w tablicy zadeklarowanych zmienney i w przypadku jej istnienia zwraca jej indeks w wektorze lub -1 w przypadku jej braku
private  void instrukcja(java.lang.String kod)
          Metoda rozpoznaje i zamienia na pseudokod instrukcję podstawienia bądź znane funkcje.
private  int liczbaPlusow(java.lang.String gdzie)
          Metoda zlicza liczę symboli + w łańcuchu znaków.
private  int liczbaWystapien(java.lang.String gdzie, java.lang.String co)
          Metoda zlicza liczbę wystąpień łańcucha znaków co w łańcuchu gdzie.
private  int max(int A, int B)
          Metoda zwraca większą z dwóch liczb będących parametrami
private  int min(int A, int B, int C)
          Metoda zwraca mniejszą z liczb A i B pod warunkiem że są większe od C
private  void normalizujElse()
          Do poprawnego działania modułu wymagane jest aby przed słowem kluczowym else występował średnik, co jest niezgodne ze składnią języka Pascal.
private  java.lang.String normalizujTyp(java.lang.String typ)
          Funkcja zwracająca poprawnie sformatowany typ zmiennej.
 java.util.Vector Operacje()
          Metoda zwraca wektor operacji (pseudokod)
private  int pierwszyRaz(java.lang.String kod, java.lang.String co)
          Metoda wyszukuje pierwszego wystąpienia łańcucha znaków co w łańcuchu kod pod warunkiem, że nie występuje ono w tekście ograniczonym apostrofami.
private  void read(java.lang.String co)
          Metoda interpretująca procedurę read(...)
private  void readln(java.lang.String co)
          Metoda interpretująca procedurę readln(...)
private  java.lang.String replaceAll(char co, java.lang.String gdzie, java.lang.String naCo)
          Metoda zamienia w łańcuchu gdzie wszystkie wystąpienia znaku co na łańcuch znaków naCo
 void run()
          Metoda wykonuje sekwencję kroków mających na celu stworzenie pseudokodu dla całego kodu źródłowego znajdującego się wewnątrz klasy
private  void usunKomentarze()
          Metoda usuwa z kodu źródłowego wszystkie komentarze tj., znaki zamieszczone wewnątrz klamer {}.
private  void usunWskazniki()
          Metoda usuwa z kodu źródłowego wszystkie znaki ^, będące z punktu widzenia tego modułu interpretera całkowicie zbyteczne.
private  java.lang.String wiersz(java.lang.String kod)
          Metoda wykonuje interpretację pierwszego wiersza z kodu źródłowego a następnie odcina wykonaną część z kodu źródłowego.
private  void write(java.lang.String co)
          Metoda interpretująca procedurę write(...)
private  void writeln(java.lang.String co)
          Metoda interpretująca procedurę writeln(...)
private  void wykonajBlok(java.lang.String kod)
          Metoda odpowiedzialna za kompilacje kodu źródłowego znajdującego się wewnątrz bloku instrukcji.
private  void wyrazenie(java.lang.String kod)
          Metoda zamienia na pseudokod wyrażenie logiczne.
 java.util.Vector Zmienne()
          Metoda zwraca wektor zmiennych
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

zmienne

private java.util.Vector zmienne
Wektor zawierający nazwy zmiennych


operacje

private java.util.Vector operacje
Wektor zawierający listę operacji (pseudokod)


zrodlo

private java.lang.String zrodlo
Kod źródłowy programu w języku Pascal

Constructor Detail

Prekompilator

public Prekompilator(java.lang.String Zrodlo)
Konstrukor klasy wymaga podania w parametrze łańcucha znaków zawierającego pełen kod żródłowy programu.

Parameters:
Zrodlo - kod źródłowy programu.
Method Detail

normalizujTyp

private java.lang.String normalizujTyp(java.lang.String typ)
Funkcja zwracająca poprawnie sformatowany typ zmiennej.

Parameters:
typ - nazwa typu
Returns:
poprawnie sformatowaną nazwą typu, jeśli paramert typ nie jest typem pascala funkcja zwraca wartość "".

usunKomentarze

private void usunKomentarze()
Metoda usuwa z kodu źródłowego wszystkie komentarze tj., znaki zamieszczone wewnątrz klamer {}.


usunWskazniki

private void usunWskazniki()
Metoda usuwa z kodu źródłowego wszystkie znaki ^, będące z punktu widzenia tego modułu interpretera całkowicie zbyteczne.


normalizujElse

private void normalizujElse()
Do poprawnego działania modułu wymagane jest aby przed słowem kluczowym else występował średnik, co jest niezgodne ze składnią języka Pascal.
Funkcja ta dodaje na potrzeby klasy średniki przed każdym wystąpieniem słowa else.


dajZmienne

private void dajZmienne()
Metoda wczytuje blok var oraz następnie dodaje je do wektora zmiennych.


dajStale

private void dajStale()
Metoda wczytuje blok const oraz następnie dodaje je do wektora zmiennych z zaznaczeniem bitu stałości.


dajBlokGlowny

private java.lang.String dajBlokGlowny()
Metoda wczytuje z kodu źródłowego programu blok główny Begin ... End. a następnie wycina z tego bloku wiodące Begin i kończące End.

Returns:
wnętrze bolku głównego programu.

dajBlokOperacji

private Blok dajBlokOperacji(java.lang.String kod)
Funkcja zwraca wnętrze bloku Begin ... End; dowolnej operacji czy instrukcji.

Parameters:
kod - kod źródłowy programu.
Returns:
wnętrze bloku Begin ... End;

replaceAll

private java.lang.String replaceAll(char co,
                                    java.lang.String gdzie,
                                    java.lang.String naCo)
Metoda zamienia w łańcuchu gdzie wszystkie wystąpienia znaku co na łańcuch znaków naCo

Parameters:
co - znak jaki chcemy zamienić
gdzie - łańcuch znaków, w którym dokonujemy zmian
naCo - łańcuch znaków na jaki zamieniamy znak co
Returns:
łańcuch znaków po zamianie

wykonajBlok

private void wykonajBlok(java.lang.String kod)
Metoda odpowiedzialna za kompilacje kodu źródłowego znajdującego się wewnątrz bloku instrukcji.

Parameters:
kod - kod źródłowy bloku programu.

wiersz

private java.lang.String wiersz(java.lang.String kod)
Metoda wykonuje interpretację pierwszego wiersza z kodu źródłowego a następnie odcina wykonaną część z kodu źródłowego.

Parameters:
kod - kod źródłowy programu.
Returns:
kod źródłowy programu pozbawiony zinterpretowanej części.

instrukcja

private void instrukcja(java.lang.String kod)
Metoda rozpoznaje i zamienia na pseudokod instrukcję podstawienia bądź znane funkcje.

Parameters:
kod - źródłowy programu.

wyrazenie

private void wyrazenie(java.lang.String kod)
Metoda zamienia na pseudokod wyrażenie logiczne.

Parameters:
kod - źródłowy programu.

dajNawiasy

private java.lang.String dajNawiasy(java.lang.String kod)
Metoda odpowiedzialna za pobranie wnętrza nawiasów ()

Parameters:
kod - źródłowy programu
Returns:
wnętrze nawiasów

dajString

private java.lang.String dajString(java.lang.String kod)
Metoda odpowiedzialna za pobranie wnętrza apostrofów ''

Parameters:
kod - źródłowy programu
Returns:
wnętrze apostrofów ''

czyWStringu

private boolean czyWStringu(java.lang.String kod,
                            int poz)
Metoda sprawdza czy znak o indeksie poz znajduje się wewnątrz apostrofów ''.

Parameters:
kod - źródłowy programu.
poz - numer indeksu znaku.
Returns:
true jeśli indeks znajduje się wewnątrz apostrofów, false w przeciwnym przypadku

pierwszyRaz

private int pierwszyRaz(java.lang.String kod,
                        java.lang.String co)
Metoda wyszukuje pierwszego wystąpienia łańcucha znaków co w łańcuchu kod pod warunkiem, że nie występuje ono w tekście ograniczonym apostrofami.

Parameters:
kod - kod żródłowy w Pascalu
co - szukany tekst
Returns:
indeks początku szukanego tekstu w kodzie źródłowym

liczbaPlusow

private int liczbaPlusow(java.lang.String gdzie)
Metoda zlicza liczę symboli + w łańcuchu znaków.

Parameters:
gdzie - łańcuch znaków do przeszukania.
Returns:
liczba symboli +

liczbaWystapien

private int liczbaWystapien(java.lang.String gdzie,
                            java.lang.String co)
Metoda zlicza liczbę wystąpień łańcucha znaków co w łańcuchu gdzie.

Parameters:
gdzie - łańcuch znaków do przeszukania
co - zliczany łańcuch znaków
Returns:
liczba wystąpień

IF

private java.lang.String IF(java.lang.String warunek,
                            java.lang.String kod)
Metoda tworzy pseudokod instrukcji warunkowej IF ... THEN ... ELSE

Parameters:
warunek - warunek wejścia do instrukcji IF
kod - kod źródłowy programu począwszy od końca instrukcji THEN
Returns:
kod źródłowy pozbawiony zinterpretowanej części.

FOR

private java.lang.String FOR(java.lang.String warunek,
                             java.lang.String kod)
Metoda tworzy pseudokod pętli FOR ... TO ... DO

Parameters:
warunek - warunek początku pętli oraz jej kończenia ... TO ... (bez słów FOR i DO
kod - kod źródłowy programu począwszy od końca instrukcji DO
Returns:
kod źródłowy pozbawiony zinterpretowanej części.

write

private void write(java.lang.String co)
Metoda interpretująca procedurę write(...)

Parameters:
co - łańcuch znaków będący parametrem instrukcji write

writeln

private void writeln(java.lang.String co)
Metoda interpretująca procedurę writeln(...)

Parameters:
co - łańcuch znaków będący parametrem instrukcji writeln

read

private void read(java.lang.String co)
Metoda interpretująca procedurę read(...)

Parameters:
co - łańcuch znaków będący parametrem instrukcji read

readln

private void readln(java.lang.String co)
Metoda interpretująca procedurę readln(...)

Parameters:
co - łańcuch znaków będący parametrem instrukcji readln

indexZmiennej

private int indexZmiennej(java.lang.String nazwa)
Metoda sprawdza istnienie zmiennej o nazwie nazwa w tablicy zadeklarowanych zmienney i w przypadku jej istnienia zwraca jej indeks w wektorze lub -1 w przypadku jej braku

Parameters:
nazwa - nazwa zmiennej
Returns:
indeks w wektorze zmiennych lub -1 w przypadku gdy zmienna nie znajduje się w wektorze zmiennych

min

private int min(int A,
                int B,
                int C)
Metoda zwraca mniejszą z liczb A i B pod warunkiem że są większe od C

Parameters:
A - pierwsza liczba do porównania
B - druga liczba do porównania
C - minimalna liczba
Returns:
mniejsza z liczb A i B pod warunkiem że są większe od C

max

private int max(int A,
                int B)
Metoda zwraca większą z dwóch liczb będących parametrami

Parameters:
A - pierwsza liczba
B - druga liczba
Returns:
większa z dwóch liczb będących parametrami

run

public void run()
Metoda wykonuje sekwencję kroków mających na celu stworzenie pseudokodu dla całego kodu źródłowego znajdującego się wewnątrz klasy


Zmienne

public java.util.Vector Zmienne()
Metoda zwraca wektor zmiennych

Returns:
wektor zmiennych

Operacje

public java.util.Vector Operacje()
Metoda zwraca wektor operacji (pseudokod)

Returns:
wektor operacji