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

3.8 KiB
Raw Blame History

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.