Zápočet 3.2.

Oracions at 2014-02-03 13:13:27

Naprogramujte pretty-printer JSONu. Ve vstupním souboru jsou bílými znaky oddělené tokeny. Soubor je jeden prvek, kde prvek může být buď string, což je řetezec ohraničený uvozovkami, pro jednoduchost bez mezer uvnitř, nebo integer, nebo pole (začíná a končí hranatými závorkami, uvnitř čárkami oddělené prvky), nebo objekt (začíná a končí složenými závorkami, uvnitř čárkami oddělené dvojice klíč:hodnota).

Například pro vstup:

{ "key1" : 21 , "key2" : [ "prvnipolozkapole" , "zadneMezery" ] }

bylo třeba na výstup vypsat:

{
   "key1" : 21 ,
   "key2" : [
        "prvnipolozkapole" ,
        "zadneMezery"
    ]
}

Zadání bylo vysvětleno do podrobností, dostali jsme několik testovacích souborů, na kterých také byla zkoušena funkčnost. Bylo třeba ošetřit i neplatné vstupy.

Pet at 2014-02-03 22:03:27

Ahoj,
29.1. byly rámečky

Ramecky

Vasim ukolem je naprogramovat interpreter jazyka, ktery slouzi k zobrazovani "ramecku" kolem retezcu.

Jazyk

Kazdy prikaz je na samostatnem radku.  
V programu se mohou vyskytnout nasledujici prikazy:  

// radek zacinajici dvema slashi je komentar, prazdne radky se ignoruji
//
// JAZYKOVE KONSTRUKTY
//////////////////////
// deklarace promenne
HBOX {identifikator}
VBOX {identifikator}
LABEL {identifikator} {string (do konce radku)}

// vlozeni prvku do "kontejneru"
ADD {identifikatorKontejneru} {identifikatorVkladanehoPrvku}

// vykresleni prvku na obrazovku
PRINT {identifikator}

Priklad programu 1:

LABEL paulus Roman Paulus
LABEL ihnacak Peter Ihnacak
LABEL babica Jiri Babica

VBOX vert
ADD vert babica

HBOX hor
ADD hor paulus
ADD hor ihnacak
ADD vert hor

ADD vert babica

PRINT vert

Vystup programu 1:

+----------------------------+
|Jiri Babica                 |
+----------------------------+
|+------------+-------------+|
||Roman Paulus|Peter Ihnacak||
|+------------+-------------+|
+----------------------------+
|Jiri Babica                 |
+----------------------------+

Priklad programu 1:

LABEL paulus Roman Paulus
LABEL ihnacak Peter Ihnacak
LABEL babica Jiri Babica

VBOX vert
ADD vert babica

HBOX hor
ADD vert hor

ADD vert babica

PRINT vert

Vystup programu 1:

+-----------+
|Jiri Babica|
+-----------+
+-----------+
|Jiri Babica|
+-----------+

Okrajove podminky

spatny pocet argumentu, problem s otevrenim vstupniho souboru - "Argument error"  
nedeklarovana promenna - "Line 21: Variable 'A' not declared"  
redeklarace promenne - "Line 21: Variable 'A' redeclared"  
cyklus (vypsat az pri PRINTu, radka 21 obsahuje PRINT) - "Line 21: Cycle detected"  
prirazeni do labelu, neznama operace nebo spatny pocet argumentu operace - "Line 21: Operation error"  
nevyskytuji se zadne "multi-line" labely, tj. cely retezec je na jednom radku  
pokud je prvek prazdny - tj. label nulove delky nebo kontejner s nulovym poctem prvku, tak se na vystup nevypisuje (viz priklad 2)  

Poznamky

vstupni soubor se vejde do pameti  
"platno", na ktere budete kreslit, se vejde do pameti  
pozor, jedna promenna (napr. label) muze byt pouzita v programu nekolikrat - napr. vlozena do stejneho kontejneru vicekrat.  
rozmery HBOXu a VBOXu jsou vzdy co nejmensi, ale tak, aby to stale byl obdelnik  
polozka v HBOXu i VBOXu je vzdy zarovnana doleva a nahoru.  
identifikator je retezec bez bilych znaku