• Nenhum resultado encontrado

Defini¸c˜ao de Contextos

Notus permite que informa¸c˜oes de contexto sejam transmitidas de forma transparente entre as constru¸c˜oes de uma especifica¸c˜ao. Por exemplo, para uma especifica¸c˜ao de uma linguagem em que a defini¸c˜ao semˆantica para algumas constru¸c˜oes utilizam stores e environments, a equa¸c˜ao para valores literais n˜ao precisa referenciar esses contextos, tornando a propaga¸c˜ao de informa¸c˜ao de contexto inconveniente. Existem tamb´em

constru¸c˜oes, tais como comandos condicionais, cuja semˆantica n˜ao usa diretamente esses contextos, mas precisa propag´a-los para a avalia¸c˜ao de suas partes.

Certos recursos usuais de linguagens de programa¸c˜ao, tais como verifica¸c˜ao de ti- pos dinˆamicos, tratamento de erros e seq¨uenciadores influenciam o comportamento de outros, e esta influˆencia deve ser explicitada nas equa¸c˜oes semˆanticas que os definem. Para exemplificar a dependˆencia semˆantica entre constru¸c˜oes de uma linguagem, con- sidere o c´odigo da Listagem 3.28. O retorno R1 deve executar o bloco C3 antes de

efetuar o retorno de f. Por outro lado, o retorno R2 ´e executado imediatamente. As-

sim, a defini¸c˜ao semˆantica do comando try-catch-finally ´e influenciada pela semˆantica de m´etodos e retorno de m´etodo. Adicionalmente, o comando return´e dependente do contexto em que se encontra, assumindo semˆanticas diferentes dependendo do seu local de ocorrˆencia na ´arvore de sintaxe abstrata do programa.

