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