Projects/2BIT/summer-semester/IPP1/readme1.md
2026-04-14 19:28:46 +02:00

62 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Implementační dokumentace k 1. úloze do IPP 2024/2025
**Jméno a příjmení::** Roman Nečas
**Login:** xnecasr00
---
## 1. Úvod
Skript `parse.py` je vypracovaný v jazyku Python 3.11 a implementuje analýzu zdrojového kódu jazyka SOL25. Jeho hlavným cieľom je načítať SOL25 program zo štandardného vstupu, vykonať lexikálnu a syntaktickú analýzu pomocou knižnice Lark (verzia 1.2.2), transformovať výsledný parse strom do abstraktného syntaktického stromu (AST) a následne vykonať statickú sémantickú analýzu. Ako výstup skript generuje XML reprezentáciu AST, čo umožňuje ďalšie spracovanie.
---
## 2. Popis implementácie
### 2.1 Lexikálna a syntaktická analýza
- Pre spracovanie vstupného SOL25 kódu je využitá knižnica **Lark**.
- V zdrojovom kóde je definovaná gramatika SOL25, ktorá popisuje štruktúru tried, metód, blokov, priradení a výrazov.
- Lexikálna analýza rozpoznáva identifikátory, literály (číselné, reťazcové) a kľúčové slová s dodržaním pravidiel case-sensitivity.
### 2.2 Transformácia do abstraktného syntaktického stromu (AST)
- Interná reprezentácia zdrojového kódu je vytvorená pomocou tried ako:
- `Program`
- `ClassDef`
- `MethodDef`
- `Block`
- `Assignment`
- A rôznych tried reprezentujúcich výrazy (napr. `LiteralExpr`, `VarExpr`, `BlockExpr`, `MessageSendExpr`)
- Transformácia prebieha prostredníctvom triedy `SOL25Transformer`, ktorá mapuje prvky parse stromu na príslušné AST uzly.
### 2.3 Statická sémantická analýza
- Skript vykonáva kontroly na úrovni zdrojového kódu ešte pred jeho interpretáciou:
- Overenie duplicity definícií tried a metód.
- Kontrola použitia rezervovaných identifikátorov (napr. `self`, `super`, `nil`, `true`, `false`, `class`).
- Validácia arity metód počet parametrov definovaných blokov musí zodpovedať počtu argumentov selektora.
- Overenie existencie povinnej triedy `Main` a bezparametrickej metódy `run`.
- V prípade nájdenia chyby skript ukončí svoju činnosť s príslušným chybovým kódom (napr. 10, 11, 21, 22, 31, 32, 33, 34, 35, 99).
### 2.4 Generovanie XML
- Po úspešnej analýze sa AST transformuje do XML formátu pomocou knižnice `xml.etree.ElementTree`.
- Výsledný XML dokument obsahuje hierarchickú štruktúru, kde sú reprezentované triedy, metódy, bloky a priradenia, čo uľahčuje ďalšie spracovanie alebo vizualizáciu AST.
### 2.5 Špeciálne spracovanie
- Implementovaná je funkcia `flatten`, ktorá rekurzívne spracováva a "zplošťuje" zložité reťazce zasielania správ (message sends).
- Toto riešenie umožňuje efektívnejšiu interpretáciu kompozitných volaní, napr. pre konštrukcie typu `compute:and:` a `ifTrue:ifFalse:`.
---
## 3. Použité technológie a knižnice
- **Jazyk:** Python 3.11
- **Knižnica na lexikálnu a syntaktickú analýzu:** Lark (verzia 1.2.2)
- **Práca s XML:** `xml.etree.ElementTree` a `xml.dom.minidom`
---
## 4. Spôsob behu a chybové hlásenia
- Skript je určený na spustenie zo štandardného vstupu a jeho spracovanie je riadené príkazovým riadkom.
- Parameter `--help` vypíše nápovedu a následne skript ukončí svoju činnosť s návratovým kódom `0`.
- Pri nesprávnom použití vstupných alebo výstupných súborov či pri syntaktických alebo sémantických chybách skript ukončí svoju činnosť s príslušným chybovým kódom, definovaným v zadaní (napr. 10, 11, 21, 22, 31, 32, 33, 34, 35, 99).
---
## 5. Záver
Skript efektívne načíta zdrojový kód SOL25, vykoná komplexnú lexikálnu, syntaktickú aj sémantickú analýzu a následne vygeneruje XML reprezentáciu AST. Pri dodržaní formálnych požiadaviek projektu (vrátane správneho spracovania vstupov, chybových hlásení a ukončovacích kódov) predstavuje táto implementácia robustné riešenie projektu.