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
Nesta
seção será mostrada brevemente a implementação de uma calculadora simples. A
implementação no ASIN dessa calculadora pode ser vista em [1]. O grafo
sintático criado no grView é exibido na
figura 22:
Figura 22 – Grafo
para a gramática de uma calculadora simples.
As
rotinas semânticas rs1 e rs2, são utilizadas para
implementar as operações de soma, subtração, divisão e multiplicação. A rotina rs1 é mostrada a seguir:
void rs1() {
ParseStackNode aux
int
index = parseStack.size() - 1 //top
int
acumulator
aux =
(ParseStackNode)parseStack.elementAt(index)
acumulator = aux.intSem()
index--
while
(index > 0){
aux
= (ParseStackNode)parseStack.elementAt(index)
if
(aux.getSyn().equals("+")){
index--
aux =
(ParseStackNode)parseStack.elementAt(index)
acumulator = acumulator
+ aux.intSem()
index--
}
else
if (aux.getSyn().equals("-")){
index--
aux =
(ParseStackNode)parseStack.elementAt(index)
acumulator =
aux.intSem() - acumulator
index--
}
else {
break
}
}
/*
Stores the final result assigned to the non-terminal T into the first parse and
semantic stack cell of T;
* this way, the semantic stack will show the
partial and final results. */
((ParseStackNode)
parseStack.elementAt(++index)).setSem(acumulator+"")
if (index <= 0){
output.println("Result:
"+acumulator)
}
}
Note
que variáveis auxiliares do tipo ParseStackNode podem ser usadas para guardar valores da pilha
de símbolos terminais.