Você está na página 1de 2

UNIVERSIDADE DO ESTADO DA BAHIA

DEPARTAMENTO DE CINCIAS EXATAS E DA TERRA


ANLISE DE SISTEMAS / SISTEMAS DE INFORMAO
COMPILADORES / FUNDAMENTOS DE COMPILADORES
PROF. ANTONIO ATTA


Elaborar os mdulos de anlise lxica, sinttica, semntica e gerao de cdigo
intermedirio para o subconjunto da gramtica original da linguagem Pascal
especificada a seguir. Escrever os programas correspondentes a cada mdulo usando a
linguagem definida em sala. Usar o mtodo descendente recursivo para o mdulo de
anlise sinttica, emitindo mensagem indicando o erro correspondente quando encontrar
uma sentena que esteja fora do especificado pela gramtica indicar tambm a linha
em que ocorreu o erro. Incrementar o mdulo de anlise sinttica incorporando a
checagem de tipos, declarao de identificadores, checagem de nmero de parmetros
em procedimentos, etc. funes tpicas do analisador semntico. Considerar a
existncia de duas funes predefinidas da linguagem: read e write usadas para a
entrada e sada de dados. Comentrios podem ocorrer em qualquer ponto do programa,
aparecem sempre entre chaves ({ ... }) e devem ser filtrados pelo analisador lxico.

1. <programa> : := program <identificador>; <bloco>.
2. <bloco> : := | <parte de declaraes de variveis> |
| <parte de declaraes de sub-rotinas> |
<comando composto>
3. <parte de declaraes de variveis> : := var <declarao de variveis>
{;<declarao de variveis>};

4. <declarao de variveis>::=<lista de identificadores>: <tipo>
5. <lista de identificadores>::=<identificador> {, <identificador>}
6. <tipo>::= integer , boolean | real
7. <parte de declarao de sub-rotinas>::= {<declarao de procedimento>; ,
<declarao de funo>;}

8. <declarao de procedimento>::= procedure <identificador>
|<parmetros formais>|; <bloco>

9. <declarao de funo>::= function <identificador>
|<parmetros formais>|: <tipo>; <bloco>

10. <parmetros formais>::= (<seo de parmetros formais>
{;<seo de parmetros formais>})

11. <seo de parmetros formais>::= |var | <lista de identificadores>:<tipo>
12. <comando composto>::=begin [<comando> {; <comando>}] end
13. <comando>::=<atribuio> , <chamada de procedimento> , <comando composto> ,
<comando condicional>| <comando repetitivo>

14. <atribuio>::=<varivel>:= <expresso>
15. <chamada de procedimento>::=<identificador> |( <lista de expresses> )|
16. <comando condicional>::=if <expresso> then <comando>
| else <comando> |
VIDE VERSO
17. <comando repetitivo>::= while <expresso> do <comando>
18. <lista de expresses>::=<expresso> {,<expresso>}
19. <expresso>::=<expresso simples> |<relao> <expresso simples>|
20. <relao>::= = | <>|<|>|>= | <=
21. <expresso simples>::= |+|| <termo> {(+||or) <termo>}
22. <termo>::= <fator> {(*| / | and) <fator>}
23. <fator>::= <varivel>|<nmero>|<nmero_real> | <chamada de
funo>|(<expresso>) | not <fator>
24. <varivel>::=<identificador>|<identificador> |<lista de expresses>|
25. <chamada de funo>::=<identificador>|(<lista de expresses>)|
26. <nmero>::=<dgito>{<dgito>}
27. <nmero_real>::=<numero>.<numero>
28. <dgito>::= 0|1|2|3|4|5|6|7|8|9
29. <identificador>::=<letra>{<letra>|<dgito>}
30. <letra>::= a|b|c|d|e|f ... w|x|y|z