• No results found

2 Teori og bakgrunn

2.3 GIS og terrengmodellering

TLA

Da mesma forma que para a linguagem MINLA, definida no cap´ıtulo anterior, para o funcionamento adequado do mecanismo de extens˜ao, e da linguagem EXTLA de forma geral, deve ser projetado um ambiente de execuc¸˜ao compat´ıvel e capaz de rea- lizar e processar todas as construc¸˜oes sint´aticas e semˆanticas da linguagem definida. Portanto, cada um dos comandos de extens˜ao deve ser corretamente compreendido e interpretado. Nesta sec¸˜ao, apresenta-se uma breve descric¸˜ao dos efeitos de cada um dos comandos da linguagem. Tal descric¸˜ao pode ser tomada como base para a definic¸˜ao de um conjunto de primitivas e, posteriormente, da biblioteca de func¸˜oes semˆanticas e adaptativas que as implementem. Para exemplificar o uso do mecanismo de extens˜ao, a seguir ´e apresentada a definic¸˜ao de um comando do tipo “WHILE” sobre a linguagem MINLA, que cont´em apenas “IF-THEN” e “GOTO”.

Exemplo 6 Definic¸˜ao do comando “WHILE” usando a linguagem EXTLA:

DEFINE comando while: NEW comando

AS

WHILE boolexp DO comseq ENDWHILE “;”

WHERE

boolexp IS expcomp, comseq IS comando MEANING

@loop “:”

IF boolexp “=” “0” THEN GOTO @out “;”

comseq

GOTO @loop “;” @out “:”

ENDDEFINE

Em seguida, cada um dos passos para a definic¸˜ao do comando “WHILE” ´e deta-

lhado para a compreens˜ao adequada do uso da linguagem do mecanismo de extens˜ao, inspirado no trabalho realizado em (SILVA; NETO, 2005).

4.5.1

Cl´ausulas DEFINE e NEW

No exemplo, a cl´ausula “DEFINE” marca o in´ıcio da definic¸˜ao da nova extens˜ao

sint´atica. O identificador “comando while” corresponde ao n˜ao-terminal que apa- recer´a `a esquerda da regra de produc¸˜ao que descrever´a a nova construc¸˜ao sint´atica.

A cl´ausula “NEW” vem acompanhada de um n˜ao-terminal que indica a qual das

regras de produc¸˜ao existentes na gram´atica da linguagem-base ser´a associado o novo n˜ao-terminal que acompanha a cl´ausula “DEFINE”. De forma geral, suponha a defini-

c¸˜ao: ✤ ✣ ✜ ✢ DEFINE id: NEW rule ...

O identificador “id” corresponde a um novo n˜ao-terminal que est´a sendo definido e “rule” corresponde a um n˜ao-terminal presente na linguagem. Portanto, deve exis-

tir uma regra de produc¸˜ao presente na instˆancia corrente da gram´atica da linguagem, escrita na forma: ✤ ✣ ✜ ✢ ... rule = R1|R2| . . .|Rn ...

A esta regra, ser´a associado o identificador definido na cl´ausula “DEFINE”, da

seguinte forma: ✤ ✣ ✜ ✢ ... rule = R1|R2| . . .|Rn| id ...

Em nosso exemplo, as componentesR1at´eRncorrespondem `as definic¸˜oes existen-

tes (ou previamente definidas) para a regra de produc¸˜ao “rule”. As componentes “id”

e “rule” correspondem, respectivamente, ao novo n˜ao-terminal “comando while”, que est´a sendo definido, e ao n˜ao-terminal “comando”, presente na gram´atica da linguagem-base, que est´a `a esquerda da regra de produc¸˜ao, `a qual ser´a associado o novo n˜ao-terminal “comando while”.

Portanto, a nova regra de produc¸˜ao para a gram´atica de nosso exemplo ser´a: ✬ ✫ ✩ ✪ ... comando = { identificador “:” }

( LET identificador “:” “=” exparit | GOTO identificador

| READ ( identificador { “,” identificador } ) | PRINT ( exparit { “,” exparit } )

| IF expcomp THEN comando

| comando while ) . ...

4.5.2

Cl´ausulas AS e WHERE

A cl´ausula “AS” descreve a estrutura sint´atica, em notac¸˜ao de Wirth, do novo n˜ao-

terminal que est´a sendo definido, e a cl´ausula “WHERE” define as restric¸˜oes impos-

definic¸˜ao da nova sintaxe. A combinac¸˜ao da descric¸˜ao da estrutura sint´atica com as restric¸˜oes impostas corresponde `a regra que ser´a gerada e associada ao identifica- dor (n˜ao-terminal) da cl´ausula “DEFINE”. Neste caso, deve ser gerada uma regra de

produc¸˜ao na forma: ✛ ✚ ✘ ✙ ... id = wirth ...

Em nosso exemplo, “id” corresponde ao n˜ao-terminal “comando while” e wirth

corresponde `a descric¸˜ao sint´atica da cl´ausula “AS”. Portanto, al´em da regra de produc¸˜ao,

cuja modificac¸˜ao foi definida na sec¸˜ao anterior, ser´a criada a seguinte nova regra de produc¸˜ao: ✤ ✣ ✜ ✢ ...

comando while = “WHILE” expcomp “DO” comando “ENDWHILE” “;” . ...

Observe que, com a inclus˜ao desta nova regra de produc¸˜ao, novos terminais de- vem ser inseridos de forma adequada, como palavras reservadas da linguagem, no autˆomato que reconhece os tokens l´exicos da linguagem. Dessa forma, “WHILE”,

DO” e “ENDWHILE” devem ser inclu´ıdos no analisador l´exico e devidamente identi-

ficados como novas palavras reservadas da linguagem. A inclus˜ao destestokens ocorre

atrav´es da inclus˜ao de chamadas de func¸˜oes adaptativas parametrizadas que verificam a existˆencia dos tokens correspondentes e, caso n˜ao estejam definidos, provocam a

inserc¸˜ao de um novo “trecho” do autˆomato que os reconhece. Otoken “;” j´a pertence

`a linguagem e, dessa forma, n˜ao precisa ser inclu´ıdo.

4.5.3

Cl´ausula MEANING e ENDDEFINE

A cl´ausula “MEANING” introduz o significado do novo comando que est´a sendo defi-

nido. O significado tamb´em ´e expresso atrav´es de uma express˜ao na notac¸˜ao de Wirth, referenciando apenas n˜ao-terminais definidos na cl´ausula “WHERE” ou j´a presentes

na gram´atica. Se necess´ario, r´otulos auxiliares s˜ao declarados para a representac¸˜ao do significado. Isso pode ser feito atrav´es da cadeia @numero, que pode ser utili-

zado apenas em cl´ausulas “MEANING”, permitindo que o usu´ario crie identificadores

´unicos que podem ser associados a trechos de c´odigo contidos na declarac¸˜ao das ex- tens˜oes. Estes identificadores s˜ao instanciados todas as vezes em que uma extens˜ao ´e

invocada. Dessa forma, cada chamada da extens˜ao, mesmo em chamadas recursivas, gera novas instˆancias desses identificadores. A cl´ausula “ENDDEFINE” marca o final

da definic¸˜ao da nova extens˜ao sint´atica.