Vous êtes sur la page 1sur 15

Interpretador em Haskell para Imp2

Grupo: Leandro Henrique (lheva) Pablo Alessandro (pabv) Sergio Sette (sss )

Introdu!"o
Este documento se prope a especificar, utilizando uma semntica informal, a linguagem imperativa lmp2 e seu interpretador, definindo os parmetros necessrios para uma programao funcional concisa e eficiente. Para tanto, aspectos como uma boa definio da sintaxe da linguagem, bem como a semntica relacionada se tornam fundamentais, portanto sero bem definidos ao longo deste documento. !as"ell. #uando necessrio, exemplos sero mostrados. interpretador foi desenvolvido segundo os paradigmas funcionais e imperativos da linguagem

#$Sinta%e e Sem&nti'a
$intaxe de uma linguagem se prope a definir a estrutura necessria para o correto uso dos s%mbolos da linguagem, possibilitando assim a construo de um programa sintaticamente correto. Ela tamb&m define o con'unto de palavras(c)ave e s%mbolos em geral *ue a linguagem & capaz de recon)ecer. $emntica de uma linguagem existe para dar sentido + sintaxe. ,om uma semntica bem definida, podemos entender mais facilmente o funcionamento do programa, antes mesmo de v-(lo funcionar. . semntica & elaborada de acordo com os re*uisitos necessrios da linguagem.

2$Imp2
Sinta%e
Programa //0 ,omando ,omando //0 ,omando1eclaracao 2 .tribuicao 2 3)ile 2 4f5)enElse 24 2 $"ip 2 ,)amadaProcedimento 2 ,omando 676 ,omando $"ip //0 8s"ip9 .tribuicao //0 4d 6/06 Expressao Expressao //0 :alor 2 Exp;naria 2 Exp<inaria 2 4d 2 8=94d 2 8>94d :alor //0 :alor,oncreto :alor,oncreto //0 :alor4nteiro 2 :alor<ooleano 2 :alor$tring Exp;naria //0 6(6 Expressao 2 6not6 Expressao 2 6lengt)6 Expressao Exp<inaria //0 Expressao 6?6 Expressao 2 Expressao 6(6 Expresso 2 Expressao 6and6 Expressao 2 Expressao 6or6 Expressao 2 Expressao 6006 Expressao 2 Expressao 6??6 Expressao ,omando1eclaracao //0 6@6 1eclaracao 676 ,omando 6A6 1eclaracao //0 1eclaracao:ariavel 2 1eclaracaoProcedimento 2 1eclaracao 6,6 1eclarao 1eclaracao:ariavel //0 6var6 4d 606 Expressao 2 8pointer6 4d 606 8B95ipo 1eclaracaoProcedimento //0 6proc6 4d 6C6 D Eista1eclaracaoParametro F 6G6 6@6 ,omando 6A6 Eista1eclaracaoParametro //0 4d D8B9F5ipo 2 4d D8B9F5ipo 6,6 Eista1eclaracaoParametro 5ipo //0 6string6 2 6int6 2 6boolean6 3)ile //0 6H)ile6 Expressao 6do6 ,omando 4f5)enElse //0 6if6 Expressao 6t)en6 ,omando 6else6 ,omando 4 //0 6Hrite6 6C6 Expressao 6G6 2 6read6 6C6 4d 6G6 ,)amadaProcedimento //0 6call6 4d 6C6 EistaExpressao 6G8 EistaExpressao //0 Expressao 2 Expressao 6,6 EistaExpressao

2$# Programa
Sinta%e:
Programa //0 ,omando

Sem&nti'a:
Em lmp2, um programa & formado por um ou mais de um comando

executados em um ambiente inicial.

