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

  1. Doplňte do jazyka opératory porovnání tj. ==, !=, <, <=, >, >=.
  2. 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;
}
%3 node1 node1 node2 node2 node1--node2 node3 node3 node1--node3 node4 node4 node3--node4 node5 node5 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;
}
%3 node1 + node2 1 node1--node2 node3 * node1--node3 node4 2 node3--node4 node5 3 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;
}
%3 node1 + node2 1 node1->node2 node3 * node1->node3 t1 node4 2 node3->node4 node5 3 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ů.


Last update on 27. 9. 2016 13:21
Powered by Schemik.

© Petr Krajča, 2010, 2012
petr.krajca (at) upol.cz