Sestavení AST a vizualizace
Prostudujte kód, který představuje front-end pro jednoduchý jazyk vycházejícího z Javy. Tento jazyk se od Javy liší v následujících rysech.
- Všechny operátory mají stejnou prioritu.
- Jeden soubor může obsahovat právě jednu třídu.
- Neexistují vnořené a anonymní třídy.
- Metody a atributy mohou být private, protected, public nebo static.
- Dědičnost a rozhraní nejsou podporovány
Úkol č.1
- Doplňte do jazyka opératory porovnání tj. ==, !=, <, <=, >, >=.
- Doplňte do jazyka cykly for(;;), while a do-while, jak se používají v jazyce Java/C.
GraphViz a jazyk DOT
Pro vizualizaci AST lze využít různé nástroje např. GraphViz nebo TikZ, které umožňují převést textový popis AST do grafické podoby.
Pro popis grafu používá GraphViz jednoduchý jazyk DOT. Neorientovaný graf v něm je popsán následovně:
graph { node1 -- node2; node1 -- node3; node3 -- node4; node3 -- node5; }
V případě potřeby je možné jednotlivým uzlům nastavit vhodné popisky, či styl.
graph { node [shape=plaintext]; node1 [label="+"]; node2 [label="1"]; node3 [label="*",shape=oval,color=red]; node4 [label="2",shape=box]; node5 [label="3",shape=box]; node1 -- node2; node1 -- node3; node3 -- node4; node3 -- node5; }
Orientovaný graf je definován podobně.
digraph { node [shape=plaintext]; node1 [label="+"]; node2 [label="1"]; node3 [label="*"]; node4 [label="2"]; node5 [label="3"]; node1 -> node2; node1 -> node3 [label="t1", color=red]; node3 -> node4; node3 -> node5; }
Pro zobrazení grafů je možné použít buď přímo GraphViz, viz příkaz níže nebo webovou aplikaci.
dot -O -Tpng graph.dot dot -O -Tsvg graph.dot
Úkol č.2
Implementujte algoritmus, který AST převede do jazyka DOT, případně jiného jazyka vhodného pro vizualizaci grafů.