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.