• Sonuç bulunamadı

C. ARAŞTIRMANIN METODU

2.3. İfk Ayetlerinin Detaylı Tefsiri

de outras, como mostrado na Figura 2.5 da Se¸c˜ao 2.2.3. Com o objetivo de alcan¸car a modularidade, mesmo diante dessas caracter´ısticas das linguagens, semˆantica mul- tidimensional utiliza constru¸c˜oes para a manipula¸c˜ao de contexto e transforma¸c˜ao de m´odulos pelas descri¸c˜oes semˆanticas de linguagens, possibilitando uma escrita incre- mental de forma que novos m´odulos podem ser escritos, iterativamente, sem implicar em altera¸c˜oes nos j´a existentes.

A principal caracter´ıstica dessa abordagem ´e permitir o uso de aspectos nas de- fini¸c˜oes da semˆantica de linguagens, por meio da defini¸c˜ao de transformadores de m´odulos (veja Se¸c˜ao 3.9), de forma a possibilitar a escrita modular de requisitos trans- versais que causam intrus˜ao e espalhamento em uma descri¸c˜ao, como discutido na Se¸c˜ao 2.4. Transformadores de m´odulos s˜ao inspirados em transformadores de mˆonadas [Liang et al., 1995] e no processo de costura de c´odigo da programa¸c˜ao orientada por as- pectos [Kiczales et al., 1997]. A diferen¸ca principal entre transformadores de mˆonadas e o de m´odulos ´e que o ´ultimo pode ser seletivamente aplicado a diferente chamadas de fun¸c˜oes, e pode ser ignorado quando necess´ario.

2.6

Conclus˜oes

Os mecanismos para modularidade e extens˜ao de especifica¸c˜oes semˆanticas em abor- dagens tradicionais, como Semˆantica Axiom´atica, Operacional e Denotacional, n˜ao s˜ao satisfat´orios para a especifica¸c˜ao de linguagens de programa¸c˜ao de grande porte. Pro- postas com mecanismos mais poderosos para esse tipo de especifica¸c˜ao s˜ao Semˆantica de A¸c˜oes, Semˆantica Mon´adica Modular, e a implementada neste trabalho, Semˆantica Multidimensional.

Semˆantica de A¸c˜oes permite a escrita de especifica¸c˜oes em semˆantica denotacional com grande facilidade de escrita e alto grau de legibilidade. No entanto, o projetista deve conhecer inteiramente o conjunto padr˜ao de a¸c˜oes primitivas e os combinadores de a¸c˜oes existentes. Al´em disso, como apontado pelos pr´oprios autores desse modelo, a necessidade de defini¸c˜ao de um novo combinador de a¸c˜ao poderia implicar na re- formula¸c˜ao de todas as leis da nota¸c˜ao de a¸c˜ao. Dessa maneira, apesar desse modelo permitir a escrita incremental de linguagens de programa¸c˜ao, o modelo em si n˜ao ´e extens´ıvel, o que pode limit´a-lo `a defini¸c˜ao de um conjunto fechado de constru¸c˜oes de linguagens de programa¸c˜ao.

A Semˆantica Mon´adica Modular permite a escrita modular de descri¸c˜oes em semˆantica denotacional, mas consideramos que a legibilidade e a facilidade de reda¸c˜ao s˜ao pre- judicadas. Entender como os transformadores de mˆonadas e suas opera¸c˜oes de lift

operam sobre equa¸c˜oes j´a existentes exige grande esfor¸co do projetista. Al´em disso, defini¸c˜oes escritas nesse modelo s˜ao dif´ıceis de ler e conseq¨uentemente de entender para uma poss´ıvel extens˜ao e/ou altera¸c˜ao.

Como apresentado na Se¸c˜ao 2.5, defini¸c˜oes em semˆantica denotacional n˜ao s˜ao ex- tens´ıveis, uma vez que pequenas mudan¸cas na linguagem podem produzir mudan¸cas espalhadas por toda a defini¸c˜ao. Notus, uma linguagem funcional de dom´ınio espe- cifico que provˆe recursos para a especifica¸c˜ao modular em semˆantica denotacional de linguagens de programa¸c˜ao, ´e apresentada neste trabalho. O objetivo da linguagem Notus ´e oferecer uma solu¸c˜ao para o grau insatisfat´orio de modularidade e extensibili- dade de especifica¸c˜oes em semˆantica denotacional. Notus ´e a linguagem utilizada para a escrita de defini¸c˜oes denotacionais seguindo o modelo de Semˆantica Multidimensi- onal apresentado na Se¸c˜ao 2.5. O cap´ıtulo seguinte apresenta as caracter´ısticas e as constru¸c˜oes existentes em Notus para a escrita de defini¸c˜oes modulares em semˆantica denotacional.

Cap´ıtulo 3

A Linguagem de Programa¸c˜ao

Notus

A linguagem Notus provˆe constru¸c˜oes para a escrita incremental modular de especi- fica¸c˜oes em semˆantica denotacional. Notus ´e uma linguagem puramente funcional com sintaxe semelhante `a da linguagem Haskell. Este cap´ıtulo apresenta as caracter´ısticas da linguagem Notus, bem como suas constru¸c˜oes e os componentes de uma especifica¸c˜ao modular em Notus.

