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

OO2

Classes Auxiliares

ConstrutorNaoDeclaradoException
AmbienteCompilacaoOO2
AmbienteExecucaoOO2
ContextoCompilacaoOO2
ContextoExecucaoOO2
DefClasseOO2
SuperClasseMap