Imperativa 2

  • Estende a Linguagem Imperativa 1 com procedimentos parametrizados e recursivos
  • O corpo de um procedimento é um comando e a chamada de um procedimento idem
  • O contexto também é estendido com:
    • um mapeamento de identificadores (nomes de procedimentos) em definições de procedimentos
  • Procedimentos não possuem status de valor
  • Um programa é um comando

Fontes

Programa ::= Comando

Comando ::= Atribuicao
       | ComandoDeclaracao
       | While
       | IfThenElse
       | IO
       | SequenciaComando Comando “;” Comando
       | Skip Skip
       | ChamadaProcedimento ChamadaProcedimento

Skip ::=

Atribuicao ::= Id “:=” Expressao

Expressao ::= Valor
       | ExpUnaria | ExpBinaria | Id

Valor ::= ValorConcreto

ValorConcreto ::= ValorInteiro
       | ValorBooleano
       | ValorString

ExpUnaria ::= ExpMenos “-“ Expressao
       | ExpNot “not” Expressao
       | ExpLength “length” Expressao

ExpBinaria ::= ExpSoma Expressao “+” Expressao
       | ExpSub Expressao “-“ Expressao
       | ExpAnd Expressao “and” Expressao
       | ExpOr Expressao “or” Expressao
       | ExpEquals Expressao “==” Expressao
       | ExpConcat Expressao “++” Expressao

ComandoDeclaracao ::= “{“ Declaracao “;” Comando “}”

Declaracao ::= DeclaracaoVariavel
       | DeclaracaoProcedimento
       | DeclaracaoComposta

DeclaracaoVariavel ::= “var” Id “=” Expressao

DeclaracaoComposta ::= Declaracao “,” Declaracao

DeclaracaoProcedimento ::= DeclaracaoProcedimento “proc” Id “(“ [ ListaDeclaracaoParametro ] “)” “{“ Comando “}”

ListaDeclaracaoParametro ::= DeclaracaoParametro Tipo Id
       | ListaDeclaracaoParametro Tipo Id “,” ListaDeclaracaoParametro

Tipo ::= “string” | “int” | “boolean”

While ::= “while” Expressao “do” Comando

IfThenElse ::= “if” Expressao “then” Comando “else” Comando

IO ::= Write “write” “(“ Expressao “)”
       | Read “read” “(“ Id “)”

ChamadaProcedimento ::= “call” Id “(“ [ ListaExpressao ] “)”

ListaExpressao ::= Expressao | Expressao, ListaExpressao

Classes Auxiliares

AmbienteExecucaoImperativa2
ContextoExecucaoImperativa2
ListaValor
DefProcedimento
ProcedimentoJaDeclaradoException
ProcedimentoNaoDeclaradoException

Parser

Imperative2\