2$2 (on'eitos )*si'os


2$2$# +ipos
5odos os identificadores em 4mp2 devem ser declarados com um tipo. s tipos bsicos definidos em 4mp2 so/ String (Cadeia de caracteres) Int (Inteiros) Bool (Booleanos)

2$2$2 ,%pressao Sinta%e:


| Id | &Id | ExpUnaria | ExpBinaria

Expressao ::= Valor

Sem&nti'a:
;ma Expresso & uma entidade *ue, *uando avaliada fornece um resultado. Existem I tipos de expresses/ Valor :alor & uma expresso Jnica, cu'o resultado da avaliao & a prKpria expresso. ;m valor pode ser do 5ipo 4nt C4nteirosG, <ool C<ooleanG ou $tring C,adeia de ,aracteresG

Id 4dentificador ou varivel. Lo possui um valor imediato,

mas uma associao com uma posio de memKria onde se encontra o valor. &Id Ponteiro. Possui um apontador para o endereo do valor associado .

ExpUnaria Sintaxe: Exp;naria //0 6(6 Expressao 2 6not6 Expressao 2 6lengt)6 Expressao Semntica: ;ma expresso unria & formada por uma expresso e um operador. . expresso & ento avaliada e ao seu resultado & aplicado o operador. ExpBinaria Sintaxe: Exp<inaria //0 Expressao 6?6 Expressao 2 Expressao 6(6 Expresso 2 Expressao 6and6 Expressao 2 Expressao 6or6 Expressao 2 Expressao 6006 Expressao 2 Expressao 6??6 Expressao Semntica: ;ma expresso binria & formada por dois

operandos, *ue so expresses e um operador, *ue indicar a operao a ser efetuada entre os resultados da avaliao de cada expresso.

2$2$ Lista,%pressao

;ma lista de expresses & uma lista *ue cont&m uma ou mais expresses.

2$

-e'lara!.es
Sinta%e:
1eclaracao //0 1eclaracao:ariavel 2 1eclaracaoProcedimento 2 1eclaracao 6,6 1eclarao

Sem&nti'a:
;ma declarao & um evento *ue oferece ao programador a possibilidade de criar <indingsCassociaesG durante a execuo do programa. 1eclaracao:ariavel Sintaxe:

1eclaracao:ariavel //0 6var6 4d 606 Expressao 2 8pointer6 4d 606 8B95ipo Semntica: . declarao de uma varivel, feita atrav&s do operador 8var9 ou 8pointer9, cria um binding entre o identificador da varivel e a posio de memKria onde se encontra o dado. 1eclaracaoProcedimento "'" Semntica: . declarao de um procedimento, feita atrav&s do operador 8proc9 cria um binding entre o identificador do procedimento e a posio de memKria *ue cont&m o procedimento, podendo receber uma lista de parmetros para executar os comandos. 1eclaracao 8,9 1eclaracao Sintaxe: proc" Id "(" !ista"eclaracao#ara$etro % ")" "&" Co$ando

. lista de declarao & usada para criar vrias declaraes seguidas.

2$/ (omando
Sinta%e:
,omando //0 2 2 2 2 2 2 2 ,omando1eclaracao .tribuicao 3)ile 4f5)enElse 4 $"ip ,)amadaProcedimento ,omando 676 ,omando

Sem&nti'a:
;m comando & um dos princ%pios bsicos de funcionamento de

uma linguagem funcional. 5udo *ue se pode executar num programa & feito atrav&s de comandos, *ue podem ser de diferentes tipos. La definio de lmp2, esto previstos M tipos de comandos. o .tribuio Sinta%e: Id ":=" Valor Semntica: comando de atribuio, indicado pelo operador 8/09 atribui um dado valor resultante a uma dada varivel, criando uma associao C<indingG entre o identificador 84d9 e a posio de memKria *ue cont&m o valor. 4f5)enElse Sintaxe: "i(" Expressao "t)en" Co$ando "else" Co$ando Semntica: comando condicional avalia uma expresso e dependendo do resultado dessa expresso, o programa executa um ou outro comando. . Expresso no

condicional 8if9 deve ter como resultado um valor do tipo boolean. Por exemplo/ i( Exp t)en co$* else co$+ $e Exp 0 5rue C:erdadeiroG, ento o comando 8comN9 & executado. $e Exp 0 Oalse COalsoG, ento o comando 8com29 & executado. o 3)ile Sintaxe: ",)ile" Expressao "do" Co$ando Semntica: ,omando de loop avalia uma expresso e executa um certo comando en*uanto a expresso for verdadeira. . expresso no condicional 8H)ile9 deve retornar um valor do tipo boolean. Por exemplo/ ,)ile Exp do co$* En*uanto Exp 0 5rue C:erdadeiroG o comando comN & executado. #uando Exp 0 Oalse COalsoG, a execuo do loop & encerrada. ,omando1eclaracao Sintaxe: "&" "eclaracao "-" Co$ando "'" Semntica: comando de declarao cont&m uma lista de declaraes de variveis e um comando. .pKs a avaliao das variveis, o comando & executado, ou se'a, no mesmo escopo das variveis. 4P CNG ",rite" "(" Expressao ")" . expresso & avaliada e o resultado & enviado ao dispositivo de sa%da. C2G "read" "(" Id ")"

