Prévia do material em texto
Esquemas de Tradução da Linguagem PASCAL SIMPLIFICADA
<programa> ::= program <id> {A1} <corpo> • {A30}
----------------------------------------------------------------------
<corpo> ::= <declara> <rotina> begin <sentencas> end
----------------------------------------------------------------------
<declara> ::= var <dvar> <mais_dc> | l
<mais_dc> ::= ; <cont_dc>
<cont_dc> ::= <dvar> <mais_dc> | l
<dvar> ::= <variaveis> : <tipo_var>
<tipo_var> ::= integer
<variaveis> ::= <id> {A2} <mais_var>
<mais_var> ::= , <variaveis> | l
--------------------------------------------------------------------
<rotina> ::= <procedimento> | <funcao> | l
<procedimento> ::= procedure <id> <parametros> ; <corpo> ;
<rotina>
<funcao> ::= function <id> <parametros> : <tipo_funcao> ; <corpo> ;
<rotina>
<parametros> ::= ( <lista_parametros> ) | l
<lista_parametros> ::= <lista_id> : <tipo_var> <cont_lista_par>
<cont_lista_par> ::= ; <lista_parametros> | l
<lista_id> ::= <id> <cont_lista_id>
<cont_lista_id> ::= , <lista_id> | l
<tipo_funcao> ::= integer
--------------------------------------------------------------------
<sentencas> ::= <comando> <mais_sentencas>
<mais_sentencas> ::= ; <cont_sentencas>
<cont_sentencas> ::= <sentencas> | l
<var_read> ::= <id> {A5} <mais_var_read>
<mais_var_read> ::= , <var_read> | l
<var_write> ::= <id> {A6} <mais_var_write>
<mais_var_write> ::= , <var_write> | l
<comando> ::=
read ( <var_read> ) |
write ( <var_write> ) |
for <id> {A25} := <expressao> {A26} to {A27} <expressao> {A28}
do begin <sentencas> end {A29} |
repeat {A23} <sentencas> until ( <condicao> ) {A24} |
while {A20} ( <condicao> ) {A21} do begin <sentencas> end {A22} |
if ( <condicao> ) {A17} then begin <sentencas> end {A18}
<pfalsa> {A19} |
<id> {A13} := <expressao> {A14} |
----------------------------------------------------------------------
<chamada_procedimento>
----------------------------------------------------------------------
<chamada_procedimento> ::= <id_proc> <argumentos>
<argumentos> ::= ( <lista_arg> ) | l
<lista_arg> ::= <expressao> <cont_lista_arg>
<cont_lista_arg> ::= , <lista_arg> | l
----------------------------------------------------------------------
<condicao> ::= <expressao> <relacao> {A15} <expressao> {A16}
<pfalsa> ::= else begin <sentencas> end | l
<relacao> ::= = | > | < | >= | <= | <>
<expressao> ::= <termo> <outros_termos>
<outros_termos> ::= <op_ad> {A9} <termo> {A10} <outros_termos> | l
<op_ad> ::= + | -
<termo> ::= <fator> <mais_fatores>
<mais_fatores> ::= <op_mul> {A11} <fator> {A12} <mais_fatores> | l
<op_mul> ::= * | /
----------------------------------------------------------------------
<fator> ::= <id_var> {A7} | <intnum> {A8} |
(<expressao>) | <id_funcao> <argumentos>
----------------------------------------------------------------------
<id> ::= letra (letra | digito)* {A3}
<intnum> ::= digito+ {A4}
Observação sobre a sintaxe da Linguagem Pascal
A construção de programas poderá conter comentários, os quais são inicializados pelo símbolo "{"
e finalizados pelo símbolo "}". Qualquer seqüência de caracteres contidos entre estes dois
delimitadores deverão serem desconsiderados pelo compilador. Portanto, durante a fase de
análise léxica, torna-se viável desprezar todos os comentários. Isto pode ser feito da seguinte
forma:
Se NextCar = '{' então
Enquanto NextCar <> '}' faça
Chamar Ler
Fim faça
Chamar Ler
Fim se
Exemplo de um programa em PASCAL SIMPLIFICADO
{ Programa: Somatório }
{ Autor : Rogério Melo Nepomuceno }
{ Data : 21 de Setembro de 1999 }
Program Somatorio
Var
Ini, Fim, Conta, Soma : integer;
Begin
Ini := 0;
Fim := 0;
Soma := 0;
read( Ini, Fim );
For Conta := Ini To Fim do begin
Soma := Soma + Conta
End;
write( Soma );
End.