Documentação de Usuário – GrView 0.2.1alpha

 

 

Introdução | Modelagem de Grafos | Visualização dos Grafos | Analisador Léxico | Rotinas Semânticas | Analisador Sintático | Exemplos

 

Uma referência a uma rotina semântica (para análise de contexto e geração do código objeto, completando a compilação produzida com o analisador GSSL(1)) podem ser inseridas em qualquer nó do GSS por meio do grView, embora o analisador GSLL(1) ignore as rotinas presentes em cabeçalhos de produção (nó do símbolo inicial da gramática e nós inicial do não-terminais à esquerda): o fato de ser possível inseri-las em cabeçalhos deve-se à possibilidade de algum analisador diferente levar em consideração as rotinas semânticas nesses nós. Para inserir uma rotina semântica basta abrir o menu contextual sobre um nó e selecionar “Semantic Routine -> Create New...” (figura 20) para criar uma nova rotina, ou selecionar na lista mostrada uma das rotinas semânticas previamente criadas. Após esse procedimento o nome da rotina será indicado ao lado do símbolo do nó. Alternativamente, também é possível indicar a rotina semântica pelo próprio símbolo do nó. Para isso é necessário alterar seu símbolo anexando, logo em seguida ao símbolo existente do nó, o caractere # e o nome da rotina semântica desejada diretamente após o nome do nó. Assim, por exemplo, se um nó tem o símbolo “B”, e deseja-se utilizar a rotina semântica “semantic_routine1”, basta alterá-lo para “B#semantic_routine1” (figura 20, em verde).

 

 

Figura 20 – Nós com rotinas semânticas.

 

 

1.                Criação de uma nova rotina semântica para o nó selecionado (na figura 20, em azul).

 

2.                Um nó, rotulado Numbcom a rotina semântica “semantic_routine_1”.

 

3.                Um nó com a mesma rotina, inserida da forma alternativa.

 

4.                Um nó lambda com a rotina “teste”.

 

 

Ao criar uma nova rotina semântica pelo método descrito acima será exibida uma caixa de diálogo onde se deverá informar o nome da nova rotina e inserir o código correspondente.  O código para rotinas semânticas deve ser escrito em Groovy [23]. Algumas variáveis especiais são disponibilizadas para imprimir resultados, bem como ler e modificar a tabela sintática:

 

·         parseStack – Cada elemento dessa pilha contém dois campos: um símbolo  sintático (um terminal ou não terminal), ou melhor, um ponteiro para o nó do grafo, onde está o símbolo, e dados semânticos (ponteiro para a tabela de símbolos do compilador, um rótulo ou ponteiro para uma tabela de rótulos para desvios, etc.). Este objeto é uma instância de java.util.Stack, onde cada elemento é uma instância de org.grView.syntax.model.ParseStackNode.

 

·         tabT –  Um vetor com os símbolos de todos os terminais. Neste vetor os índices dos nós são correspondentes aos índices em parseStack.

 

·         output – Esta variável aponta para a instância de um objeto utilizado para imprimir resultados. Os principais métodos associados a este objeto são: println(String) e DisplayTextExt(String), usados para imprimir resultados no interpretador e no campo de saída padrão, respectivamente.

 

Mais detalhes sobre a criação de rotinas semânticas podem ser encontrados em [20].

 

Uma vez criadas as rotinas semânticas, elas são armazenadas no diretório do projeto em um arquivo de extensão .sem; “Untitled.sem” para novos projetos. Este é escrito na linguagem Groovy. O código de cada rotina é inserido no campo indicado pelos comentários no arquivos. O exemplo abaixo mostra a função teste escrita nesse arquivo.

 

import org.grview.syntax.model.ParseStackNode

 

/*------ SEMANTIC ROUTINES ESPECIFICATION -----*/

/* you can modify the lines bellow */

     void teste() {

          println "hello world"

     }

 

/* do not modify the lines bellow */

/*------ SELF GENERATED METHODS ---------------*/

this

Novas rotinas podem ser inseridas diretamente neste arquivo, desde que respeitem todas as restrições da sintaxe. Para tanto basta abrir normalmente o arquivo a partir do gerenciador de arquivos e salvá-lo após a edição.