;m valor & lido do dispositivo de entrada e esse valor & atribu%do + varivel 84d9 ,omando 879 ,omando ,omando C*-C+ C* . exec/tado e ao (inal da s/a exec/01o2 C+ . exec/tado se*Qencial executa dois comandos em

se*Q-ncia. Por Exemplo/

$"ip ,omando $"ip no afeta o ambiente do contexto. Ele simplesmente passa para o prKximo comando. ,)amadaProcedimento Sintaxe:

,)amadaProcedimento //0 6call6 4d 6C6 EistaExpressao 6G8 Semntica: comando de c)amada de procedimento executa um dado procedimento indicado. R poss%vel passar parmetros para estes procedimentos. Pode ser feito de duas formas/ Por valor/ s valores das expresses so avaliados e passam a ser valores formais Por refer-ncia/ . c&lula referenciada pelo 41 passa a ser o valor formal.

$,%emplos de '0digo em Imp2


$#
@ var string 0 8!ello 9, var string2 0 83orldS9, var saida 0 89, proc concatCstring sN, string s2G @ saida /0 sN ?? s2 A7 call concat CstringN, string2G7 HriteCsaidaG

Hello 1orld2

} $2
@ var a 0 2, var b 0 T, var c 0 NU7 var resultado 0 U, proc somaCint i, int ', int "G @ resultado /0 i?'?" A7 call somaCa,b,cG7 Hrite CresultadoG A

Soma tr3s n4meros

$
@

5eri6i'a se duas vari*veis possuem o mesmo valor


var a 0 V, var b 0 T, var resul, proc igualCint i, int 'G @ resul 0 i00' A7 call igualCa,bG7 HriteCresulG

/$Interpretador
interpretador para a linguagem 4mp2 foi desenvolvido em !as"ell, utilizando(se dos conceitos de tipos, dados e funes presentes na linguagem funcional. Lo interpretador, a memKria & tratada de maneiras diferentes, dependendo do tipo de informao *ue ela armazena, ou se'a, se ela & uma memKria de variveis, ou de procedimentos. 1e toda maneira, o conceito de memKria no interpretador para 4mp2 est definido como um tipo, um con'unto de tuplas *ue cont&m uma informao, se'a sobre o endereo da varivel, do procedimento, ou a respeito de um binding. memKria de con'unto formado por memKria de variveis, bindings de variveis e bindings de procedimentos,

procedimentos forma o *ue c)amamos de escopo de memKria. 1ois processos esto em um mesmo escopo se eles compartil)am um mesmo ambiente de memKria. E este ambiente no interpretador tamb&m est definido como um tipo. 4sso possibilita a criao de vrios escopos de memKria, onde dois programas podem executar livremente sem *ue um interfira na execuo do outro. interpretador tamb&m oferece suporte a movimentao de dados na memKria, desde adicionar novos elementos + memKria, at& o armazenamento de variveis e procedimentos na memKria, incluindo a criao de bindings CassociaesG entre varivelPprocedimento e posio de memKria. . memKria tamb&m pode ser 8lida9 atrav&s de comandos print3 interpretador oferece os comandos necessrios para imprimir na tela dados sobre a memKria de variveis, sobre a memKria de procedimento, ou sobre os bindings de *ual*uer um dos dois ou ainda sobre estruturas aparentemente fora da memKria, como listas de parmetros ou declaraes de procedimentos.

7epresenta!"o da mem0ria sob esquema de tipos tWpe .mbiente 0 CXemoria:ariaveis, XemoriaProcedimentos, <indingsProcedimentosG tWpe 4d 0 $tring tWpe Endereco 0 4nt tWpe tWpe tWpe tWpe Xemoria:ariaveis 0 D,elula:ariavelF <indings:ariaveis 0 D<indingF XemoriaProcedimentos 0 D,elulaProcedimentoF <indingsProcedimentos 0 D<indingF <indings:ariaveis,

tWpe ,elula:ariavel 0 CEndereco, :alorG tWpe ,elulaProcedimento 0 CEndereco, 1eclaracaoProcedimentoG tWpe <inding 0 CEndereco, 4dG

s tipos, os operadores, as expresses e os comandos so definidos como dados. $endo assim, cada um deles possui um construtor Jnico *ue & capaz de definir ade*uadamente a estrutura. Para se utilizar dessas estruturas, entretanto, & necessrio o uso ade*uado dos seus construtores.

