GeoLang to prosty język dziedzinowy (DSL) umożliwiający deklarowanie i modyfikowanie podstawowych figur geometrycznych (punktów, linii, okręgów) oraz ich wizualizację w oknie JavaFX. Projekt powstał jako praca z generatorami parserów (ANTLR 4) i pokazuje pełną integrację: gramatyka → interpreter → wizualizacja.
- Deklaracje zmiennych typów:
float,point,line,circle. - Wyrażenia arytmetyczne na zmiennych
float. - Dostęp i przypisanie do pól (np.
p.x = 10.0,c.r = 5.0). - Wywoływanie metod na obiektach (obecnie
render()do rysowania orazmove()dla punktu). - Jawne żądanie narysowania figury przez wywołanie
render(). - Wizualizacja w oknie JavaFX.
Poniższy skrypt definiuje kilka figur i rysuje tylko wybrane z nich:
// deklaracje liczb zmiennoprzecinkowych
float radius = 50.0;
float dx = 10.0;
float dy = 20.0;
// punkt
point p = (100.0, 200.0);
point p2 = (dx, dy);
// linia
line l = ((0.0, 0.0), (30.0, 40.0));
// okrąg
circle c = ((p.x, p.y), radius);
// zmiana współrzędnych
p.x = 150.0;
c.r = radius * 0.5;
// jawne renderowanie figur (tylko te zostaną narysowane)
l.render();
c.render();
// punkt p i p2 nie zostaną narysowane
src/main/java/
├── interpreter/
│ ├── variables/
│ │ ├── VarType.java # Interfejs wszystkich typów
│ │ ├── VarTypeEnum.java # Enum typów (FLOAT, POINT, CIRCLE, LINE)
│ │ ├── FloatType.java # Typ liczbowy
│ │ ├── PointType.java # Punkt (x,y)
│ │ ├── LineType.java # Linia (p1, p2)
│ │ ├── CircleType.java # Okrąg (środek, promień)
│ ├── drawable/
│ │ ├── Drawable.java # Interfejs rysowalnych obiektów
│ │ ├── DrawablePoint.java # Rysowanie punktu
│ │ ├── DrawableLine.java # Rysowanie linii
│ │ ├── DrawableCircle.java # Rysowanie okręgu
│ │ └── DrawCollector.java # Kolektor figur do wyrenderowania
│ ├── Kolorowy.java # Visitor – interpreter języka
│ ├── DrawingApp.java # Aplikacja JavaFX (okno i rysowanie)
│ └── Start.java # Punkt wejścia: parsowanie, interpretacja, uruchomienie GUI
├── grammar/ # (generowane przez ANTLR)
│ ├── GeoLangLexer.java
│ ├── GeoLangParser.java
│ └── ... (listenery, wizytatory)
├── SymbolTable/
│ └── LocalSymbols.java # Tablica symboli z obsługą zakresów
└── resources/ # Opcjonalne zasoby (np. ikona)
src/main/antlr4/
├── GeoLangLexer.g4 # Gramatyka leksera
└── GeoLangParser.g4 # Gramatyka parsera
-
Plik źródłowy – program wczytuje treść skryptu GeoLang (domyślnie we.GeoLang).
-
Parsing – ANTLR tworzy drzewo składniowe (CST) na podstawie gramatyki.
-
Interpretacja – Visitor Kolorowy odwiedza węzły drzewa:
-
wykonuje deklaracje zmiennych,
-
oblicza wyrażenia,
-
wywołuje metody (np. render()).
-
-
Kolekcja rysunków – Gdy interpreter napotka render(), dodaje odpowiedni obiekt Drawable do DrawCollector.
-
Wizualizacja – Po zakończeniu interpretacji, lista figur z DrawCollector przekazywana jest do DrawingApp, która otwiera okno JavaFX i rysuje figury na płótnie.