.PARA- UM COMP I'LAD'OR' DA 'L I'NGUAG
EM
TJL'/'ST IMiriam A p a r e c i d a M a r q u e s
TESE SUBMETIDA AO CORPO DOCENTE DA COORDENAÇKO DOS PROGRAMAS
DE
PUS
-GRADUAÇÃG DE ENGENHARIA DA UNIVERSIDADE FEDERAL DOR I O DE J A N E I R O COMO PARTE DOS R E Q U I S I T O S
NECESSARIOS
PARA A OBTENÇÃO DO GRAU D E MESTRE EM CIENCIAS
(M, Sc.
).
A p r o v a d a p o r :
&of
.
Guilherme 6hag{s R o d r i g u e sP r o f -, N e l s o n M a c u l a n f ; i l h o I I P r o f . J o s é L u c a s M . R a n g e 1 N e t t o P r o f
.
P a u l o A u g u s t o S . V e l o s o R I O DE JANEIRO', RJ-
B R A S I L J A N E I R O DE 1 9 7 8MARQUES, MLRIAM APARECIDA
Terminal Inteligente: Análise Léxica e Geração de
código para um Compilador da Linguagem PL/STI I ~ i o de ~aneirol
1978.
X ,
157. 29,7cm(COPPE-UFRJ, M.Sc., Engenharia de Sistemas e Computação, 1978)Tese
-
Univ. Fed. Rio de Janeiro. Fac. Engenharia 1. Compiladores I. COPPE/UFRJ 11. Terminal Inteli-
gente: Análise Sintática para um Compilador da Linguagem PL/STI.iii
Ao P r o f e s s o r Guilherme Chagas R o d r i g u e s p e l a o r i e n t a ç ã o e c o n s t a n t e a p o i o p r o p o r c i o n a d o .
A
amiga Regina C é l i a d e Souza P e r e i r a p e l a c o l a - b o r a ç ã o n a d e t e r m i n a ç ã o da e s t r u t u r a da A n á l i s e L é x i c a e Gera- ç ã o de Códigos.Ao J o s é Antonio dos S a n t o s Borges (NCE) p e l a s v a - l i o s a s s u g e s t õ e s a p r e s e n t a d a s d u r a n t e a d e p u r a ç ã o do c ó d i g o o b j e
-
t o .RESUMO
E s t e t r a b a l h o c o n s t i t u i - s e da ~ n á l i s e L é x i c a e Geração d e c ó d i g o p a r a o c o m p i l a d o r PL/STI, c u j o o b j e t i v o
é
f a -c i l i t a r o d e s e n v o l v i m e n t o de S o f t w a r e b á s i c o p a r a o T e r m i n a l I n t e l i g e n t e , p r o j e t o que e s t á s e n d o r e a l i z a d o no Núcleo de Com -
p u t a ç ã o ~ l e t r ô n i c a d a U n i v e r s i d a d e F e d e r a l do R i o de J a n e i r o . O c a p í t u l o I , c o n s t a da d e s c r i ç ã o d a linguagem PL/STI, p a r a a q u a l o c o m p i l a d o r f o i p r o j e t a d o . No c a p í t u l o 1 1 , fornecemos uma i d é i a g e r a l do c o m p i l a d o r e s e u f u n c i o n a m e n t o . No c a p í t u l o 1 1 1 , descrevemos a ~ n á l i s e ~ é x i c a e o t r a t a m e n t o dado a o s e r r o s e n c o n t r a d o s d u r a n t e e s t a f a s e . Fo c a l i z a m o s também a implementação de macros i n c l u i d a n a f a s e de ~ n á l i s e L é x i c a .
No c a p í t u l o IV, descrevemos a Geração de Código. F i n a l m e n t e no c a p í t u l o V , fazemos algumas c o n s i -
ABSTRACT
This work consists of the Lexical Analysis and
Code Generation for the PL/STI Compiler. The aim of the
Compiler is to facilitate the development of basic software
for the Intelligent Terminal which is being constructed at the
~ Ú c l e o de Computação ~letrônica da Universidade Federal do Rio
de Janeiro.
Chapter I describes the target language. for the
Compiler, namely, PL/STI.
Chapter I1 gives the reader a general ideia of
the Compiler and the way it works.
The Lexical Analysis, and the handling of
errors encountered during that phase are explained in Chapter
111. A view of the implementation of macros is alço given.
The Code Generation phase is described in
Chapter IV.
Finally; Chapter V provides some comments on
P á g i n a s
. . .
INTRODUÇÃO 1
CAPITULO
I : A Linguagem PL/STI. . .
3G e n e r a l i d a d e s s o b r e a linguagem
. . .
3C o n s t i t u i n t e s b á s i c o s de um programa PL/STI
. . .
4Elementos de dados em PL/STI
. . .
5D e c l a r a ç õ e s de t i p o p a r a v a r i á v e i s
. . .
6 E x p r e s s õ e s e a t r i b u i ç õ e s em PL/STI. . .
6 1 . 5 . 1 . E x p r e s s õ e s. . .
7 1 . 5 . 1 . 1 . O p e r a d o r e s a r i t m é t i c o s. . .
7 1 . 5 . 1 . 2 . O p e r a d o r e s l ó g i c o s (ou b o o l e a n o s ) 8 1 . 5 . 1 . 3 . O p e r a d o r e s r e l a c i o n a i s (ou de com - p a r a ç ã o ). . .
9 1 . 5 . 1 . 4 . P r e c e d ê n c i a d o s o p e r a d o r e s PL/ S T I. . .
1 0 1 . 5 . 2 . A t r i b u i ç õ e s .. . .
11 Comando d e d e c l a r a ç ã o. . .
1 2 1 . 6 . 1 . v a r i á v e i s s u b s c r i t a s. . .
1 3 1 . 6 . 2 . O a t r i b u t o I N I T I A L. . .
1 4 1 . 6 . 3 . A d e c l a r a ç ã o DATA. . .
1 5 1 . 6 . 4 . E l e m e n t o s de d e c l a r a ç ã o. . .
1 5. . .
P o n t e i r o s e r e f e r ê n c i a s i n d i r e t a s 1 6. . .
1 . 7 . 1 . O o p e r a d o r p o n t o 1 7v i i P á g i n a s 1 . 8 . Comandos r o t u l a d o s e comandos d e d e s v i o s
. . . .
19. . .
1 . 8 . 1 . R ó t u l o s s i m b ó l i c o s 19 1 . 8 . 2 . R Ó ~ U ~ O S n u m é r i c o s. . .
1 9. . .
1 . 8 . 3 . Comandos d e d e s v i o 20 1 . 9 . O comando I F. . .
2 1 1 . 1 0 . 0 s comandos c o m p o s t o s. . .
2 2 1 . 1 0 . 1 . O comando composto DO. . .
231 . 1 0 . 2 . O comando composto DO WHILE
. . .
231 . 1 0 . 3 . O c'omando composto DO i t e r a t i v o
. . .
24 1 . 1 0 . 4 . O comando c o m p o s t o DO CASE. . .
26 1.11. R e s t r i ç ã o ao u s o d e um comando I F. . .
2 7. . .
1 . 1 2 . R o t i n a s 28 1 . 1 2 . 1 . D e c l a r a ç õ e s d e r o t i n a s. . .
29. . .
1 . 1 2 . 2 . O c o m a n d o R E T U R N 30 1 . 1 2 . 3 . Exemplos d e d e c l a r a ç õ e s d e r o t i n a s. . .
3 1 1 . 1 2 . 4 . R e s t r i ç õ e s q u a n t o a o u s o d e r o t i n a s. . .
32 1 . 1 2 . 5 . Chamadas d e r o t i n a s. . .
32 1 . 1 2 . 6 . Exemplos d e chamadas d e r o t i n a s. . . .
33 1 . 1 3 . 0 s c o m a n d o s H A L T e E O F. . .
33 1 . 1 3 . 1 . O comando HALT. . .
33 1 . 1 3 . 2 . O comando EOF. . .
34 1 . 1 4 . Macros em tempo d e c o m p i l a ç ã o. . .
34 1 . 1 4 . 1 . A d e c l a r a ç ã o LITERALLY. . .
34 1 . 1 4 . 2 . Exemplo d e u s o d e m a c r o s. . .
35 1 . 1 5 . E s t r u t u r a s d e b l o c o s e a l c a n c e. . .
36 1 . 1 5 . 1 . Como o a l c a n c eé
d e f i n i d o. . .
36 1 . 1 5 . 2 . A l c a n c e d e r ó t u l o s. . .
37 1 . 1 5 . 3 . D e c l a s a ç ã o de r ó t u l o s. . .
37v i i i P á g i n a s 1 . 1 5 . 4 . Uso d a e s t r u t u r a d e b l o c o s
. . .
4 1 1 . 1 6 . F u n ç Õ e s e m b u t i d a s. . .
4 1 1 . 1 6 . 1 . F u n ç õ e s LENGTH e LAST. . .
41 1 . 1 6 . 2 . As f u n ç õ e s LOW. H I G H e DOUBLE. . .
42 1 . 1 6 . 3 . F u n ç õ e s BYTE d e r o t a ç ã o. . .
43 1 . 1 6 . 4 . F u n ç õ e s d e r o t a ç ã o do CARRY. . .
44 1 . 1 6 . 5 . F u n ç õ e s d e S h i f t - l ó g i c o. . .
451 . 1 6 . 6 . F u n ç õ e s CARRY.ZER0. SIGN e PARITY
. . . .
461 . 1 7 . E n t r a d a e s a í d a
. . .
46. . .
1 . 1 7 . 1 . INPUT 47 1 . 1 7 . 2 . O U T P U T. . .
48 CAPÍTULO I1 . O c o m p i l a d o r PL/STI. . .
49 2 . 1 . D e s c r i ç ã o g e r a l. . .
49 2 . 2 . As f a s e s do c o m p i l a d o r PL/STI. . .
50 2 . 2 . 1 . A n á l i s e L é x i c a. . .
50 2 . 2 . 2 . A n á l i s e s i n t á t i c a. . .
5 1 2 . 2 . 3 . P r e p a r a ç ã o p a r a G e r a ç ã o d e C ó d i g o.
5 1. . .
2 . 2 . 4 . ~ e r a ç ã o d e c ó d i g o 52 2 . 3 . O p r o c e s s o d e c o m p i l a ç ã o d a l i n g u a g e m PL/STI. .
52 3 . 1 . I n t r o d u ç ã o. . .
54 3 . 2 . V i s ã o G e r a l do p r o c e d i m e n t o p a r a a A n á l i s e L é x i - c a. . .
55 3 . 2 . 1 . D e s c r i ç ã o d a s p o s s í v e i s s a í d a s d a ~ n á l i s e. . .
~ é x i c a 563 . 2 . 2 . D e s c r i ç ã o d a e s t r u t u r a da A n á l i s e L é x i - c a
. . .
5 7 3 . 2 . 2 . 1 . A l g o r i t m o p a r a a A n á l i s e . L é x i c a de um programa PL/STI. . .
59 3 . 3 . P r o c e s s a m e n t o de Macros. . .
64 3 . 3 . 1 . D e s c r i ç ã o G e r a l. . .
64 3 . 3 . 2 . T r a t a m e n t o p a r a d e c l a r a ç ã o de macros. . .
66 3 . 3 . 3 . T r a t a m e n t o p a r a chamadas de macros. . . .
68 3 . 4 . Tramento de e r r o s. . .
70 CAPÍTULO I V.
A Geração d e Código. . .
4.
1. I n t r o d u ç ã o. . .
4 . 2 . Método usado p a r a a Geração de Código. . .
4 . 3 . V i s ã o G e r a l do p r o c e d i m e n t o p a r a a Geração deC 6 -
d i g o. . .
4 . 4 . E s t r u t u r a do c ó d i g o o b j e t o g e r a d o. . .
4 . 5 . O r g a n i z a ç ã o do c ó d i g o o b j e t o na memória. . .
. 4 . 5 . 1 . Alocação de memória p a r a v a r i á v e i s. . . .
4 . 5 . 2 . I n i c i a l i z a ç ã o de v a r i á v e i s . . . O . . 4 . 5 . 3 . A l g o r i t m o d e c o m p i l a ç ã o p a r a um comando de d e c l a r a ç ã o. . .
4 . 6 . Geração de Código de uma e x p r e s s ã o PL/STI. . . .
4 . 6 . 1 . D e s c r i ç ã o G e r a l. . .
4 . 6 . 2 . D e s c r i ç ã o do Método usado p a r a g e r a r c ó d i -go d e uma e x p r e s s ã o PL/STI
. . .
4 . 6 . 3 . V i s ã o G e r a l da Implementação da p i l h a deP á g i n a s 4 . 6 . 4 . A l o c a ç ã o d e Memória p a r a v a r i á v e i s tempo-
. . .
r á r i a s 4 . 6 . 5 . T r a t a m e n t o p a r a c o n s t a n t e s. . .
4 . 6 . 6 . T r a t a m e n t o p a r a o s p o s s ~ v e i s t i p o s d e o p e-
. . .
r a n d o s de uma e x p r e s s ã o PL/STI 4 . 6 . 7 . A l g o r i t m o d e Redução na p i l h a d e e x p r e s -. . .
s õ e s 4 . 7 . T r a t a m e n t o d e R e f e r ê n c i a s F u t u r a s. . .
. . .
4 . 8 . G e r a ç ã o d e C ó d i g o p a r a o comando I F4 . 9 . G e r a ç ã o d e Código p a r a uma r o t i n a PL/STI
. . . .
. . .
4 . 9 . 2 . D e c l a r a ç ã o de R o t i n a s. . .
4 . 9 . 3 . O c o r p o de uma r o t i n a. . .
4 . 9 . 4 . Chamada d e r o t i n a s4.10. Geração de Código para os Comandos Compostos
. . .
4 . 1 0 . 1 . G e x a ç ã ~ d e C ó d i g o p a r a o comando compostoDO-WHILE
. . .
1164 . 1 0 . 2 . G e r a ç ã o d e Código p a r a o comando composto D o i t e r a t i v o
. . .
4 . 1 0 . 3 . G e r a ç ã o d e Código p a r a o comando composto. . .
DO -CASE 4 . 1 0 . 4 . G e r a ç ã o d e C ó d i g o p a r a o comando composto DO. . .
1 2 3. . .
4 . 1 1 . T r a t a m e n t o p a r a r ó t u l o s 1 2 3 4 . 1 2 . G e r a ç ã o d e Código p a r a comandos d e d e s v i o. . .
124 4 . 1 3 . G e r a ç ã o d e Código p a r a comando d e a t r i b u i ç ã o.
.
126 CAPÍTULO V : ~ o n c l u s õ e s. . .
1 2 8APENDICE
A-
A ~ramatica da Linguagem PL/STI...
130APENDICE
B-
Lista dos Caracteres Especiais...
140APENDICE
C-
Lista das Palavras Reservadas e Nomesdas Funções Internas
...
143APENDICE
D-
Tabelas Verdade para os Operadores Boo-
leanos
...
145APENDICE
E-
Diagrama de Estados para a AnáliseLé-
xica
...
147APENDICE
F
-
Programa exemplo com erros l6xicos...
15O
INTRODUCÃO
E s t á sendo d e s e n v o l v i d o no Núcleo d e Computa- ç ã o E l e t r ô n i c a d a U.F . R . J . , o p r o j e t o d e c o n s t r u ç ã o do Hardware e S o f t w a r e n e c e s s á r i o s a o f u n c i o n a m e n t o d e um T e r - m i n a l I n t e l i g e n t e (T. I . ) , no s e n t i d o d e t o r n á - l o o p e r a c i o - n a 1
.
Como o d e s e n v o l v i m e n t o d e S o f t w a r e p a r a um t e r m i n a l d e s s e t i p o não é cômodo no p r ó p r i o t e r m i n a l , f o i d e - s e n v o l v i d o no Burroughs/ 67 0 0 , o S i s t e m a O p e r a c i o n a l de Simu- l a ç ã o (S.O.S.) p a r a o T . I . , c o n s t i t u í d o b a s i c a m e n t e d e um S i m u l a d o r , um montador e um d e p u r a d o r no q u a l e s t á s e n d o d e - s e n v o l v i d o t o d o o s o f t w a r e b á s i c o p a r a o mesmo. No e n t a n t o , e s t e s o f t w a r e b á s i c o tem que s e r todo programado em l i n g u a - gem s i m b ó l i c a que p e l a s s u a s p r ó p r i a s c a r a c t e r í s t i c a s , a c a r - r e t a uma grande p e r d a d e tempo na t a r e f a de programação.aí
e n t ã o s u r g i u a n e c e s s i d a d e de s e t e r uma linguagem d e a l t o n í v e l que p e r m i t a a o programador s e c o n c e n t r a r m a i s no s e u problema e menos na t a r e f a d e p r o g r a m a r , do que é p o s s í v e l com linguagem s i m b ó l i c a .F o i e s c o l h i d o p a r a o T . I . , uma CPU INTEL/8008. V e r i f i c a m o s que e x i s t e uma linguagem t i p o PL/1, p r ó p r i a p a - r a m i c r o c o m p u t a d o r e s com CPU d e s s e t i p o . Resolvemos e n t ã o d e s e n v o l v e r um c o m p i l a d o r p a r a uma linguagem com b a s e n e s s a
j á
e x i s t e n t e , a q u a l chamamos PL/STI, c u j o o b j e t i v oé
f a c i l i-
t a r a t a r e f a d e d e s e n v o l v i m e n t o d e s o f t w a r e p a r a o T . I ..
Por s e t r a t a r de um p r o j e t o muito e x t e n s o , f i -
cou e s t a b e l e c i d o que o compilador PL/STI s e r i a d e s e n v o l v i d o por duas p e s s o a s .
E s t e t r a b a l h o c o n s i s t e da ~ n á l . i s e Léxica e Geração de Código p a r a o compilador PL/STI. A A n ã l i s e S i n t á
-
t i c a f o i d e s e n v o l v i d a p e l a p r o f e s s o r a Regina C é l i a de S. Pe- r e i r a em sua t e s e de m e s t r a d o , sob o t í t u l o "Terminal I n t e l i -g e n t e : A n á l i s e S i n t á t i c a p a r a um compilador da linguagem PL/ STI".
A d e s c r i ç ã o da linguagem PL/STI c o n s t a dos d o i s t r a b a l h o s por t r a t a r - s e de p a r t e comum, n e c e s s á r i a p a r a a compreensão de ambos.
No d e c o r r e r d e s t e t r a b a l h o s e r ã o f e i t a s r e f e - r ê n c i a s
2
A n á l i s e S i n t á t i c a , à Tabela de ~ h b o l o s e a o T r a t a -mento d e E r r o s em um programa PL/STI. Os d o i s Ú l t i m o s i t e n s , embora sejam u t i l i z a d o s por t o d a s a s f a s e s de compilação, en -
contram-se d e s c r i t o s a p e n a s na t e s e s o b r e a A n á l i s e S i n t á t i - c a . Neste t r a b a l h o s e r ã o u t i l i z a d a s a s s e g u i n t e s a b r e v i a ç õ e s : T.S.
-
Tabela de SImbolos A . L .-
A n á l i s e Léxica A.S.-
A n á l i s e S i n t á t i c a G . C .-
Geração de CódigoA LINGUAGEM PL/STI
1.1. G e n e r a l i d a d e s s o b r e a l i n m a ~ e m :
A linguagem PL/STI tem como b a s e a 1 inguagem PL/M da INTEL, com r e s t r i ç õ e s que s e f i z e r a m n e c e s s á r i a s .
g
uma linguagem e s t r u t u r a d a , s e m e l h a n t e ao P L / l , o r i e n t a d a p a r a o s microcomputadores com CPU t i p o 8008 ou 8080, onde uma p a l a - v r a de memória
6
r e p r e s e n t a d a em 8 b i t s e uma p a l a v r a d u p l a em16 b i t s . Desse modo PL/STI manuseia d o i s t i p o s b á s i c o s d e da- dos: BYTE e ADDRESS. Uma v a r i á v e l ou c o n s t a n t e BYTE
6
r e p r e - s e n t a d a em 8 b i t s ; uma v a r i á v e l ou c o n s t a n t e ADDRESSé
r e p r e - s e n t a d a em 16 b i t s . PL/STI tem a c e s s o a o s i n d i c a d o r e s d e con- d i ç ã o ( b i t s que r e p r e s e n t a m o e s t a d o da máquina d e p o i s que u- ma operaçãoé
e f e t u a d a ) , a t r a v é s de f u n ç õ e s i n t e r n a s ao com- p i l a d o r e que o programador pode r e f e r e n c i a r p e l o nome ( v e r s e ç ã o 1 . 1 6 . 6 ) . A linguagem a p r e s e n t a a i n d a o u t r a s f a c i l i d a - d e s como macros em tempo de c o m p i l a ç ã o , que c o n s i s t e na s u b s t i -t u i ç ã o a u t o m á t i c a d e t e x t o s ( v e r s e ç ã o 1 . 1 4 ) e f u n ç õ e s i n t e r -
n a s que fazem i n s t r u ç õ e s d e máquina como p o r exemplo d e s l o c a - mentos d e b i t s ou r o t a ç ã o de b i t s a t r a v é s do acumulador ( v e r s e ç ã o 1 . 1 6 ) .
C o n s t i t u i n t e s b á s i c o s d e um programa PL/STI Programas em PL/STI s ã o e s c r i t o s em f o r m a t o l i - v r e , i s t o é , e s p a ç o s podem s e r i n s e r i d o s l i v r e m e n t e onde um c a - r a c t e r b r a n c o é p e r m i t i d o . O c o n j u n t o d o s c a r a c t e r e s r e c o n h e c i d o s em PL/ S T I é c o n s t i t u i d o d e : a ) C a r a c t e r e s a l f a b é t i c o s :
ABCDEFGHIJKLMNOPQRSTUVWXYZ
b) C a r a c t e r e s n u m é r i c o s : c ) C a r a c t e r e s e s p e c i a i s C a r a c t e r e s e s p e c i a i s e s u a s combinações tem s i g-
n i f i c a d o e s p e c i a l em um programa PL/STI, como m o s t r a d o no Apên -dite B . O c o n j u n t o d e c a r a c t e r e s a l f a b é t i c o s e n u m é r i c o s pode s e r chamado d e c o n j u n t o d e c a r a c t e r e s a l f a n u m é r i c o s .
O s i d e n t i f i c a d o r e s em PL/STI, podem t e r a t é 3 0 c a r a c t e r e s a l f a n u m é r i c o s , onde o p r i m e i r o d o s q u a i s
é
o b r i g a t 6 -r i a m e n t e a l f a b é t i c o . 0 s nomes d e f u n ç õ e s i n t e r n a s e a s p a l a - v r a s r e s e r v a d a s d a linguagem não podem s e r d e c l a r a d a s como no- mes de v a r i á v e i s ou d e r o t i n a s p e l o programador e s e e n c o n t r a m no Apêndice C .
S i n a i s d e c i f r ã o podem s e r u s a d o s em q u a l q u e r l u g a r do p r o g r a m a , p o i s o c o m p i l a d o r o s i g n o r a . Por exemplo: INPUT$COUNT e INPUTCOUNT s ã o p a r a o c o m p i l a d o r o mesmo i d e n t i f i c a d o r e n e s t e c a s o o s i n a l d e c i f r ã o
6
u s a d o p a r a f a c i l i t a r a l e i t u r a .C a d e i a s d e c a r a c t e r e s em PL/STI s ã o r e p r e s e n t a
-
d a s e n t r e a p ó s t r o f o s . P a r a i n c l u i r um a p ó s t r o f o d e n t r o d e u - ma c a d e i a , b a s t a e s c r e v ê - l o como a p ó s t r o f o s d u p l o s . Por exem-
p l o : A c a d e i a" '
X Y ' contém o s c a r a c t e r e s ' X Y . O c o m p i l a d o r r e p r e s e n t a c a d e i a s d e c a r a c t e r e s p e l a r e p r e s e n t a ç ã o ASCII. A linguagem PL/STI p e r m i t e o u s o d e c o m e n t á r i - o s , que s ã o s e q u ê n c i a s d e c a r a c t e r e s d e l i m i t a d o sà
e s q u e r d a p o r/ *
e a d i r e i t a p o r* / .
São t o t a l m e n t e i g n o r a d o s p e l o com-
p i l a d o r e podem a p a r e c e r em q u a l q u e r l u g a r que um c a r a c t e r b r a n c o é p e r m i t i d o , com e x c e ç ã o d e que não podem a p a r e c e r d e n-
t r o d e uma c a d e i a d e c a r a c t e r e s .1 . 3 .
-
Elementos d e d a d o s em PL/STIElementos d e d a d o s em PL/STI s ã o v a r i á v e i s ou c o n s t a n t e s . Uma c o n s t a n t e é um número ou uma c a d e i a d e c a r a c -
t e r e s . C o n s t a n t e s n u m é r i c a s podem s e r números b i n á r i o s , o c - t a i s , d e c i m a i s ou h e x a d e c i m a i s . A b a s e d e uma c o n s t a n t e b i n á
r i a , o c t a l ou hexadecimal é r e p r e s e n t a d a r e s p e c t i v a m e n t e , pe- l a s l e t r a s B , O ou H s e g u i n d o - a . O p r i m e i r o c a r a c t e r d e um nÚ -
mero hexadecimal deve s e r um d í g i t o numérico p a r a e v i t a r confu -
s ã o com um i d e n t i f i c a d o r , um z e r o no i n í c i o é s u f i c i e n t e . Cons -
t a n t e s numéricas s ã o r e p r e s e n t a d a s em 16 b i t s . A s c o n s t a n t e s d e c i m a i s não n e c e s s i t a m de l e t r a alguma s e g u i n d o - a s . Exemplo:
C o n s t a n t e b i n á r i a
-
1 1 0 1 1 0 0 1 B C o n s t a n t e o c t a l-
3310 C o n s t a n t e hexadecimal-
@ D 9 H C o n s t a n t e decimal-
2 1 7 Todas a s c o n s t a n t e s acima s ã o e q u i v a l e n t e s . 1 . 4 . D e c l a r a ç õ e s de t i p o p a r a v a r i á v e i s Em um programa em P L / S T I , t o d a v a r i á v e l deve s e r d e c l a r a d a a n t e s do seu aparecimento em q u a l q u e r comando. E l a s são v a r i á v e i s s i m p l e s t i p o BYTE ou ADDRESS, ou v a r i á - v e i s ~ n i d i m e ~ s i o n a d a s ( v e t o r e s ) . A d e c l a r a ç ã o de uma v a r i á - v e l d e f i n e o s e u t i p o , dimensão s e f o r o c a s o e dá a i n d a ou- t r a s informações s o b r e e l a . Mais a d i a n t e i s t o s e r á v i s t o com d e t a l h e s .Uma e x p r e s s ã o PL/STI, c o n s i s t e d e e l e m e n t o s b á -
s i c o s d e d a d o s , combinados p o r meio d e o p e r a d o r e s l ó g i c o s , a - r i t m é t i c o s ou r e l a c i o n a i s , d e a c o r d o com a n o t a ç ã o a l g é b r i c a s i m p l e s . Todos o s o p e r a d o r e s , e x c e t o menos u n á r i o e o NOT, tomam 2 o p e r a n d o s d o t i p o BYTE ou ADDRESS e a o p e r a ç ã o é f e i - t a s u p o n d o - s e q u e o s o p e r a n d o s s ã o i n t e i r o s b i n á r i o s , sem s i - n a l . S e um d o s o p e r a n d o s é d o t i p o ADDRESS e o ou- t r o d o t i p o BYTE, e s t e s e r á e x t e n d i d o p a r a ADDRESS, c o m p l e t a n - d o - s e o s 8 b i t s d e m a i s a l t a ordem com z e r o s e a o p e r a ç ã o s e -
r á
r e a l i z a d a em 1 6 b i t s , f o r n e c e n d o como r e s u l t a d o um v a l o r ADDRESS, e x c e t o n o c a s o d e o p e r a d o r e s r e l a c i o n a i s , q u e mesmo f a z e n d o o p e r a ç õ e s em 1 6 b i t s , f o r n e c e m como r e s u l t a d o um v a - l o r BYTE. 1 . 5 . 1 . 1 . O p e r a d o r e s a r i t m é t i c o s 0 s o p e r a d o r e s a r i t m é t i c o s s ã o : + , - , * , / , M O D . O s o p e r a d o r e s + e-
r e a l i z a m r e s p e c t i v a m e n t e a d i ç ã o e s u b t r a ç ã o e n t r e o s s e u s o p e r a n d o s . O s o p e r a d o r e s*
e/
f a z e m r e s p e c t i - v a m e n t e m u l t i p l i c a ç ã o e d i v i s ã o e n t r e d o i s o p e r a n d o s e o r e - s u l t a d o6
s e m p r e t i p o ADDRESS. No c a s o d e o c o r r e r e s t o u r o n ao p e r a ç ã o d e m u l t i p l i c a ç ã o . , o r e s u l t a d o é i n d e f i n i d o . O o p e r a - d o r d e d i v i s ã o sempre t r u n c a o r e s u l t a d o p a r a um v a l o r i n t e i r o e no c a s o d e d i v i s ã o p o r z e r o , o. r e s u l t a d o é i n d e f i n i d o . ( A s i t u a ç ã o d e h a r d w a r e do 8 0 0 8 p a r a o i n d i c a d o r CARRY, n e s t e ca- s o , é i n d e f i n i d o ) . O o p e r a d o r menos u n á r i o também é d e f i n i d o em PL/STI. Seu e f e i t o é t a l que ( -A ) é e q u i v a l e n t e a (
fl -
A ) . A s s i m -1 p o r exemplo, é e q u i v a l e n t e afl
-
1 , r e s u l t a n d o .em um v a l o r BYTE i g u a l2
255. MOD r e a l i z a d i v i s ã o e n t r e s e u s o p e r a n -d o s , d e v o l v e n d o como r e s u l t a d o d e o p e r a ç ã o o r e s t o d a d i v i - s ã o .
A s . o p e r a ç Õ e s d e a d i ç ã o e s u b t r a ç ã o a f e t a m o i n d i c a d o r CARRY, que s e r á l i g a d o , ( CARRY = 1 ) , no c a s o d o s ope -
r a n d o s ocuparem ambos 1 BYTE ou 2 BYTES e o r e s u l t a d o não s e a j u s t a r em 1 ou 2 BYTES, r e s p e c t i v a m e n t e .
Por exemplo :
CARRY = 1 CARRY = 1
~á 4 o p e r a d o r e s b o o l e a n o s em PL/STI que s ã o : NOT, AND, OR e XOR, c o r r e s p o n d e n d o a n e g a ç ã o , e l ó g i c o , ou 1 Ó - g i c o e ou e x c l u s i v o , r e s p e c t i v a m e n t e . NOT
6
um o p e r a d o r uná- r i o , tomado a p e n a s um o p e r a n d o . O r e s t a n t e d o s o p e r a d o r e s r e a - l i z a m o p e r a ç õ e s b i t a b i t e n t r e o s s e u s o p e r a n d o s , segundo a d e f i n i ç ã o de A l g e b r a b o o l e a n a p a r a c a d a um d e l e s . No Apêndice D, e s t á a t a b e l a v e r d a d e d e t o d o s o s o p e r a d o r e s l ó g i c o s . 1 . 5 . 1 . 3 . O p e r a d o r e s r e l a c i o n a i s ( ou d e comparação ) 0 s o p e r a d o r e s r e l a c i o n a i s s ã o u s a d o s em compara - ç õ e s e s ã o : menor que > m a i o r que <= menor ou i g u a l >= m a i o r ou i g u a l <> não i g u a l = i g u a l Uma o p e r a ç ã o6
d i t a v e r d a d e i r a , s e a r e l a ç ã o e s p e c i f i c a d a e n t r e o s s e u s o p e r a n d o s s e v e r i f i c a e n e s t e c a s o f o r n e c e como r e s u l t a d o um v a l o r d e gFFH e a o p e r a ç ã o d e compa- A r a ç ã o6
d i t a v e r d a d e i r a . S e , no e n t a n t o , a comparação n ã o e v e r i f i c a d a , é f o r n e c i d o como r e s u l t a d o um v a l o r d e flflH e a ope -r a ç ã o é d i t a FALSA. porém quando o r e s u l t a d o d e uma e x p r e s s ã o com o p e r a d o r e s r e l a c i o n a l s
é
a v a l i a d a p a r a v e r i f i c a ç ã o d a s con -d i ç õ e s VERDADEIRA OU FALSA, a p e n a s o Último b i t do r e s u l t a d o é
t e s t a d o , s e f o r 1 ( um ) a e x p r e s s ã o é d i t a VERDADEIRA, s e f o r pl ( zer.0 ) a e x p r e s s ã o
é
d i t a FALSA.Exemplo :
6 > 4 r e s u l t a 0 0 0 0 0 0 0 0 B ; 5 > 3 r e s u l t a 1 1 1 1 1 1 1 1 B Qualquer e x p r e s s ã o a r i t m é t i c a , mesmo a s que não contém o p e r a d o r e s r e l a c i o n a i s , podem t e r v a l o r v e r d a d e i r o ou f a l s o , v i s t o que somente o Ú l t i m o b i t do r e s u l t a d o é t e s t a d o p a r a v e r i f i c a ç ã o d e s s a s c o n d i ç õ e s . I s s o
é
u s a d o , p o r exemplo, no c a s o d e um comando I F ( v e j a s e ç ã o 1 . 9 . ).
1 . 5 . 1 . 4 . - P r e c e d ê n c i a - - -d o s o p e r a d o r e s PL/STI
0 s o p e r a d o r e s PL/STI
têm
uma p r e c e d ê n c i a que d e t e r m i n a a m a n e i r a como o p e r a d o r e s e o p e r a n d o s e s t ã o a g r u p a - d o s . Os o p e r a n d o s s ã o l i g a d o s a o s o p e r a d o r e s a d j a c e n t e s d e maior p r e c e d e n c i a , ou d a e s q u e r d a p a r a a d i r e i t a em c a s o d e em - p a t e . Os o p e r a d o r e s v á l i d o s em PL/STI s ã o l i s t a d o s a s e g u i r , d a mais a l t a p r e c e d ê n c i a p a r a a m a i s b a i x a , e n t e n d e n d o - s e que o s d e mesma p r e c e d ê n c i a s ã o l i s t a d o s na mesma l i n h a :MENOS
UNARIO
*
/
MOD < < = < > = > NOT AND OR XORparênteses são usados para sobrepor a precedên-
cia normal. Assim a expressão (
A+B )*C
fará a soma de A eB
ser multiplicada por
C.
Atribuições
Comandos de atribuições em PL/STI tem a forma:
A
expressãoé
avaliada e o resultadoé
armazena-
do na variável a esquerda do sinal de igual. A precisão de-clarada para a VARIhVEL afeta a operação de armazenamento: se
a
a variável
6.
declarada BYTE e o resultado da expressão e ADDRESS, o byte de mais alta ordemé
omitido no armazenamento. Neste casoé
dada uma advertência, para que o programador veri -fique se isso altera os resultados do seu programa. Da mesma
e x p r e s s ã o é BYTE, o b y t e de mais a l t a ordem é p r e e n c h i d o com z e r o s . A s v e z e s , é n e c e s s á r i o g u a r d a r o r e s u l t a d o de uma ex- p r e s s ã o em d i v e r s a s v a r i á v e i s , i s t o é p o s s í v e l em P L / S T I , l i s - t a n d o - s e t o d a s e l a s s e p a r a d a s por v:rgulas. Por exemplo : Uma forma e s p e c i a l d e a t r i b u i ç ã o é u s a d a d e n t r o de e x p r e s s õ e s . E s s a a t r i b u i ç ã o e m b u t i d a , tem a forma: ( VARI~VEL: = EXPRESSÃO )
e pode a p a r e c e r em q u a l q u e r l u g a r que uma e x p r e s s ã o é p e r m i t i
-
d a . Por exemplo: A + ( B : = c + D )-
( E : = F / G ) e o mesmo que: A Única d i f e r e n ç a é o armazenamento de-
C + D em-
B e-
F/G em - E.
E s s e s r e s u l t a d o s p a r c i a i s podem s e r u s a - dos mais t a r d e no programa, sem c a l c u l á - l o s novamente.É d e s a c o n s e l h á v e l o u s o de uma a t r i b u i ç ã o em uma v a r i á v e l que a p a r e ç a em o u t r a p a r t e da e x p r e s s ã o .
O o b j e t i v o d e um comando d e d e c l a r a ç ã o
é
i n t r o-
d u z i r alguma e n t i d a d e c o m p u t a c i o n a l ( i s t o é , r ó t u l o s , r o t i - n a s ou e l e m e n t o s d e d a d o s ) , d a r a e l a um nome e d e s c r e v e r a 1-
guns d e s e u s a t r i b u t o s . D e c l a r a ç ã o d e r o t i n a s s e r á v i s t a na s e ç ã o 1 . 1 2 . 1 . A forma mais s i m p l e s d e um comando d e d e c l a r a -ç ã o é : DECLARE i d e n t i f i c a d o r a t r i b u t o 1 , a t r i b u t o 2 ,
...;
onde o s a t r i b u t o s s ã o p o r exemplo: t i p o , d i m e n s ã o , v a l o - r e s i n i c i a i s , e t c . . . S e j a p o r exemplo a d e c l a r a ç ã o d e um v e t o r : DECLARE XY ( 100 ) BYTE;onde XY é o nome, ( 1 0 0 ) a dimensão a t r i b u i d a e BYTE o t i p o d e v a r i á v e l . E x i s t e m r e g r a s s i n t á t i c a s que governam a ordem d o s a t r i b u t o s . Todas e s s a s r e g r a s s e encontram no Apêndice A .
1 . 6 . 1 . v a r i á v e i s s u b s c r i t a s
A s
v e z e s6
n e c e s s á r i o r e f e r e n c i a r c a d a elemen- t o d e um v e t o r p e l o s e u nome. No exemplo acima s ã o d e c l a r a - d o s 1 0 0 e l e m e n t o s d e d a d o s do t i p o BYTE, com nomesxy(fl> ,
XY (1),
XY (2),
a t é XY ( 9 9 ) . Daí e n t ã o , o s e g u i n t e comando de a t r i b u i ç ã o é v á l i d o : XY (1) = XY ( 2 ) +XY
( 3 ) ; onde o s h d i c e s ou s u b s c r i t o s podem s e r q u a l q u e r e x p r e s s ã o v á l i d a em P L / S T I .Uma v a r i á v e l s u b s c r i t a pode a p a r e c e r em q u a l - q u e r l u g a r onde uma v á r i a v e l é p e r m i t i d a . 1 . 6 . 2 . O a t r i b u t o INITIAL Dentro de um comando de d e c l a r a ç ã o , a s v a r i á - v e i s podem s e r i n i c i a l i z a d a s , u s a n d o - s e o a t r i b u t o INITIAL,que tem a forma: INITIAL ( l i s t a de c o n s t a n t e s ) onde a l i s t a d e c o n s t a n t e s é uma s e q u ê n c i a de c o n s t a n t e s , s e p a r a d a s por v i r g u l a s . A a l o c a ç ã o de memória é f e i t a como s e e l e não e s t i v e s s e p r e s e n t e na d e c l a r a ç ã o .
Exemplos de d e c l a r a ç õ e s v á l i d a s , usando o a t r i - b u t o INITIAL.
DECLARE X BYTE INITIAL (10) ;
DECLARE Y(10) BYTE INITIAL ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 0 ) ; DECLARE Z (100) BYTE INITIAL ( ' SHORT'
, '
ST',
BFH) ; DECLARE (Q,R,S) (10) BYTE INITIAL ( 8 , 1 , 2 ) ;h
Última d e c l a r a ç ã o c a b e um c o m e n t á r i o , foram de-
c l a r a d o s 3 v e t o r e s cada um dos q u a i s com 1 0 p o s i ç õ e s , onde a Q(B)
é
a t r i b u i d o o v a l o r i n i c i a lfl,
à
R(B) o v a l o r 1 eà
S(B) o v a l o r 2 .1 . 6 . 3 . A d e c l a r a ç ã o DATA
As v e z e s
é
n e c e s s á r i o s e t e r um v e t o r com v a l o - r e s i n i c i a i s que não trocam d u r a n t e a execução do programa. O compilador PL/STI armazena e s s e v e t o r p a r t i c u l a r j u n t o com o código do programa, ao i n v é s de f a z ê - l o na p a r t e da memória r e -s e r v a d a p a r a guardar v a r i á v e i s . A linguagem PL/STI dá e s s e t i -
po de c o n t r o l e de a l o c a ç ã o de memória, a t r a v é s da d e c l a r a ç ã o DATA. Sua forma g e r a l é : DECLARE i d e n t i f i c a d o r DATA ( l i s t a de c o n s t a n - t e s ) ; o e f e i t o da d e c l a r a ç ã o DATA
6
.semelhante ao de um v e t o r d e c l a -rado com a t r i b u t o INITIAL, com algumas d i f e r e n ç a s na forma. Nenhuma d e c l a r a ç ã o de t i p o de dado deve a p a r e c e r na d e c l a r a - ção. O t i p o BYTE e s t á i m p l í c i t o . ~ambém não deve a p a r e c e r ne -
nhuma dimensão, e s p e c i f i c a n d o o tamanho do v e t o r ; i s t o é dado i m p l í c i t a m e n t e p e l o comprimento da l i s t a de c o n s t a n t e s .
V e t o r e s d e c l a r a d o s com o DATA são usados como q u a l q u e r v e t o r t i p o BYTE, com a exceção de que e l e s não podem nunca a p a r e c e r do l a d o esquerdo de um operador de a t r i b u i ç ã o .
Não é n e c e s s á r i o s e t e r um comando s e p a r a d o p a - r a c a d a d e c l a r a ç ã o .
Por exemplo: ao i n v é s d e s e e s c r e v e r o s coman- d o s :
DECLARE CHR BYTE INITIAL ( ' A ' ) ; DECLARE X ADDRESS;
~ o d e r í a m o s e s c r e v e r ambas a s d e c l a r a ç õ e s como um s i m p l e s comando, d a f o r m a :
DECLARE CHR BYTE I N I T I A L ( ' A ' ) , X ADDRESS;
e e s t e comando contém a s d u a s d e c l a r a ç õ e s s e p a r a d a s p o r v í r g u - l a s , que s ã o t r a t a d o s como d o i s comandos d e d e c l a r a ç ã o d i f e r e n -
t e s , onde a p e n a s a p a l a v r a r e s e r v a d a DECLARE não p r e c i s a s e r r e p e t i d a . p a r ê n t e s e s s ã o u s a d o s num comando d e d e c l a r a ç ã o pa- r a a g r u p a r v á r i a s v a r i á v e i s que vão s e r d e c l a r a d a s com o s mes- mos a t r i b u t o s , p o r exemplo:
DECLARE ( A,B, C ) ( 2 0 ) BYTE;
1 . 7 . P o n t e i r o s e R e f e r ê n c i a s I n d i r e t a s
A s
v e z e s uma r e f e r ê n c i a d i r e t a a um e l e m e n t o d e dado PL/STI é i m p o s s í v e l ou i n c o v e n i e n t e . I s t o a c o n t e c e , por exemplo, quando o e n d e r e ç o d a memória do dado permanece d e s c o n h e c i d o a t é que s e j a computado d u r a n t e o p r o c e s s a m e n t o .Em t a i s c a s o s
6
n e c e s s á r i o m a n i p u l a r o s e n d e r e ç o s d o s dados ao i n v é s d o s p r ó p r i o s d a d o s , c o n s i d e r a n d o que o s e n d e r e ç o s "apon -tam" p a r a o s dados. T a i s a p o n t a d o r e s podem s e r chamados ende- r e ç o s i n d i r e t o s , r e f e r ê n c i a s ou p o n t e i r o s . Em PL/STI
há
f a c i - l i d a d e s p a r a o manuseio d e s s e s p o n t e i r o s c o m p u t a c i o n a i s , que s e r ã o d e s c r i t o s a s e g u i r .Uma v a r i á v e l apontada é a q u e l a c u j o e n d e r e ç o de memória
é
dado por uma o u t r a v a r i á v e l chamada a s u a b a s e . Ocompilador não a l o c a memória p a r a v a r i á v e i s a p o n t a d a s , s e u va- l o r é c a l c u l a d o d u r a n t e o processamento a t r a v é s d e s u a b a s e . A v a r i á v e l a p o n t a d a é d e c l a r a d a p r i m e i r o d e c l a r a n d o - s e a sua b a s e que é sempre do t i p o ADDRESS e e n t ã o d e c l a r a n d o - s e a p r ó - p r i a v a r i á v e l a p o n t a d a .
O a t r i b u t o BASED i n d i c a que a v a r i á v e l
é
a p o n t a da e deve s e g u l - l a no comando de d e c l a r a ç ã o .Exemplo :
1 ) DECLARE A ADDRESS, X BASED A BYTE; 2 ) DECLARE ( ZA, YA ) ADDRESS;
DECLARE ( Z BASED ZA,Y BASED YA ) ADDRESS;
1 . 7 . 1 . O O ~ e r a d o r Ponto
t e r a c e s s o a uma v a r i á v e l , dado o s e u p o n t e i r o : p r e c i s a m o s a - g o r a d e uma maneira d e c o n s t r u i r um p o n t e i r o dada a v a r i á v e l . I s t o é p o s s í v e l por meio do o p e r a d o r p o n t o . O e n d e r e ç o de me -
mória d e uma v a r i á v e l é r e f e r e n c i a d o precedendo-se o s e u nome com o c a r a c t e r p o n t o . A s s i m a s e x p r e s s õ e s .XY e .CARD p r o - duzem o s e n d e r e ç o s d e XY e CARD r e s p e c t i v a m e n t e . Podemos tam -
bém u s a r o o p e r a d o r p o n t o em uma v a r i á v e l com b a s e e o r e s u l - t a d o é simplemente o v a l o r d a b a s e . O o p e r a d o r ponto pode p r e c e d e r a s s e g u i n t e s c o n s t r u ç õ e s : a ) . v a r i á v e l b) . c o n s t a n t e c )
.
( c o n s t a n t e ) d).
( l i s t a de c o n s t a n t e s ) Exemplos : l).'MENSAGEM1 r e t o r n a um p o n t e i r o p a r a o p r i - meiro c a r a c t e r , M, d a c a d e i a d e c a r a c t e r e s M-E-N-S-A-G-E-M 2).('CUST01,'MES',1fl,24H) r e t o r n a um p o n t e i r o p a r a o p r i m e i r o c a r a c t e r , C , da l i s t a de c o n s t a n t e s .Uma r e f e r ê n c i a a um endereço f e i t a com o o p e r a -
d o r ponto é v á l i d a em q u a l q u e r l u g a r onde é p e r m i t i d a uma ex- p r e s s ã o PL/STI.
v e l (com e x c e ç ã o d e v a r i á v e i s a p o n t a d a s ) o e n d e r e ç o d a v a r i á - v e l é c a l c u l a d o em tempo de c o m p i l a ç ã o .
1 . 8 . Comandos r o t u l a d o s e comandos d e d e s v i o
1 . 8 . 1 . R ó t u l o s s i m b ó l i c o s
Um comando ou um grupo d e comandos podem s e r r o t u l a d o s . p a r a i d e n t i f i c a ç ã o e r e f e r ê n c i a . A forma g e r a l pa- r a um comando r o t u l a d o
é :
ROTULO 1 : ROTULO 2 :
...
: ROTULO N : coman - d o ; onde t o d o s o s r ó t u l o s s ã o i d e n t i f i c a d o r e s PL/STI.Qualquer número d e r ó t u l o s pode p r e c e d e r um co -
mando. O o b j e t i v o d e um r ó t u l o s i m b ó l i c o
é
s e r v i r d e a l v o pa-
r a um comando d e d e s v i o ( que s e r á v i s t o m a i s a d i a n t e ) .R ó t u l o s podem s e r d e c l a r a d o s d a mesma forma que v a r i á v e i s , em comandos d e d e c l a r a ç õ e s . No e n t a n t o , t a i s d e -
c l a r a ç õ e s d e r ó t u l o s nem sempre s ã o n e c e s s á r i a s . I s t o s e r á v i s t o na s e ç ã o 1 . 1 5 . 3 .
Um r ó t u l o numérico pode p r e c e d e r q u a l q u e r coman -
do P L / S T I , i n d i c a n d o a p o s i ç ã o d e memória onde v a i começar o c ó d i g o o b j e t o p a r a t a l comando. Por exemplo:
e s p e c i f i c a que o c ó d i g o o b j e t o p a r a e s t e comando v a i começar na p o s i ç ã o 30 d a memória.
Um comando não pode s e r p r e c e d i d o p o r m a i s d e um r ó t u l o numérico e quando r ó t u l o s s i m b ó l i c o ç s ã o u s a d o s j u n -
t o com um r ó t u l o numérico no mesmo comando, o r ó t u l o numérico d e v e a p a r e c e r em p r i m e i r o l u g a r .
1 . 8 . 3 . Comandos d e d e s v i o
Um comando d e d e s v i o i n t e r r o m p e a s e q u ê n c i a n o r -
mal d a e x e c u ç ã o do p r o g r a m a , t r a n s f e r i n d o o c o n t r o l e d i r e t a m e n -
t e p a r a o s e u a l v o . A execução recomeça e n t ã o a p a r t i r do co- mando p a r a o q u a l o c o n t r o l e do programa f o i d e s v i a d o .
Há
t r e s f o r m a s d i s t i n t a s p a r a comandos d e d e s v i o d e PL/TSI: 1 ) GO TO r ó t u l o s i m b ó l i c o ; O r ó t u l o s i m b ó l i c o6
um i d e n t i f i c a d o r que a p a r e - c e como um r ó t u l o em um comando r o t u l a d o . O e f e i t o d e s s e GO TO é t r a n s f e r i r d i r e t a m e n t e o c o n t r o l e do programa p a r a e s s e comando.2) GO TO número;
Onde o número é um e n d e r e ç o a b s o l u t o d e memória e o c o n t r o l e do programa é t r a n s f e r i d o d i r e t a m e n t e p a r a e s s e e n d e r e ç o
.
3) GO TO nome d e v a r i á v e l ; N e s t e c a s o a v a r i á v e l contém um e n d e r e ç o d e me- m ó r i a pré-computado e o c o n t r o l e p a s s a d i r e t a m e n t e p a r a e s s e e n d e r e ç o a b s o l u t o d e memória. A p a l a v r a r e s e r v a d a GO TO pode também s e r e s c r i -t a como GOTO ou s i m p l e s m e n t e GO.
1 . 9 . O comando I F
Forma ~ e r a l
I F EXPRESSÃO THEN comando 1; ELSE comando 2 ; co A
mando 3 ;
E s t e comando tem o s e g u i n t e e f e i t o : p r i m e i r o a e x p r e s s ã o s e g u i n t e a o I F
6
a v a l i a d a . Se o r e s u l t a d o é VERDA- D E I R O ( conforme v i s t o n a s e ç ã o 2 . 6 . 1 . 3 ) o comando 1 é execu- t a d o , em c a s o c o n t r á r i o , o comando 2é
e x e c u t a d o .Depois d a execução d e um d o s comandos, o c o n t r o A
do
IF
apresenta uma restrição quanto ao seu uso, que será vis- ta na seção 1.11.Os comandos que seguem as palavras reservadas
THEN e ELSE, respectivamente, não podem ser rotulados. Cabe
ainda ressaltar que a parte ELSE de um comando
IF
6
opcional.1.10. Os comandos c o m ~ o s t o s
Forma geral
< definição do comando composto >
comando 1 comando 2 comando 3 1 1 1 t comando
N
END ;onde, seguindo a definição da Gramática, ( ver Apêndice
A)
,
< definição do comando composto > especifica qual o comando1.10.1. O comando composto DO
Comandos podem ser agrupados entre as palavras
reservadas DO; END; para formar um Único comando, com a forma:
DO; comando 1 comando 2 ? ? 1 comando N END ;
onde não há restrições quanto aos comandos que aparecem entre as palavras reservadas DO; END;
1.10.2. O comando composto DO-WHILE
Forma geral DO
WHILE
EXPRESSÃO; comando 1; comando 2; ? comando N, END ;O e f e i t o d e s t e comando é : p r i m e i r o a e x p r e s s ã o s e g u i n t e
2
p a l a v r a r e s e r v a d a WHILE é a v a l i a d a p a r a v e r i f i c a - ç ã o d a s c o n d i ç õ e s VERDADEIRA ou FALSA ( v e r s e ç ã o 1 . 5 . 1 . 3 ) .Se o r e s u l t a d o
é
VERDADEIRO, e n t ã o a s e q u ê n c i a d e comandos a t é o ENDé
e x e c u t a d o . A s e g u i r a e x p r e s s ã o6
novamente ava- l i a d a e s e o r e s u l t a d o é VERDADEIRO novamente o s comandos s ã o e x e c u t a d o s . E s s e p r o c e d i m e n t o s e r e p e t e a t é que o r e s u l t a d o d a e x p r e s s ã o s e j a FALSO, quando e n t ã o o c o n t r o l e do programa p a s s a a o comando s e g u i n t e a o grupo DO-WHILE.S e j a p o r exemplo o s e g u i n t e t r e c h o d e programa: A = 1; DO WHILE A < = N ; (1)
- -
- C = C + A ; (2)-
e -A=A+ 1 ; END ; O s comandos (1) e ( 2 ) s e r ã o e x e c u t a d o s N v e - z e s . O v a l o r d e A s e r á i g u a l a N+1, quando o c o n t r o l e do p r o - grama d e i x a r o c i c l o . 1 . 1 0 . 3 . O comando c o m ~ o s t o DO-ITERATIVO Forma g e r a lDO variável = expressão 1 TO expressão 2
BY
expressão 3; comando 1 ; comando 2; 1 1 1 comando N; END ;Consideremos o seguinte trecho d e programa:
TESTE:IF VAR > EXP2 THEN GO TO CONTINUA;
comando 1 ; comando 2; I comando N ; VAR=VAR + EXP3 ; GOTO TESTE; CONTINUA:
onde EXP 3 >
O
e no caso de EXP3 O , o operador relaciona1 da expressão seguinte a palavra reservada IF, muda de sentido, ficando então:
O t r e c h o d e p r o g r a m a ,anterior,pode s e r s u b s t i t u i -
do p e l o comando composto DO-ITERATIVO q u e f u n c i o n a como o e - xemplo e s e r i a :
DO VAR = EXP1 TO EXP2 BY EXP3; comando 1;
comando 2 ;
1
comando N ; END ;
1 . 1 0 . 4 . - O comando composto DO-CASE
Forma g e r a l DO CASE EXPRESSÃO; comando 1 ; comando 2 ; 1 comando N; END ; O e f e i t o d e s s e comando é p r i m e i r o a a v a l i a ç ã o
da expressão seguinte ao CASE. O resultado deve ser um valor
K entre fl(zero) e N-1. K é usado então para selecionar um dos
-
N comandos do DO-CASE. O primeiro comando corresponde a IC=fl,
o segundo a K=l e assim consecutivamente até o Último comando
corresponde a K=N-1.
Depois da execução do comando selecionado, O
controle do programa passa ao comando seguinte a esse comando
composto. Se durante o processamento o valor de K é maior que o número total de comandos, N , então o efeito deste DO CASE é indeterminado - - , sendo portanto erro de programação.
Há
umarestrição quanto aos comandos que aparecem no corpo de um DO-
CASE: eles não podem ser rotulados.
Exemplo : DO CASE X-5 X=X+ 5 ;
/
*
CASOfl
*
/
DO;/
*
CASO 1*
/
END ; END ;Este exemplo ilustra o uso de blocos DO-END pa-
ra agrupar vários comandos como um Único comando PL/STI.
1.11. - Restrição ao uso de comando
IF
Vejamos de novo a sua forma geral:
I F expressão
THEN
comando1;ELSE
comando 2; co- mando 3.A
restrição se resume no seguinte: o comando li -gado a cláusula I F , comando 1, não pode nunca ser um comando
I F , a não ser que não exista nenhum
ELSE
comando2;
A
construção: I F condição 1THEN
I F condição2
THEN
comando 3 ;ELSE
comando 2;6
ambígua e ilegal ( a qual I Fo
ELSE
pertence ? ) e deve ser substituido por uma das seguin- tes construções, dependendo da intenção de quem programa.1) I F condição 1
THEN
DO;
I F condição 2
THEN
comando 3 ;END
;ELSE
comando 2;2)
IF
condição 1THEN
D O ;
I F condição 2
THEN
comando 3;ELSE
comando2;
END
;conforme o caso.
a
Uma r o t i n a é uma p a r t e do código PL/STI que e d e c l a r a d a sem s e r e x e c u t a d a e e n t ã o chamada de o u t r o s p o n t o s do programa.
O u s o d e r o t i n a s f a c i l i t a a programação e a documentação, r e d u z i n d o a q u a n t i d a d e d e código o b j e t o gerado p e l o programa.
1 . 1 2 . 1 . D e c l a r a c ã o d e r o t i n a s
Uma r o t i n a deve s e r d e c l a r a d a no programa, an- t e s d e a p a r e c e r q u a l q u e r comando e x e c u t á v e l . Uma d e c l a r a ç ã o de r o t i n a c o n s i s t e d e q u a t r o p a r t e s :
a) o nome da r o t i n a - é um i d e n t i f i c a d o r PL/ STI que
6
a s s o c i a d o com a r o t i n a .b) a e s p e c i f i c a ç ã o dos p a r â m e t r o s f o r m a i s e x i s -
t e n t e s , onde um p a r â m e t r o f o r m a l
6
um i d e n - t i f i c a d o r PL/STI que toma um v a l o r p a s s a d o p a r a a r o t i n a do s e u ponto d e chamada.c ) o t i p o do v a l o r r e t o r n a d o ( s e a r o t i n a r e - t o r n a algum v a l o r ) , que deve s e r BYTE ou ADDRESS
.
d) o corpo da r o t i n a ( o p r ó p r i o c ó d i g o ) , que
é formado por q u a i s q u e r comandos PL/STI, i n -
c l u s i v e chamadas e d e c l a r a ç õ e s a n i n h a d a s de r o t i n a s .
e ) END NOME; onde NOME
6
o p c i o n a l . E s t e s e l e m e n t o s tomam a s e g u i n t e f o r m a : NOME: PROCEDURE ( l i s t a d e p a r â m e t r o s f o r m a i s ) T I P O ; comando 1 ; comando 2 ; f comando N; END NOME; onde a l i s t a d e p a r â m e t r o s f o r m a i s tem a f o r m a : ( i d l , i d Z ,...,
, i d n ) e i d l , i d Z , i d n s ã o i d e n t i f i c a d o r e s PL/STI. Todos o s pa- r â m e t r o s f o r m a i s devem s e r d e c l a r a d o s d e n t r o da r o t i n a d e modo que s e u s t i p o s s e j a m d e f i n i d o s . A l i s t a d e p a r â m e t r o s d e v e s e r o m i t i d a s e nenhum p a r â m e t r o p a s s a p a r a a r o t i n a . Da mes- ma forma s e a r o t i n a não r e t o r n a um v a l o r , e n t ã o o t i p o
6
omi-t i d o na d e c l a r a ç ã o d a mesma.
1 . 1 2 . 2 . - O comando RETURN
A execução d a r o t i n a t e r m i n a p e l a e x e c u ç ã o do comando RETURN d e n t r o do c o r p o d a mesma. E s t e comando tem uma d a s d u a s f o r m a s :
a ) RETURN; que
é
u s a d o s e a r o t i n a não r e t o r n a um v a l o r .b ) RETURN EXPRESSÃO, que é u s a d o s e r e t o r n a um v a l o r . E n e s s e c a s o o v a l o r d a e x p r e s s ã o
é
t r a z i d o p a r a o p o n t o d e chamada.1 . 1 2 . 3 .
-
Exemplos d e d e c l a r a ç õ e s - d e r o t i n a s1 ) AVG : PROCEDURE (X , Y) ADDRESS ; DECLARE (X ,Y) ADDRESS; RETURN (X+Y)
/
2 ;END AVG;
Como r e t o r n a um v a l o r , o t i p o ADDRESS f o i d e c l a
-
r a d o e o comando RETURN é s e g u i d o p o r uma e x p r e s s ã o .2 ) AOUT : PROCEDURE (ITEM) ; DECLARE ITEM ADDRESS;
I F ITEM = @FFH THEN I = I + 1 ; ELSE I = I + 3 ; RETURN ; END AOUT; N e s t e c a s o a r o t i n a não r e t o r n a um v a l o r , l o g o o t i p o f o i o m i t i d o d a d e c l a r a ç ã o e o comando RETURN p o d e r i a s e r o m i t i d o , p o i s há um RETURN i m p l í c i t o no END d e q u a l q u e r r o - t i n a .
1 . 1 2 . 4 . R e s t r i ç ã o q u a n t o ao uso d e r o t i n a s
Há
uma r e s t r i ç ã o quanto ao u s o , que é :R o t i n a s não podem s e r r e c u r s i v a s , i s t o
é ,
uma r o t i n a não pode chamar e l a mesma, nem chamar uma a o u t r a c i r c u-
l a r m e n t e .1 . 1 2 . 5 . Chamadas d e r o t i n a s
Há
d u a s formas d e chamadas d e r o t i n a s :a ) s e a r o t i n a não r e t o r n a um v a l o r
,
a chamadaé
f e i t a a t r a v é s do comando CALL, que tem a forma:CALL nome da r o t i n a ( l i s t a de p a r â m e t r o s a t u a - i s ) onde a ( l i s t a de p a r â m e t r o s a t u a i s ) contém nome d e va -
r i á v e i s , c o n s t a n t e s ou q u a l q u e r e x p r e s s ã o PL/STI, s e p a r a d a s por v í r g u l a s .
No tempo d e chamada cada p a r â m e t r o a t u a l ou pa- r â m e t r o d e chamada
é
a v a l i a d o e seu v a l o r a t r i b u i d o ao c o r r e s - pondente p a r â m e t r o f o r m a l d a d e c l a r a ç ã o da r o t i n a . ~ a r â m e t r o s d a s r o t i n a s PL/STI s ã o do t i p o "chamada p o r v a l o r " . Parâme- t r o s de chamada devem a i n d a c o r r e s p o n d e r em número e t i p o a o s p a r â m e t r o s da d e c l a r a ç ã o da r o t i n a e s e houver d i v e r g ê n c i a de t i p o e n t r e e l e s s e r á f e i t a uma c o n v e r s ã o p a r a o t i p o do parâme-
t r o f o r m a l , no ponto d e chamada.b ) s e a r o t i n a r e t o r n a um v a l o r , e n t ã o a sua forma de chamada é
nome da r o t i n a ( l i s t a de p a r â m e t r o s a t u a i s ) que é um operando p r i m á r i o ou termo a s e r usado em uma e x p r e s - s ã o do mesmo modo que o nome de uma v a r i á v e l é u s a d a .
1 . 1 2 . 6 . E x e m ~ l o s d e chamadas de r o t i n a s
Dadas a s d e c l a r a ç õ e s d e r o t i n a s , n a s e ç ã o 1 . 1 2 . 3 , p a r a AOUT e AVG, a s s e g u i n t e s chamadas s ã o v á l i d a s p a r a e s - s a s r o t i n a s :
1 ) X=AVG (X, 4) ; 2 ) CALL AOUT (X) ;
3) CALL AOUT(l+AVG(X,Y)); 4) DO WHILE AVG(X,Y) < MAX;
X=X+XDEL ; END
1 . 1 3 . 0 s comandos HALT e EOF
1 . 1 3 . 1 . O comando HALT
HALT ; E s t e comando i n d i c a o f i n a l d o p r o c e s s a m e n t o do p r o g r a m a o b j e t o . 1 . 1 3 . 2 . O comando EOF Forma g e r a l EOF I n d i c a o f i m d a c o m p i l a ç ã o d o programa f o n t e , d e
-
v e s e r o Ú l t i m o comando d o p r o g r a m a . 1 . 1 4 . Macros - em - tempo d e c o m p i l a ç ã o O p r o g r a m a d o r p o d e d e c l a r a r um nome s i m b ó l i c o como s e n d o e q u i v a l e n t e a uma c a d e i a ( ou s e q u ê n c i a ) d e c a r a c - t e r e s . Quando uma o c o r r ê n c i a d o nome é e n c o n t r a d a p e l o compi- l a d o r , a c a d e i a d e c a r a c t e r e s d e c l a r a d o s é s u b s t i t u i d a . D e s s a f o r m a o c o m p i l a d o r p r o c e s s a a s e q u ê n c i a d e c a r a c t e r e s s u b s t i t u-
i d o s a o i n v é s d o nome s i m b ó l i c o .D e f i n e uma macro p a r a e x p a n s ã o em tempo d e com- p i l a ç ã o .
Sua forma g e r a l é :
DECLARE
i d e n t i f i c a d o rLITERALLY 'CADEIA DE CARACTERES';
a
onde o i d e n t i f i c a d o r é q u a l q u e r i d e n t i f i c a d o r
PL/STI
que e a s s o c i a d o a c a d e i a d e c a r a c t e r e s com no máximo 255 c a r a c t e r e s a r b i t r á r i o s d a linguagem.1 . 1 4 . 2 . -Exemplo d e u s o d e macros .
--
Consideremos o s s e g u i n t e s t r e c h o s d e programa.
'DECLARE LIT'LITERALLY', DCL LIT'DECLARE';
DCL TRUE LIT
'fl
FFH'
,FALSE LIT 'fl';
DCL FOREVER LIT IWHILE TRUE';
DCL (X,Y,Z) BYTE;
DO FOREVER;
IF Y
>lfl THEN HALT;
END
; I I 1EOF
A p r i m e i r a d e c l a r a ç ã o d e s t e programa d e f i n e a - b r e v i a ç õ e s p a r a a s p a l a v r a s r e s e r v a d a s L I T E R A L L Y e DECLARE, que s ã o e n t ã o u s a d a s a t r a v é s do programa.
A segunda d e c l a r a ç ã o d e f i n e o s v a l o r e s b o o l e a -
n o s TRUE e FALSE do mesmo modo como PL/STI m a n u s e i a o p e r a d o - r e s r e l a c i o n a i s . I s t o t o r n a o programa m a i s l e g í v e l .
1 . 1 5 . E s t r u t u r a -- d e B l o c o s e A l c a n c e
PL/STI
é
uma linguagem e s t r u t u r a d a em b l o c o s . Um b l o c o é q u a l q u e r comando composto, q u a l q u e r r o t i n a ou o programa i n t e i r o . Todas a s e n t i d a d e s c o m p u t a c i o n a i s d e c l a r a - d a s d e n t r o d e um b l o c o , s ã o i n a c e s s í v e i s a comandos ou d e c l a-
r a ç õ e s f o r a d e l e . O u s o d e um mesmo i d e n t i f i c a d o r p a r a d i f e-
r e n t e s o b j e t i v o s , bem como o u s o de um b l o c o d e n t r o d e o u t r o não c r i a m nenhuma d i f i c u l d a d e . 1 . 1 5 . 1 . Como o A l c a n c eé
d e f i n i d o Cada b l o c o l i m i t a o a l c a n c e d o s i d e n t i f i c a d o - r e s d e c l a r a d o s d e n t r o d e l e ; e l e s s ã o d e s c o n h e c i d o s f o r a do b l o c o . O a l c a n c e d e um i d e n t i f i c a d o r começa com a s u a d e c l a -c r o s , v e t o r e s , dados e r o t i n a s têm a l c a n c e c u j a s r e g r a s s ã o a s e x p l i c a d a s a n t e r i o r m e n t e . Há, no e n t a n t o , uma r e s t r i ç ã o a s e r f e i t a : comandos de d e c l a r a ç ã o e d e c l a r a ç ã o de r o t i n a s não po- dem a p a r e c e r d e n t r o de um DO WHILE, DO CASE ou DO i t e r a t i v o .
1 . 1 5 . 2 . Alcance de r ó t u l o s
Rótulos são também i d e n t i f i c a d o r e s e como t a l , têm a l c a n c e . No e n t a n t o normalmente não é n e c e s s á r i o d e c l a r a r o r ó t u l o e x p l í c i t a m e n t e . O p r i m e i r o uso de um r ó t u l o não de- c l a r a d o ( em um comando r o t u l a d o ou comando de d e s v i o ) contém uma d e c l a r a ç ã o i m p l í c i t a do r 6 t u l o e d e s s e modo e s s a d e c l a r a - ção governa o a l c a n c e do r ó t u l o , de acordo com a s r e g r a s da s e ç ã o p r e c e d e n t e .
1 . 1 5 . 3 . Declaração de r ó t u l o -
As v e z e s t o r n a - s e c o n v e n i e n t e d e c l a r a r o r ó t u l o p a r a p a s s a r p o r cima do a l c a n c e i m p l í c i t o . E s t a d e c l a r a ç ã o t o ma a forma:
DECLARE id.ent i f i c a d o r . LABEL ;
DECLARE ( i d e n t i f i c a d o r l ,
....,
identificad0rN)LABEL;l o s , s e r á d e f i n i d o ao n í v e l do b l o c o da d e c l a r a ç ã o . E s t a de- c l a r a ç ã o e x p l í c i t a é n e c e s s á r i a somente s e a d e c l a r a ç ã o i m p l í
-
c i t a não s a t i s f a z a s i n t e n ç õ e s do programador. Consider,emos o s s e g u i n t e s t r e c h o s de programas como exemplo: EXEMPLO (1) : D O ; 1 GO TO EXIT; 1 END ; EX1T:HALT; EOFEXEMPLO
(2) :X=X+l;
1
DO;
1
DECLARE EXIT LABEL;
GO
TO EXIT;
1
END
; IDECLARE EXIT LABEL;
EXIT
:HALT;
EOF
Nossa i n t e n ç ã o Óbvia em (1)
6
d e s v i a r p a r a o co -mando r o t u l a d o
EXIT
no fim do programa. Mas d e acordo com a s r e g r a s de d e c l a r a ç ã o i m p l í c i t a p a r a r ó t u l o s , o que nós e s c r e v e mos é e q u i v a l e n t e a ( 2 ) .A
d e c l a r a ç ã o i m p l í c i t a l i m i t a o a l c a n c e do r ó t u - 10 ao comando composto. Assim na 2a. o c o r r e n c i a deEXIT
nós estaremos f o r a d a q u e l e a l c a n c e ,EXIT
é novamente d e f i n i d o , euma nova d e c l a r a ç ã o i m p l í c i t a o c o r r e r á . A s s i m temos 2 r ó t u l o s d i f e r e n t e s , d e v i d o
à s
d e c l a r a ç õ e s i m p l í c i t a s , um i n t e r n o ao b l o c o e o u t r o e x t e r n o a e l e . Desse modo o comando GO TO não tem um a l v o a a t i n g i r . P a r a s a t i s f a z e r o p r o p ó s i t o o r i g i n a l , o p r o g r a - ma t e r i a que s e r e s c r i t o d a s e g u i n t e modo: DECLARE E X I T LABEL; X=X+l; 1 D O ; 1 GO TO EXIT; I END ; I EX1T:HALT; EOF A s d e c l a r a ç õ e s i m p l í c i t a s s ã o s u p r i m i d a s . E l a s não s ã o n e c e s s á r i a s p o i s e x i s t e um r ó t u l o EXIT, c u j o a l c a n c e a g o r aé
o programa i n t e i r o sem r e s t r i ç õ e s .1 . 1 5 . 4 . Uso d a e s t r u t u r a d e b l o c o s
T r a n s f e r ê n c i a d e c o n t r o l e d e d e n t r o do c o r p o d e uma r o t i n a
s ó
é p o s s í v e l a t r a v é s do comando RETURN, do mesmo modo a e n t r a d a em uma p r o c e d u r es ó
é p o s s í v e l a t r a v é s d e uma chamada p o r meio d e um comando CALL, ou p e l o p r ó p r i o nome d a r o t i n a em uma e x p r e s s ã o como f o i v i s t o n a s e ç ã o 1 . 1 2 . 5 . Nãoé
p e r m i t i d o também t e r d e s v i o s d e um b l o c o m a i s e x t e r n o p a r a um m a i s i n t e r n o .E s t r u t u r a d e b l o c o s em uma linguagem d e p r o g r a - mação, d á a o p o r t u n i d a d e d e d e f i n i r módulos d e programa b a s t a n
t e i n d e p e n d e n t e s , d e i x a n d o p a r a o c o m p i l a d o r a t a r e f a d e j u n t á -
10s.
1 . 1 6 . Funcões i n t e r n a s (ou e m b u t i d a s )
São f u n ç õ e s s u p r i d a s p e l o c o m p i l a d o r PL/STI que p a r a serem u s a d a s b a s t a que s e j a m i n d i c a d a s p e l o s e u nome.
Chamadas p a r a t o d a s a s f u n ç õ e s e m b u t i d a s podem a p a r e c e r em q u a l q u e r l u g a r que uma e x p r e s s ã o