Externé jazyky I. (Úloha 1)

Ciele
  1. Charakterizovať význam modelov a metamodelov pri vývoji softvérových systémov.
  2. Oboznámiť sa s vizualizačným nástrojom magsatool.
  3. Oboznámiť sa s modelom jazyka entít.
  4. Implementovať jazykový procesor pre vytvorenie objektovej reprezentácie vety jazyka entít z textového vstupu.
  5. Otestovať vytvorený jazykový procesor výpisom vytvoreného modelu.
Úvod
    V rámci zadania budeme generatívnym prístupom vytvárať aplikáciu umožňujúcu vykonávať CRUD (Create, Retrieve, Update, Delete) operácie nad entitami. Takouto entitou bude napríklad zamestnanec, účet, oddelenie. Voľba entity bude závislá od oblasti pre ktorú systém vytvárame (napr. personalistika, fakturácia). Pre každú entitu v systéme budú evidované jej vlastnosti. Napríklad pre entitu zamestnanec to môže byť meno, priezvisko, vek. Pri riešení problému teda budeme vytvárať model systému, ktorú bude vyjadrený metamodelom. Model systému bude obsahovať konkrétne typy entít (napr. zamestnanec, oddelenie). Tento model bude vyjadrený prostredníctvom metamodelu. Náš metamodel bude obsahovať pojmy model (Model), entita (Entity) a vlastnosť (Property). Viac informácií o metamodelovaní .
    Obr.: Konceptualizácia modelov (hore abstraktnejší, dole konrétnejší)

    Na dnešnom cvičení budeme implementovať externý jazyk entít, ktorý bude predstavovať model pre definovanie systému CRUD. Pre tento externý jazyk vytvoríme jednoduchý jazykový procesor.

    Model jazyka entít (metamodel systému) pre definovanie systému CRUD je nasledovný.
    • Model - opisuje systém definujúci množinu entít.
    • Entity - entita systému (napr. zamestnanec, oddelenie), pre ktorú je možné realizovať CRUD operácie, entita je charakterizovaná jedinečným názvom a množinou vlastností.
    • Property - vlastnosť entity (napr. meno, priezvisko), vlastnosť má jedinečný názov v rámci entity.
    Obr.: Triedy modelu jazyka entit