Notus [Tirelo e Bigonha, 2006] ´e uma linguagem de dom´ınio espec´ıfico para a espe- cifica¸c˜ao modular de linguagens de programa¸c˜ao. Notus fornece suporte, na defini¸c˜ao de uma linguagem de programa¸c˜ao, para:

• divis˜ao de m´odulos de acordo com as constru¸c˜oes; • especifica¸c˜ao da constitui¸c˜ao l´exica e sint´atica;

• especifica¸c˜ao dos dom´ınios sint´aticos e da estrutura da ´arvore de sintaxe abstrata; • especifica¸c˜ao da semˆantica separada das constru¸c˜oes;

• defini¸c˜ao das regras de composi¸c˜ao das especifica¸c˜oes.

A divis˜ao dos m´odulos que comp˜oem a descri¸c˜ao formal da linguagem ´e guiada pela sua sintaxe abstrata. Cada m´odulo em Notus ´e composto por: (i) importa¸c˜oes, onde s˜ao enumeradas as dependˆencias do m´odulo; (ii) especifica¸c˜oes l´exica e sint´atica, que de- finem ou estendem os componentes l´exicos e sint´aticos de um conjunto de constru¸c˜oes; (iii) defini¸c˜oes de novos dom´ınios sint´aticos e semˆanticos; (iv) fun¸c˜oes semˆanticas.

A especifica¸c˜ao l´exica de uma linguagem em Notus ´e dada por meio de express˜oes regulares semelhantes `as utilizadas por geradores de analisadores l´exicos, Lex

[Brown et al., 1992], JLex [Berk, 2003] e Alex [Marlow, 2005a]. A sintaxe ´e especificada 27

pelo dom´ınio sint´atico, utilizando uni˜ao disjunta e produtos cartesianos para dom´ınios compostos, e pela descri¸c˜ao da gram´atica da linguagem especificada por um conjunto de regras com nota¸c˜ao semelhante `a BNF.

Como ferramenta para a descri¸c˜ao formal de linguagens de programa¸c˜ao, Notus possui como caracter´ısticas principais:

• ser uma linguagem puramente funcional lazy e apresentar sintaxe semelhante `a linguagem Haskell ;

• permitir organizar em m´odulos a especifica¸c˜ao l´exica, sint´atica e semˆantica de uma linguagem de programa¸c˜ao;

• permitir a escrita de fun¸c˜oes de ordem suoerior para a constru¸c˜ao das equa¸c˜oes que especificam a semˆantica dos constituintes da linguagem;

• permitir a defini¸c˜ao elegante de tipos e subtipos por meio da defini¸c˜ao de dom´ınios semˆanticos;

• permitir a omiss˜ao de parˆametros em equa¸c˜oes distintas de uma mesma fun¸c˜ao.

3.1

Pacotes

Os m´odulos de uma defini¸c˜ao em Notus podem ser organizados em pacotes, que s˜ao conjuntos de m´odulos. Um m´oduloM pertence a um pacote Pse:

• o cabe¸calho do m´oduloM´emodule P.M;

• o arquivo do m´odulo M.nts est´a em um diret´orio de nome P.

Pacotes podem conter pacotes, que s˜ao chamados de sub-pacotes. Por exemplo, para pacotes aninhados P1, P2, · · ·, Pn, onde Pn ´e subpacote de Pn − 1, o m´odulo M

pertence ao pacotePn se:

• o cabe¸calho do m´oduloM´emodule P1.P2.Pn.M;

• se existem os diret´orios aninhados P1, P2, · · ·,Pn;

• o arquivo M.nts est´a em um diret´orio de nome Pn.

Os nomes dos pacotes, assim como os nomes dos m´odulos, possuem a primeira letra em mai´usculo.

Identificadores declarados sem modificador de visibilidade por meio das palavras reservadas public ou private, possuem visibilidade de pacote, ou seja, s˜ao vis´ıveis

3.2. Elementos do M´odulo Principal 29