textX задаци

Проф. др Игор Дејановић (igord на uns ac rs)

Креирано 2025-11-17 Mon 15:26, притисни ESC за мапу, Ctrl+Shift+F за претрагу, "?" за помоћ

Садржај

1. Инсталација

  • Инсталирати textX за развој:

    $ git clone git@github.com:textX/textX
    $ cd textX
    $ uv venv
    $ source .venv/bin/activate     # (.venv\Scripts\activate.bat na Windows-u)
    $ uv pip install -e .[dev]
    

2. Робот пример

2.1. Увод

  • Анализирати робот пример
  • Визуализовати робот мета-модел и примере модела. Испробати и dot и plantUML визуализације.
    • За директан преглед dot фајлова можете инсталирати пакет xdot:

      $ uv add xdot
      
  • Укључити debug мод и анализирати излаз

2.2. for петље у Робот језику

Дорадити робот пример тако да омогући for петље облика:

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

2.3. if искази у робот језику

Дорадити робот пример тако да омогући if исказе:

if x > 5
    up 1
end

где x и y вариабле представљају текућу позицију робота. После if исказа наводи се Булов израз са стандардним операторима <,>,>=,<=, !=, ==, and, or, not

3. Expression пример

3.1. Увод

  • Анализирати expression пример
  • Визуализовати еxпрессион мета-модел и примере модела
  • Укључити debug мод и анализирати излаз

3.2. Позиви функција у expression језику

У expression примеру омогућити позиве стандардним математичких функција из math модула.

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

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

4. ЈСД - услов -> акција

Направити textX граматику за парсирање следећег језика:

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
  • У првом делу се дефинишу могуће акције. Свака акција почиње кључном речју action, има име и REST URL који се позива (шаље се HTTP GET)
  • Акција може имати параметре - user_id у примеру
  • Правила када се акција позива се дефинишу са on ... trigger... with исказима где се дефинише:
    • Логички израз који, уколико је задовољен, доводи до акције. Овај исказ може имати стандардне логичке операторе and, or, not као и аритметчко поређење <,>, <=, >=, ==, !=.
    • Акција коју је потребно позвати наводи се после кључне речи trigger
    • После кључне речи with наводе се вредности параметара позива акције, раздвојени зарезима. with део је опцион.
  • И акција и on правила може бити више

5. Entity проширење

Проучити Entity пример из теxтX документације и проширити га на следећи начин:

  1. Омогућити да тип особине буде кардиналитета вишег од 1. Односно да особина може бити колекција других ентитета или простих типова.
  2. Омогућити да тип колекције буде скуп или низ/листа.
  3. Омогућити двосмерне референце.
  4. Додати подршку за пакете који могу да се угњезде на произвољну дубину.
  5. Омогућити референцирање ентитета употребом квалификованих имена (paket1.paket2.entitet). За исправно разрешавање референци користити RREL изразе у граматици.

6. Turtle graphics језик

Употребом textX-a креирати Turtle graphics ЈСД.

  1. Подржати најмање следеће команде: forward, backward, right, left, pendown, penup, pensize, color.
  2. Имплементирати while петљу где ће услов бити логички израз са текућим стањем корњаче (нпр. позиција, угао).
  3. Имплементирати if-else исказ.
  4. Направити интерпретер.
  5. Направити компајлер који ће генерисати одговарајући Пајтон кôд.