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.