• Nenhum resultado encontrado

APÊNDICE A Opcodes da Máquina Virtual Baseada em Pilha

As Tabelas 11 à 15 mostram os opcodes utilizados pela máquina virtual. Sendo que a Tabela 15 mostra opcodes de uso interno. Esses são aqueles que não podem ser utilizados pelo usuário mas sim pelo TAP quando da geração de códigos. Os opcodes constantes nas demais tabelas podem ser utilizados pelo usuário usuário através da estrutura ASM mostrada na seção 4.2.

Opcode Descrição

PUSH_CTENUMERO <número> Insere uma constante tipo número na pilha

PUSH_CTELOGICO <lógico> Insere uma constante tipo lógico na pi- lha

PUSH_CTETEXTO <texto> Insere uma constante tipo texto na pi- lha

PUSH_CTETEMPO <tempo> Insere uma constante tipo tempo na pi- lha

PUSH_CTECALENDARIO <calendário> Insere uma constante tipo calendário na pilha

PUSH_CTEBINARIO <binário> Insere uma constante tipo binário na pilha

PUSH_NULL Insere a constante null na pilha

PUSH_INST <identicador> Insere a instância <identicador> na pilha

PADD Remove os dois valores do topo e co- loca o resultado da expressão <p1> + <p2> na pilha

Opcode Descrição

PSUB Remove os dois valores do topo e coloca o resultado da expressão <p1> - <p2> na pilha

PMULT Remove os dois valores do topo e coloca o resultado da expressão <p1> * <p2> na pilha

PDIV Remove os dois valores do topo e coloca o resultado da expressão <p1> / <p2> na pilha

PINTDIV Remove os dois valores do topo e coloca a parte inteira do resultado da expres- são <p1> / <p2> na pilha

PINTMOD Remove os dois valores do topo e coloca o resto da expressão <p1> / <p2> na pilha

PPOT Remove os dois valores do topo e coloca o resultado da expressão <p1> <p2> na pilha

PRAD Remove os dois valores do topo e co- loca o resultado da expressão <p1> (1/<p2>) na pilha

PNOW Põe no topo da pilha dado do tipo Ca- lendário (data atual)

PQUESTION Retira do topo da pilha variável de re- torno, retira da pilha pergunta, apre- senta para o usuário a pergunta infor- mada

PSWAP Inverte a posição dos dois ultimos ele- mentos to topo da pilha

PIGUAL Remove os dois valores do topo e co- loca o resultado da expressão <p1> = <p2> na pilha

Opcode Descrição

PDIF Remove os dois valores do topo e co- loca o resultado da expressão <p1> <> <p2> na pilha

PMAIOR Remove os dois valores do topo e co- loca o resultado da expressão <p1> > <p2> na pilha

PMENOR Remove os dois valores do topo e co- loca o resultado da expressão <p1> < <p2> na pilha

PMAIOREQ Remove os dois valores do topo e co- loca o resultado da expressão <p1> <= <p2> na pilha

PMENOREQ Remove os dois valores do topo e co- loca o resultado da expressão <p1> >= <p2> na pilha

PNAO Remove os dois valores do topo e coloca o resultado da expressão Não <p1> na pilha

POU Remove os dois valores do topo e co- loca o resultado da expressão <p1> ou <p2> na pilha

PE Remove os dois valores do topo e coloca o resultado da expressão <p1> e <p2> na pilha

PXOU Remove os dois valores do topo e co- loca o resultado da expressão <p1> ou exclusivo <p2> na pilha

PWRITE Remove o conteúdo do topo da pilha e exibe ao usuário

POP_TO_VAR Remove <valor> e <variavel> da pi- lha. Em seguida executa <variavel> ← valor

Opcode Descrição

CALL <sentença> realiza uma chamada a uma denição ADM_PACOTE <opc> Rotina de gerenciamento de pacotes.

OPC[CRIAR=1,EXCLUIR=2,REN=3, exp=4, imp=5, publ=6, install=7] PCALENDARSRV Comando de serviços para expressões

do tipo Calendário

PSEL_SENT_SIMILAR Remove do topo da pilha a última ex- pressão passada pelo usuário e procura por sentenças similares, pedindo orien- tação do usuário para selecionar uma PCHK_WRD_LST Verica se a constante texto no topo da

pilha é uma palavra cadastrada na base de dados do agente

PCALENDARSRV Comando de serviços para expressões do tipo Calendário

PADD_WRD_LST Cadastra a sentença existente no topo da pilha como uma palavra nova no ser- vidor web

UPD_WRD_LST Atualiza a lista local de palavras a par- tir da lista existente no servidor web PCT_INFO Exibe tela com informações do pacote

atual para usuário

Opcode Descrição

ACT_LOCALVAR <identicador> Ativa a variável <identicador> hline LABEL Marcador de rótulo (apenas uso in-

terno)

JMP <idRotulo> Salto incondicional para rótulo <idRo- tulo>

JMP_TP_FALSE <idRotulo> Se o topo da pilha for uma variável do tipo lógico com valor falso, efetua salto para rótulo <idRotulo>

TERMINATE Encerra um processo

CREATE_FUNC Associa uma sentença ao código pas- sado na seção indicada no cabeçalho (uso interno)

REDEFINIR_FUNC Atualiza o código passado na seção in- dicada no cabeçalho para uma sentença já denida(uso interno)

CF_SECTION_CODE_NAME Dene uma seção de código vazio (uso interno)

RETURN Encerra a função atual com retorno de valor

ENCERRAR_SESSAO Encerra o agente

INCBC Incrementa o contador de bloco (uso in- terno)

DECBC Decrementa o contador de bloco (uso interno)