A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Haskell Binding for GraphViz João Paulo Barbosa

Apresentações semelhantes


Apresentação em tema: "Haskell Binding for GraphViz João Paulo Barbosa"— Transcrição da apresentação:

1 Haskell Binding for GraphViz João Paulo Barbosa
HGraphViz Haskell Binding for GraphViz João Paulo Barbosa

2 Motivação Visualizar estruturas de dados
class Graphical a where draw :: Graphical a => a -> IO () instance Show a => Graphical [a] where draw = … instance Graphical NDfa where draw … Manipular grafos/estruturas de dados Modificar várias bibliotecas da UMinho Haskell Library (ver adiante)

3 GraphViz - Introdução Sistema/biblioteca de visualização/manipulação de grafos Possuí várias tipos de layout de grafos: Hierárquico “Mola” Radial Circular Desenvolvido em C Bindings para várias linguagens mas não para Haskell (yet…)

4 GraphViz - Componentes
O GraphViz lida com os seguintes tipos de componentes: Grafo (Nós,Arcos,Atributos) :: ([No],[Arco],[Atributos]) (Chegada,Saída,Atributos) :: ([Arco],[Arco],[Atributo]) Arco (Origem,Destino,Atributos) :: (No,No,[Atributo]) Atributo (Propriedade,Valor) :: (String,String)

5 GraphViz – Linguagem Dot
Linguagem simples para armazenar grafos Actualmente várias bibliotecas da UMinho Haskell Library criam um ficheiro neste formato para ser feito o layout pelo GraphViz ou para ser visualizado. graph ER { node [shape=box]; course; institute; student; node [shape=ellipse]; {node [label="name"] name0; name1; name2;} code; grade; number; node [shape=diamond,style=filled,color=lightgrey]; "C-I"; "S-C"; "S-I"; name0 -- course; code -- course; course -- "C-I" [label="n",len=1.00]; "C-I" -- institute [label="1",len=1.00]; institute -- name1; institute -- "S-I" [label="1",len=1.00]; "S-I" -- student [label="n",len=1.00]; student -- grade; student -- name2; student -- number; student -- "S-C" [label="m",len=1.00]; "S-C" -- course [label="n",len=1.00]; label = "\n\nEntity Relation Diagram\ndrawn by NEATO“; fontsize=20; }

6 GraphViz - Layout As rotinas de Layout podem gravar o grafo numa imagem São suportados vários formatos de imagem Alguns atributos controlam o layout

7 Foreign Function Interface (FFI)
FFI permite: Especificar em Haskell funções externas Especificar funções Haskell passíveis de serem usadas externamente Converter estruturas externas para Haskell e vice-versa Um pouco Low-level

8 FFI - Greencard Pré-processador FFI para Haskell
Abstrai a complexidade do FFI Processa directivas da forma %xpto Gera código Haskell e funções stub em C correspondentes Permite misturar código C no Haskell Directivas opcionais são inferidas automáticamente

9 FFI – Exemplo Greencard
module HGraphViz where import Prelude hiding (init) import Foreign.GreenCard %#include <dotneato.h> %prefix ag data AgGraph = AgGraph type Graph = Ptr AgGraph %dis graph g = ptr ({Agraph_t*} g) %fun agopen :: String -> Int -> IO Graph %fun agread :: String -> IO Graph %call (string f) %code FILE * fs = fopen(f, "w"); % r = agread(fs); %result (graph r)

10 HGraphViz - Arquitectura
Greencard FFI Stubs GraphViz

11 HGraphViz - Exemplo instance Show a => Graphical [a] where
graph n l = do g <- open n Directed ns <- sequence $ map (node g . show) l sequence . map (uncurry (edge g)) $ zip ns (tail ns) return g main = do HGraphViz.init gl <- graph "lista" ["ola","teste","graphviz"] write gl "lista.dot"

12 Combinadores GraphViz trata os atributos como pares de Strings
Alguns atributos podem tornar-se complexos (p.e. records) O uso de combinadores facilita a formatação dos vários componentes de um grafo

13 HGraphViz - UI wxHaskell (wxWindows binding for Haskell) Portável
Fácil Utilização Tipicamente o GraphViz faz o layout de um grafo e grava em imagem para então ser visualizado Desvantagens: Imagem temporária Fraca interactividade

14 HGraphViz - Interactividade
Manipulação gráfica de grafos Como obter a nova estrutura modificada graficamente? edit :: Graphical a => a -> IO a Associar funções que manipulam a estrutura às operações gráficas Sugestões ? Dynamic Layout Managers – Dynagraph O sistema GraphViz fornece uma biblioteca que facilita o layout incremental em grafos. Não tão dispendioso como os outros layouts

15 HGraphViz – Extensibilidade
Outros atributos que não estejam definidos na especificação podem ser processados pelo visualizador: Imagens Outro grafo (grafos dentro de nós?) Visualização 3D Sugestões

16 HGraphViz – Aplicações
“Graph visualization is a way of representing structural information as diagrams of abstract graphs and networks. Automatic graph drawing has many important applications in software engineering, database and web design, networking, and in visual interfaces for many other domains.” in


Carregar ppt "Haskell Binding for GraphViz João Paulo Barbosa"

Apresentações semelhantes


Anúncios Google