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
       | Comando “;” Comando
       | Skip
       | New
       | ChamadaMetodo

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” “(“ Expressao “)”
       | “read” “(“ Id “)”

Expressao ::= Valor
       | ExpUnaria
       | ExpBinaria
       | LeftExpression
       | This

Valor ::= ValorConcreto

ValorConcreto ::= ValorInteiro
       | ValorBooleano
       | ValorString
       | ValorNull

ExpUnaria ::= - Expressao
       | not Expressao
       | length Expressao

ExpBinaria ::= Expressao + Expressao
       | Expressao - Expressao
       | Expressao and Expressao
       | Expressao or Expressao
       | Expressao == Expressao
       | Expressao ++ Expressao

LeftExpression ::= Id | AcessoAtributo

AcessoAtributo ::= LeftExpression.Id
       | this.Id

ListaDeclaracaoOO ::= DecClasse
       | DecClasse “,” ListaDeclaracaoOO

DecClasse ::= “classe” Id [“extends” Id] “{“ DecVariavel “;” DecConstrutor “,” DecProcedimento “}”

DecConstrutor ::= Id “(“ ListaDeclaracaoParametro “)” “{“ Comando “}”

DecVariavel ::= Tipo Id “=” Expressao
       | DecVariavel “,” DecVariavel
       | Tipo Id “:=” “new” Id

DecProcedimento ::= “proc” Id “(“ ListaDeclaracaoParametro “)” “{“ Comando “}”
       | DecProcedimento “,” DecProcedimento

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

Tipo ::= TipoClasse | TipoPrimitivo

TipoClasse ::= Id

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

Parser

OO2

Classes Auxiliares

ConstrutorNaoDeclaradoException
AmbienteCompilacaoOO2
AmbienteExecucaoOO2
ContextoCompilacaoOO2
ContextoExecucaoOO2
DefClasseOO2
SuperClasseMap