Programa ::= "{" DecClasse ";" Comando "}"

Comando ::= Atribuicao

| 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

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

DecClasse ::= "classe" Id "{" DecVariavel ";" DecProcedimento "}"

| DecClasse "," DecClasse

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"

Código JJ do Parser

OO1.jj

Gramática utilizada pelo parser

Arquivos Auxiliares

plp.orientadaObjetos1.comando

Procedimento

ChamadaProcedimento

plp.orientadaObjetos1.declaracao

Declaracao

plp.orientadaObjetos1.declaracao.classe

plp.orientadaObjetos1.declaracao.procedimento

plp.orientadaObjetos1.declaracao.variavel

plp.orientadaObjetos1.excecao

plp.orientadaObjetos1.excecao.declaracao

ClasseJaDeclaradaException

ClasseNaoDeclaradaException

ObjetoJaDeclaradoException

ObjetoNaoDeclaradoException

ProcedimentoJaDeclaradoException

ProcedimentoNaoDeclaradoException

VariavelJaDeclaradaException

VariavelNaoDeclaradaException

plp.orientadaObjetos1.excecao.execucao

EntradaNaoFornecidaException

EntradaInvalidaException

plp.orientadaObjetos1.expressao

plp.orientadaObjetos1.expressao.binaria

plp.orientadaObjetos1.expressao.leftExpression

plp.orientadaObjetos1.expressao.unaria

plp.orientadaObjetos1.expressao.valor

ValorRef

plp.orientadaObjetos1.memoria

AmbienteOO1

AmbienteCompilacaoOO1

AmbienteExecucaoOO1

ContextoCompilacaoOO1

ContextoExecucaoOO1

DefClasse

Objeto

plp.orientadaObjetos1.memoria.colecao

HashIdDefClasse

HashIdListaDeclaracaoParametro

HashIdProcedimento

HashIdTipo

HashIdValor

HashValorObjeto

ListaValor

StackHashIdDefClasse

StackHashIdListaDeclaracaoParametro

StackHashIdProcedimento

StackHashIdTipo

StackHashIdValor

StackHashValorObjeto

plp.orientadaObjetos1.util

ListaTipo

Testes com o JUnit

plp.orientadaObjetos1.testes

AllTests

OO1ParserTest

 

Programas utilizados nos testes:

Teste 1

Teste 2

Teste 3

Teste 4

Teste 5

Teste 6

Teste 7