7epresenta!"o de alguns 'omandos 'omo 6orma de dados do interpretador data ,omando 0 , X1E, ,omando1eclaracao (( comando de declarao 2 , X.5Y .tribuicao (( comando de atribuio 2 , X3!4EE 3)ile (( comando de loop 2 , X4O 4f5)enElse (( comando condicional 2 , X4 4nput utput (( comando para entradaPsa%da 2 , X$Z4P (( no faz absolutamente nada 2 , X,!.XPY , ,)amadaProcedimento (( comando *ue c)ama um proced. 2 , X, X ,omando ,omando (( recurso do comando data .tribuicao 0 .5Y4< 4d Expressao (( .tribui um valor a um 41 data Expressao 0 :.E Y :alor (( ;m valor simples 2 E[P;L Exp;naria (( ;ma Expresso ;nria 2 E[P<4 Exp<inaria (( ;ma Expresso <inria 2 41 4d (( ;m 41 2 EL1 4d (( Endereo do 41 C=41G 2 , L5E;1 4d (( ,onteJdo do C>41G data :alor 0 :.E, L, :alor,oncreto (( ;m valor ,oncreto

data :alor,oncreto 0 :.E4L5 4nt

processo de execuo de um programa escrito em 4mp2 passa por vrios processos intermedirios. s valores vo sendo destrinc)ados e avaliados at& *ue se c)egue a uma resposta coerente. $o as funes de avaliao *ue executam este servio. Elas avaliam tanto os tipos primitivos, devolvendo seu valor concreto, como tamb&m retornam elementos Cprocedimentos ou variveisG*ue estavam na memKria e esto associados a um certo identificador. interpretador tamb&m oferece um servio um pouco mais complexo do *ue avaliar valor. .final, as expresses de 4mp2 precisam ser avaliadas, se'a ela uma expresso unria ou binria. Essas expresses so executadas em funo do ambiente em *ue elas se situam, por tanto sua avaliao por parte do interpretador leva em considerao o ambiente.

7epresenta!"o de 6un!.es de avalia!"o de tipos e de e%press.es (( .valiao de inteiros eval4nteiro // :alor (\ 4nt eval4nteiro C:.E, L,C:.E4L5 vGG 0 v (( .valiao de booleanos eval<ooleano // :alor (\ <ool eval<ooleano C:.E, L,C:.E<

E vGG 0 v

(( Expresses ;nrias eval ambiente CE[P;L CLE].54: expressaoGG 0 :.E, L,C :.E4L5 C U ( eval4nteiro C eval ambiente expressao GGG eval ambiente CE[P;L CLE].,. expressaoGG 0 :.E, L,C :.E< E C not C eval<ooleano C eval ambiente expressao GGGG eval ambiente CE[P;L C5.X.L! expressaoGG 0 :.E, L,C :.E4L5 C lengt) C eval$tring C eval ambiente expressao GGGG

Por fim, os comandos precisam ser executados. E no interpretador, cada comando possui uma funo correspondente, sempre levando em conta o ambiente em *ue o programa est situado.

7epresenta!"o de 6un!.es de e%e'u!"o

Executa um comando de 4 executar,omando4 // .mbiente (\ 4nput utput (\ .mbiente executar,omando4 Cmemoriavariaveis, bindingsvariaveis, memoriaprocedimentos, bindingprocedimentosG CE$,YE:EY4 expressaoG 0 Calterar:alor:ariavel memoriavariaveis U Ceval Cmemoriavariaveis, bindingsvariaveis, memoriaprocedimentos, bindingprocedimentosG expressaoG, bindingsvariaveis, memoriaprocedimentos,bindingprocedimentosG executar,omando4 Cmemoriavariaveis, bindingsvariaveis, memoriaprocedimentos, bindingprocedimentosG CEEY4 idG 0 Calterar:alor:ariavel memoriavariaveis N Cler:alor:ariavel memoriavariaveis CobterEndereco bindingsvariaveis idGG, bindingsvariaveis, memoriaprocedimentos, bindingprocedimentosG (( Executa um comando de declarao executar,omando1eclaracao // .mbiente (\ ,omando1eclaracao (\ .mbiente executar,omando1eclaracao ambiente C1E,, X declaracao comandoG 0 executar,omando Cexecutar1eclaracao ambiente declaracaoG comando

Vous aimerez peut-être aussi