• Nenhum resultado encontrado

Publicações do PESC Terminal Inteligente: Análise Léxica e Geração de Código para um Compilador da Linguagem PL/STI

N/A
N/A
Protected

Academic year: 2021

Share "Publicações do PESC Terminal Inteligente: Análise Léxica e Geração de Código para um Compilador da Linguagem PL/STI"

Copied!
169
0
0

Texto

(1)

.PARA- UM COMP I'LAD'OR' DA 'L I'NGUAG

EM

TJL'/'ST I

Miriam 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 DO

R 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 C

IENCIAS

(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 s

P 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 8

(2)

MARQUES, 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.

(3)
(4)

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 .

(5)

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 -

(6)

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

(7)

P á g i n a s

. . .

INTRODUÇÃO 1

CAPITULO

I : A Linguagem PL/STI

. . .

3

G e n e r a l i d a d e s s o b r e a linguagem

. . .

3

C o n s t i t u i n t e s b á s i c o s de um programa PL/STI

. . .

4

Elementos de dados em PL/STI

. . .

5

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

. . .

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 7

(8)

v 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

. . .

23

1 . 1 0 . 2 . O comando composto DO WHILE

. . .

23

1 . 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

. . .

37

(9)

v 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

. . .

45

1 . 1 6 . 6 . F u n ç õ e s CARRY.ZER0. SIGN e PARITY

. . . .

46

1 . 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 56

(10)

3 . 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 de

C 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 de

(11)

P á 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 F

4 . 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 s

4.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 composto

DO-WHILE

. . .

116

4 . 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 8

(12)

APENDICE

A

-

A ~ramatica da Linguagem PL/STI

...

130

APENDICE

B

-

Lista dos Caracteres Especiais

...

140

APENDICE

C

-

Lista das Palavras Reservadas e Nomes

das Funções Internas

...

143

APENDICE

D

-

Tabelas Verdade para os Operadores Boo

-

leanos

...

145

APENDICE

E

-

Diagrama de Estados para a Análise

Lé-

xica

...

147

APENDICE

F

-

Programa exemplo com erros l6xicos

...

15

O

(13)

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.

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 .

.

(14)

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ódigo

(15)

A 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 em

16 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 ) .

(16)

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 .

(17)

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/STI

Elementos 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 á

(18)

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 .

(19)

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 o

6

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 a

(20)

o 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 a

fl

-

1 , r e s u l t a n d o .em um v a l o r BYTE i g u a l

2

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

(21)

~á 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 ç ã o

6

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 ç ã o

6

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 -

(22)

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 :

(23)

MENOS

UNARIO

*

/

MOD < < = < > = > NOT AND OR XOR

parênteses são usados para sobrepor a precedên-

cia normal. Assim a expressão (

A+B )*C

fará a soma de A e

B

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

(24)

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 .

(25)

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 s

6

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 nomes

xy(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 .

(26)

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 l

fl,

à

R(B) o v a l o r 1 e

à

S(B) o v a l o r 2 .

(27)

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 .

(28)

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 .

(29)

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

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 . O

compilador 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

(30)

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.

(31)

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 .

(32)

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 .

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 o

6

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.

(33)

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

(34)

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 comando

(35)

1.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 ;

(36)

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 ã o

6

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 l

(37)

DO 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, fi

cando então:

(38)

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

(39)

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.

uma

restriçã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 ;

/

*

CASO

fl

*

/

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

(40)

Vejamos de novo a sua forma geral:

I F expressão

THEN

comando

1;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

comando

2;

A

construção: I F condição 1

THEN

I F condição

2

THEN

comando 3 ;

ELSE

comando 2;

6

ambígua e ilegal ( a qual I F

o

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 1

THEN

D O ;

I F condição 2

THEN

comando 3;

ELSE

comando

2;

END

;

conforme o caso.

(41)

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 .

(42)

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 :

(43)

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 s

1 ) 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 .

(44)

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

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

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.

(45)

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

(46)

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 .

(47)

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 r

LITERALLY '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 1

EOF

(48)

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 -

(49)

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;

(50)

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; EOF

(51)

EXEMPLO

(2) :

X=X+l;

1

DO;

1

DECLARE EXIT LABEL;

GO

TO EXIT;

1

END

; I

DECLARE 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 de

EXIT

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 , e

(52)

uma 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 .

(53)

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 e

s ó

é 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

é

p e r m i t i d a .

Referências

Documentos relacionados

direito coletivo ao meio ambiente ecologicamente equilibrado. Importante notar que, devido à natureza da licença ambiental, essa possui caráter precário. Exemplo disso é a

Para as vigas onde os laminados foram colados na superfície do concreto foi necessária a utilização de um detector de metais para localizar os estribos como mostra a Figura 5.13

O controle da proliferação de ratos na avicultura é muito importante, pois além de consumirem ração, danificar equipamentos, cortinas e outros materiais, podem servir de fonte

Figura B.6 – Campo de tensões equivalentes de von Mises referentes ao último passo de carga aplicada para o modelo axissimétrico do caso 2.. Caso 2 –

Pretendemos analisar a adaptação da personagem João Guilherme Estrella do romance “Meu nome não é Johnny”, do autor Guilherme Fiuza para o filme, de título

Tabela 9 - Distribuição de 37 crianças submetidas à excisão tangencial no Hospital Infantil Joana de Gusmão, no período de 1º de janeiro de 2006 à 31 de dezembro de 2007, segundo a

Como se trata de uma experiência concreta, o trabalho foi organizado de forma a elencar a fundamentação teórica que norteou a minha prática de ensino na execução dos

If I have seen further it is by standing on the shoulders of Giants.. Comparação entre o sistema teórico de refrigeração por compressão de vapor de amônia e o sistema teórico