✞ 1 i n t f ( ) { 2 t r y { 3 C1 // c a l c u l a t i o n o f r e s u l t 4 i f ( . . . ) r e t u r n r e s u l t ; // R1 5 C′ 1 6 } catch ( E x c e p t i o n e ) { 7 C2 // e x c e p t i o n h a n d l i n g 8 } f i n a l l y { 9 C3 // some o p e r a t i o n t o f i n a l i z e e x e c u t i o n 10 } 11 r e t u r n d e f a u l t v a l u e ; // R2 12 } ✠ ✝ ✆

Listagem 3.28: Comando try-catch-finally.

As pr´oximas se¸c˜oes apresentam as constru¸c˜oes de Notus que manipulam informa¸c˜oes de contexto conforme as caracter´ısticas das equa¸c˜oes de um construto.

3.8.1

Dom´ınios de Contexto

Dom´ınios de contexto s˜ao definidos por declara¸c˜oes de dom´ınios semˆanticos e consistem em tuplas constitu´ıdas por informa¸c˜oes de contexto e rotuladas com os nomes das informa¸c˜oes que se deseja propagar. Uma defini¸c˜ao de contexto possui a forma:

T = context ( l a b e l1: domain1, l a b e l2: domain2, · · · , l a b e ln: domainn)

onde cada labeli ´e o r´otulo de uma informa¸c˜ao de contexto, e domaini, o dom´ınio do

valor que comp˜oe a informa¸c˜ao. As informa¸c˜oes podem ser classificadas de acordo com a forma como s˜ao propagadas. Uma informa¸c˜ao efˆemera, definida com a palavra-chave

3.8. Definic¸˜ao de Contextos 53

ephemeral antes de seu r´otulo, tem sua validade prescrita a cada atualiza¸c˜ao. Uma informa¸c˜ao persistente, definida com a palavra-chave persistent antes de seu r´otulo, n˜ao ´e invalidada mediante uma atualiza¸c˜ao. Caso nenhuma marca esteja presente na defini¸c˜ao da informa¸c˜ao, ela ´e considerada persistente.

A Listagem 3.29 declara um contexto composto por stores, cujo dom´ınio ´e S, e

env, cujo dom´ınio ´eR. Neste exemplo, a informa¸c˜aostore ´e efˆemera, e environment ´e persistente.

T = context ( e p h e m e r a l store : S , p e r s i s t e n t env : R )

✝ ✆

Listagem 3.29: Exemplos de declara¸c˜ao de dom´ınios de contexto

3.8.2

Express˜oes e Padr˜oes de Contexto

Contextos podem ser manipulados por meio de express˜oes de constru¸c˜ao, atualiza¸c˜ao, oclus˜ao e sele¸c˜ao.

3.8.2.1 Construtor de Contexto

A express˜ao de construtor de contexto define um valor em um dom´ınio de contexto fornecendo valores iniciais, e possui a forma:

T{ l a b e l1 ← exp1, l a b e l2 ← exp2, · · · , l a b e ln ← expn} ,

onde T´e um dom´ınio de contexto, cada labeli ´e um r´otulo de contexto e expi ´e uma

express˜ao do dom´ınio de labeli.

A Listagem 3.30 exemplifica uma express˜ao de construtor de contexto que define valores iniciais para a declara¸c˜ao da Listagem 3.29.

T{ s t o r e ← ( \ l o c −> u n u s e d ) , env ← ( \ i d −>unbound ) }

✝ ✆

Listagem 3.30: Exemplo de express˜ao de constru¸c˜ao de contexto

3.8.2.2 Sele¸c˜ao de Informa¸c˜ao de Contexto

A express˜ao de sele¸c˜ao de contexto retorna o valor associado a uma informa¸c˜ao a partir de seu r´otulo. Essa express˜ao possui a forma:

onde t pertence a um dom´ınio de contexto e label ´e um r´otulo do contexto definido pelo dom´ınio de t.

Sejatum elemento do dom´ınioTdefinido na Listagem 3.29, a express˜ao de sele¸c˜ao de dom´ınio da Listagem 3.31 tem como resultado o valor do store associado at.

s t o r e t

✝ ✆

Listagem 3.31: Exemplo de express˜ao de sele¸c˜ao de contexto

3.8.2.3 Atualiza¸c˜ao de Contexto

A express˜ao de atualiza¸c˜ao de contexto define novos valores para informa¸c˜oes de um contexto existente, criando um novo contexto. Essa express˜ao possui a forma:

t [ l a b e l1 ← exp1, l a b e l2 ← exp2, · · · , l a b e ln ← expn]

onde t´e um valor no dom´ınio de contexto T, cada labeli ´e um r´otulo do conjunto de

labels deT, e cadaexpi ´e uma express˜ao pertencente ao dom´ınio rotulado por labeli.

Seja t um elemento do dom´ınio T definido na Listagem 3.29, e s um elemento do dom´ınioS. A express˜ao da Listagem 3.32 define um novo contexto, onde um novo valor

s´e associado a store, e o environment original de t´e mantido.

t [ s t o r e <− s ]

✝ ✆

Listagem 3.32: Exemplo de express˜ao de atualiza¸c˜ao de contexto

3.8.2.4 Oclus˜ao de Contexto

A express˜ao de oclus˜ao de contexto ´e uma opera¸c˜ao sobre dois contextos,t1 e t2, cujo

objetivo ´e atualizar todas as informa¸c˜oes efˆemeras det1 a partir dos valores associados

em t2. Essa express˜ao possui a forma:

t1 ∗∗ t2

ondet1 et2 pertencem a um dom´ınio de contexto T. O resultado dessa opera¸c˜ao ´e um

novo contextot tal que para cada r´otulolabel de T, tem-se que label t ´e igual a:

• indefinido, se label t1 e label t2 forem indefinidos;

• label t1, selabel t2 for indefinido oulabel t2 corresponder a uma informa¸c˜ao

de contexto efˆemera; • label t2, caso contr´ario.

3.8. Definic¸˜ao de Contextos 55 Por exemplo, sejam t1 = T(store ← s1, env ← r1) e t2 = T(store ← s2, env ← r2) contextos do dom´ınio T definido na Listagem 3.29. O valor da express˜ao t1 ** t2

´et = T(store ← s1, env ← r2).

3.8.2.5 Padr˜ao de Contexto

O padr˜ao de contexto ´e usado em express˜oes de casamento de padr˜ao, e possui a forma:

p a t t { p a t t1 ← l a b e l1, p a t t2 ← l a b e l2, · · · , p a t tn ← l a b e ln}

onde patt ´e um padr˜ao de dom´ınio ou um padr˜ao de contexto, cadalabeli representa

um r´otulo, e cada patti ´e um padr˜ao v´alido para o dom´ınio delabeli.

3.8.3

Expans˜ao de Contexto

Em Notus contextos podem ser expandidos adicionando-se novas informa¸c˜oes a um dom´ınio de contexto existente. Assim como ocorre com as extens˜oes de vari´aveis de gram´atica e tokens, a extens˜ao de contexto ´e realizada por meio da cl´ausula extend, da seguinte forma:

extend T with l a b e l1: domain1, l a b e l2: domain2, · · · , l a b e ln: domainn

onde cadadomaini´e o dom´ınio da nova informa¸c˜ao rotulada porlabeli. Opcionalmente,

cada label pode ser marcado com as palavras-chave persistentou ephemeral.

A Listagem 3.33 estende o contexto da Listagem 3.29 adicionando informa¸c˜oes de entrada e sa´ıda, ambas efˆemeras e representadas por listas de elementos do dom´ınio V.

extend T with ephemeral i n p u t : V∗ , ephemeral output : V∗

✝ ✆

Listagem 3.33: Exemplo de expans˜ao de contexto

3.8.4

Contexto Estrutural

O contexto estrutural de uma constru¸c˜ao ´e formado pelas informa¸c˜oes pertencentes aos seus nodos ancestrais na ´arvore de sintaxe abstrata do programa. Cada n´o ancestral ´e associado `as informa¸c˜oes dispon´ıveis durante a avalia¸c˜ao desse nodo.

Dom´ınios de contexto armazenam informa¸c˜oes de contexto estrutural rotuladas por structure. Essas informa¸c˜oes de contexto s˜ao registros de aplica¸c˜oes de fun¸c˜oes, onde cada registro armazena o nome da fun¸c˜ao e os argumentos da aplica¸c˜ao. Es- sas informa¸c˜oes, armazenadas na pilha de registro de aplica¸c˜ao de fun¸c˜ao, podem ser acessadas pela express˜ao match de Notus. Essa express˜ao possui a forma:

match p with e1 i n e2

onde p ´e um padr˜ao de contexto estrutural, e e1 e e2 s˜ao express˜oes. O valor da

express˜aomatch ´e o valor dee2 se o valor de e1 for um valor de contexto te o padr˜ao

pcasar com pelo menos um registro de r´otulo structure em tna pilha de contextos.