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
Classes Auxiliares
ConstrutorNaoDeclaradoException
AmbienteCompilacaoOO2
AmbienteExecucaoOO2
ContextoCompilacaoOO2
ContextoExecucaoOO2
DefClasseOO2
SuperClasseMap