3.8 KiB
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:
ProgramClassDefMethodDefBlockAssignment- 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
Maina bezparametrickej metódyrun.
- 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:aifTrue: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.ElementTreeaxml.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
--helpvypíše nápovedu a následne skript ukončí svoju činnosť s návratovým kódom0. - 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.