textX zadaci

u izradi

Prof. dr Igor Dejanović (igord at uns ac rs)

Kreirano 2024-09-30 Mon 13:43, pritisni ESC za mapu, m za meni, Ctrl+Shift+F za pretragu

Sadržaj

1. Instalacija

  • Kreirati i aktivirati Python virtuelno okruženje:

    $ mkdir JSD
    $ cd JSD
    $ python -m venv venv
    $ source venv/bin/activate     # (venv\Scripts\activate.bat na Windows-u)
    
  • Instalirati textX sa dev zavisnostima:

    $ pip install textx[dev]
    

2. Robot primer

2.1. Uvod

  • Analizirati robot primer
  • Vizualizovati robot meta-model i primere modela. Isprobati i dot i plantUML vizualizacije.
  • Uključiti debug mod i analizirati izlaz

2.2. for petlje u Robot jeziku

Doraditi robot primer tako da omogući for petlje oblika:

for i in 5..10
    up 2
    right i
end

2.3. if iskazi u robot jeziku

Doraditi robot primer tako da omogući if iskaze:

if x > 5
    up 1
end

gde x i y variable predstavljaju tekuću poziciju robota. Posle if iskaza navodi se Bulov izraz sa standardnim operatorima <,>,>=,<=, !=, ==, and, or, not

3. Expression primer

3.1. Uvod

  • Analizirati expression primer
  • Vizualizovati expression meta-model i primere modela
  • Uključiti debug mod i analizirati izlaz

3.2. Pozivi funkcija u expression jeziku

U expression primeru omogućiti pozive standardnim matematičkih funkcija iz math modula.

a = 10;
b = 2 * a + 17;

5 * sin(a + sqrt(b + 50)) - 3 / 18

4. DSL - uslov -> akcija

Napraviti textX gramatiku za parsiranje sledećeg jezika:

action notify_quota_approaching https://somesite.com/api/v1/notify?user={user_id}

on user.current_usage >= 0.8 * max_quota trigger notify_quota_approaching with user_id = user.id
  • U prvom delu se definišu moguće akcije. Svaka akcija počinje ključnom rečju action, ima ime i REST URL koji se poziva (šalje se HTTP GET)
  • Akcija može imati parametre - user_id u primeru
  • Pravila kada se akcija poziva se definišu sa on ... trigger... with iskazima gde se definiše:
    • Logički izraz koji, ukoliko je zadovoljen, dovodi do akcije. Ovaj iskaz može imati standardne logičke operatore and, or, not kao i aritmetčko poređenje <,>, <=, >=, ==, !=.
    • Akcija koju je potrebno pozvati navodi se posle ključne reči trigger
    • Posle ključne reči with navode se vrednosti parametara poziva akcije, razdvojeni zarezima. with deo je opcion.
  • I akcija i on pravila može biti više

5. Entity proširenje

Proučiti Entity primer iz textX dokumentacije i proširiti ga na sledeći način:

  1. Omogućiti da tip osobine bude kardinaliteta višeg od 1. Odnosno da osobina može biti kolekcija drugih entiteta ili prostih tipova.
  2. Omogućiti da tip kolekcije bude skup ili niz/lista.
  3. Omogućiti dvosmerne reference.
  4. Dodati podršku za pakete koji mogu da se ugnjezde na proizvoljnu dubinu.
  5. Omogućiti referenciranje entiteta upotrebom kvalifikovanih imena (paket1.paket2.entitet). Za ispravno razrešavanje referenci koristiti RREL izraze u gramatici.

6. Turtle graphics jezik

Upotrebom textX-a kreirati Turtle graphics JSD.

  1. Podržati najmanje sledeće komande: forward, backward, right, left, pendown, penup, pensize, color.
  2. Implementirati while petlju gde će uslov biti logički izraz sa tekućim stanjem kornjače (npr. pozicija, ugao).
  3. Implementirati if-else iskaz.
  4. Napraviti interpreter.
  5. Napraviti kompajler koji će generisati odgovarajući Python kôd.