Baixe o app para aproveitar ainda mais
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.
Compartilhar