Postup
  1. Pre vizualizáciu transformačných krokov jednotlivých úloh použite nástroj magsa-tool.jar. Jar archív umiestnite do adresára projektu MaGSA.
    Poznámka: Nástroj magsa-tool spustite dvojklikom na magsa-tool.jar alebo pomocou príkazu java -jar magsa-tool.jar. Po načítaní projektu je možné vo vizualizácií spúšťať jednotlivé kroky jazykového spracovania a generovania. Každý výsledok bude zelený až keď budú splnené všetky úlohy v danom cvičení.
  2. Model jazyka entít implementovaný v jazyku Java má nasledujúce vyjadrenie metamodel.zip. Balík stiahnite, rozbaľte (vrátane adresárovej štruktúry) do adresára projektu MaGSA.
    Oboznámte sa s triedami balíka metamodel.
    Poznámka: Názov entity a vlastnosti má rovnaký tvar ako identifikátor jazyka Java.
    Ladenie: Projekt magsa-generator bude spustiteľný až po splnení všetkých úloh v tomto module. Ak projekt napriek tomu neviete spustiť, zavolajte na pomoc inštruktora.
  3. V tomto kroku budeme implementovať jednoduchý jazykový procesor, ktorý na základe textového vyjadrenia vety z jazyka entít vytvorí objektovú reprezentáciu tejto vety - abstraktný syntaktický strom/graf. Pravidlá pre zápis jazyka entít sú nasledovné:
    • Každá entita je definovaná v samostatnom súbore *.el.
    • Názov súboru *.el bez prípony určuje názov entity.
    • Súbor *.el obsahuje vymenované vlastnosti entity.
    • Každé meno vlastnosti je uvedené na jeden riadok.
    Príklad súboru s definíciou entity Zamestnanec je uvedený v Zamestnanec.el.
    Poznámka: Súbory *.el vkladajte do hlavného projektu MaGSA do adresára model/entities.
    Úloha: Vytvorte jednoduchý jazykový procesor rozšírením kostry parser.zip. V triede LineParser implementujte neúplné metódy:
    • parse(String name, Reader reader) - spracuje celý súbor postupným prechádzaním riadkov a pre každý riadok zavolá metódu parseLine(String line). Návratovou hodnotou metódy je nová entita Entity so zodpovedajúcím názvom a zoznamom vlastností.
    • parseLine(String line) - spracuje riadok obsahujúci opis vlastnosti. Návratovou hodnotou metódy je nová vlastnosť Property so zodpovedajúcim menom vlastnosti.


    Pošli
    Poznámka: Pre čítanie súboru po riadkoch môžete použiť triedu BufferedReader.
    Úloha: Implementujte podporu jednoriadkových komentárov začínajúcich znakom #.


    Pošli
    Úloha: Zabezpečte kontrolu platnosti názvu vlastnosti. Pre názov vlastnosti platia rovnaké pravidlá ako pre identifikátory v jazyku Java.


    Pošli
    Poznámka: Môžete využiť regulárne výrazy alebo metódy triedy Character.
    Úloha: Rozšírte vlastnosť o možnosť definovania údajového typu - string, integer, real. Typ je uvedený za názvom vlastnosti a je oddelený dvojbodkou. V prípade, že typ nie je uvedený, má vlastnosť údajový typ string.


    Pošli
    Oddelenie.el je príklad súboru s uvedením údajového typu pri vlastnosti. Typ vlastnosti definujte enumeračným typom Type.
    
    public enum Type {
        INTEGER, REAL, STRING;
    }
    
    Obr.: Model jazyka entít po pridaní referencie na typ vlastnosti by mal vyzerať takto
  4. Otestujte vytvorený jazykový procesor, ktorý spracováva vstupné vety a vytvára z nich objektovú reprezentáciu modelu v pamäti. Upravte triedu Make nasledovne.
    
    public class Make {
        public static void main(String[] args) throws Exception {
            /* Model - object representation of input sentences */
            Model model;
    
            /* External language - single line parser parses the content of model directory in the project */
            File dir = new File("model/entities");
            LineParser parser = new LineParser();
            model = parser.parseDir(dir);
    
            /* Print the model */
            System.out.println(model);
        }
    }
    
  5. Vymažte súbory z disku a zrušte všetky vami vytvorené nastavenia vo vývojovom prostredí!
Zdroje
  1. Viac o metamodelovaní:
  2. Zdrojové kódy:
    • metamodel.zip - model jazyka entít (metamodel systému). Celý obsah zip súboru je potrebné rozbaliť do magsa/src.
    • parser.zip - kostra jednoduchého jazykového procesora. Celý obsah zip súboru je potrebné rozbaliť do magsa/src.
  3. Vizualizačný nástroj pre vizualizáciu transformačných krokov nástroja vytváraného v rámci tohto predmetu:
    • magsa-tool.jar
    • V prípade problémov so spustením skontrolujte nastavenie systémových premenných JAVA_HOME a M2_HOME.
  4. Príklady súborov entít:
  5. Konfiguračný súbor pre NetbeansIDE: netbeans-config.zip. Súbor treba rozbaliť a vložiť do hlavného adresára projektu (a povoliť prepísanie existujúcich súborov). Pri spúšťaní treba vybrať profil run-magsa-generator a spustiť tlačidlom Run (F6).
Doplňujúce úlohy
    Úloha: Upravte vytvorený procesor tak, aby pri chybe vo vete bolo vypísané číslo riadku, v ktorom sa chyba vyskytuje.
    UkončenáPoznámka


    Pošli
    Úloha: Pridajte do triedy LineParser overenie pre jedinečné pomenovanie vlastnosti entity. Entita nemôže obsahovať rôzne vlastnosti s tým istým menom. Teda napríklad entita študent nemôže mať dve vlastnosti s názvom meno.
    Poznámka: Môžete pri tom využiť triedu HashSet jazyka Java.
    UkončenáPoznámka


    Pošli
comments powered by Disqus