Skip to content

Latest commit

 

History

History
34 lines (31 loc) · 2.38 KB

dokumentace.md

File metadata and controls

34 lines (31 loc) · 2.38 KB

##Implementační dokumentace k 1. úloze do IPP 2019/2020

###Jméno a příjmení: Marek Žiška ###Login: xziska03

###Kontrola argumentov a XML objekt Po spustení skriptu prebieha kontrola počtu a typu argumentov podporovaných v mojom riešení. Následne si vytváram inštanciu objektu predstavujúci výstupný XML súbor a volám nad ňou metódu initXML na inicializáciu XML súbora na základnú štruktúru. Na vytvorenie XML súbora používam objekt DomDocument, ktorý mi umožnil jednoduchú prácu s XML súborom.

###DOM Document Medzi metódy ktoré používam nad týmto objektom patria napríklad createElement() - vytvára nový element v XML, appendChild() - vytvorí synovský element XML pre nejaký ďalší element, setAttribute - nastavuje atribúty daného elementu. Pár krát som potreboval použiť aj špeciálnu premennu $nodeValue, vďaka ktorej som bol schopný vložiť obsah do elementu.

$this->xml=new DomDocument('1.0', 'UTF-8');

###Načítanie vstupu a syntaktická kontrola Vytváram si nový objekt Instruction predstavujúci inštrukciu, o ktorej si evidujem počet argumentov, poradie inštrukcie a pole tvoriace časti inštrukcie s argumentami. Kontrola hlavičky prebieha pomocou funkcie checkHeader() a následne načítavam vstup zo STDIN po riadkoch. Každý riadok posielamdo hlavnej metódy parse(). V ktorej sa zo začiatku vysporadúvavam s prebytočnýmy bielymi miestami a komentármi. Následne riadok rozdelím na časti, podľa ktorých rozhodujem o akú inštrukciu sa na riadku jedná. Pre každú inštrukciu volám metódu checkArgCount() na kontrolu počtov argumentov, po ktorej kontrolujem prípadnú syntax premenných, symbolov alebo labelov. Syntax kontrolujem v metódach correctSymbSyntax(), correctVarSyntax() a correctLabelSyntax. Syntax kontrolujem pomocou regulárnych výrazov funkciou preg_match().

preg_match('/^(int|string|bool)$/', $inputLine, $outputArray);

###Generovanie inštrukcií Inštrukciu a argumenty generujem pomocou metódy appendInstruction, kde znova využívam createElement(). V tejto metóde volám ďalšiu metódu appendArgument(). Ktorá mi vytvorí element s príslušnými atribútmi a obsahom. Po vytvorené elementu argumentu ho vložím ako synovský element inštrukcie. Takto pokračujem až pokým nenačítam koniec súbora.