Orientada a Objetos 2
- Estende a Linguagem OO1 com construtores e herança
- Construtores são métodos especiais, com o mesmo nome da classe e sem valor de retorno, chamados automaticamente a cada criação de um objeto (através do comando new)
- Herança simples
- Não permite overloading, redefinição de métodos, super e nem modificadores de acesso
Fontes
Programa ::= “{“ ListaDeclaracaoOO “;” Comando “}”
Comando ::= AtribuicaoOO2
| ComDeclaracao
| While
| IfThenElse
| IO
| Sequencial Comando “;” Comando
| Skip
| NewOO2
| ChamadaMetodoOO2
Skip ::=
ComDeclaracao ::= “{“ DecVariavel “;” Comando “}”
While ::= “while” Expressao “do” “{“ Comando “}”
IfThenElse ::= “if” Expressao “then” “{“ Comando “}”
| “if” Expressao “then” “{“ Comando “}” “else” “{“ Comando “}”
ChamadaMetodo ::= Expressao “.” Id “(“ ListaExpressao “)” | Expressao “.” Id “(“”)”
ListaExpressao ::= Expressao | Expressao “,” ListaExpressao
New ::= LeftExpression “:=” “new” Id “(“ [ListaExpressao] “)”
Atribuicao ::= LeftExpression “:=” Expressao
IO ::= Write “write” “(“ Expressao “)”
| Read “read” “(“ Id “)”
Expressao ::= Valor
| ExpUnaria
| ExpBinaria
| LeftExpression
| This
Valor ::= ValorConcreto
ValorConcreto ::= ValorInteiro
| ValorBooleano
| ValorString
| ValorNull
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
LeftExpression ::= Id | AcessoAtributo
AcessoAtributo ::= AcessoAtributoIdOO2 LeftExpression.Id
| AcessoAtributoThisOO2 this.Id
ListaDeclaracaoOO ::= DecClasseSimplesOO2
| DecClasseSimplesOO2 “,” ListaDeclaracaoOO
DecClasse ::= DecClasseSimplesOO2 “classe” Id [“extends” Id] “{“ DecVariavel “;” DecConstrutor “,” DecProcedimento “}”
DecConstrutor ::= DecConstrutor Id “(“ ListaDeclaracaoParametro “)” “{“ Comando “}”
DecVariavel ::= SimplesDecVariavel Tipo Id “=” Expressao
| CompostaDecVariavel DecVariavel “,” DecVariavel
| DecVariavelObjetoOO2 Tipo Id “:=” “new” Id
DecProcedimento ::= DecProcedimento “proc” Id “(“ ListaDeclaracaoParametro “)” “{“ Comando “}”
| DecProcedimentoComposta DecProcedimento “,” DecProcedimento
ListaDeclaracaoParametro ::= DecParametro Tipo Id | ListaDeclaracaoParametro Tipo Id “,” ListaDeclaracaoParametro
Tipo ::= TipoClasse | TipoPrimitivo
TipoClasse ::= Id
TipoPrimitivo ::= TipoPrimitivo “string” | “int” | “boolean”
Parser
Classes Auxiliares
ConstrutorNaoDeclaradoException
AmbienteCompilacaoOO2
AmbienteExecucaoOO2
ContextoCompilacaoOO2
ContextoExecucaoOO2
DefClasseOO2
SuperClasseMap