Sintaxe da Linguagem
Programa ::= "{" [ Declaracoes ";" ] Comando "}"
Declaracoes ::= DecInterface
| DecClasse
| Declaracoes "," Declaracoes
DecInterface ::= "interface" Id [ "extends" Id ] "{" ListaAssinaturasMetodos "}"
ListaAssinaturaMetodo ::= AssinaturaMetodo
| AssinaturaMetodo "," ListaAssinaturaMetodo
AssinaturaMetodo ::= modAcesso "proc" Id "(" [ListaDeclaracaoParametro] ")"
DecClasse ::= DecClasseAbstrata
| DecClasseConcreta
DecClasseAbstrata ::= "abstract" "classe" Id [ "extends" Id ] "{" CorpoClasseAbstrata "}"
CorpoClasseAbstrata ::= DecVariavel
| DecProcedimento
| CorpoClasseAbstrata ";" CorpoClasseAbstrata
DecClasseConcreta ::= "classe" Id [ "extends" Id ] ["implements" ListaInterface] "{" CorpoClasseConcreta "}"
ListaInterface ::= Id
| Id "," ListaInterface
CorpoClasseConcreta ::= DecVariavel
| ListaDecProcConcreto
| CorpoClasseConcreta ";" CorpoClasseConcreta
DecProcedimento ::= DecProcConcreto
| DecProcAbstrato
| DecProcedimento "," DecProcedimento
DecProcConcreto ::= AssinaturaMetodo "{" Comando "}"
DecProcAbstrato ::= "abstract" AssinaturaMetodo
ListaDecProcConcreto ::= DecProcConcreto
| DecProcConcreto "," ListaDecProcConcreto
Comando ::= AtribuicaoOO2
| ComDeclaracao
| While
| IfThenElse
| IO
| Comando ";" Comando
| Skip
| New
| ChamadaMetodoOO2
Skip ::=
ComDeclaracao ::= "{" DecVariavel ";" Comando"}"
While ::= "while" Expressao "do" "{" Comando "}"
IfThenElse ::= "if" Expressao "then" "{" Comando"}"
| "if" Expressao "then" "{" Comando"}" "else" "{" Comando"}"
ChamadaMetodoOO2 ::= Expressao "." Id "(" ListaExpressao ")"
| Expressao "." Id "("")"
ListaExpressao ::= Expressao
| Expressao "," ListaExpressao
New ::= LeftExpression ":=" "new" Id
AtribuicaoOO2 ::= LeftExpression ":=" Expressao
IO ::= "write" "(" Expressao ")"
| "read" "(" Id ")"
Expressao ::= Valor
| ExpUnaria
| ExpBinaria
| LeftExpression
| this
| super
| Cast
Cast ::= LeftExpression ":=" "(" TipoClasse ")" Expressao
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
| Expressao "instanceof" Expressao
LeftExpression ::= Id AcessoAtributoOO2
AcessoAtributoOO2 ::= LeftExpression.Id
| "this."Id
| "super."Id
DecVariavel ::= Tipo Id "=" Expressao
| DecVariavel "," DecVariavel
| Tipo Id ":=" "new" Id
ListaDeclaracaoParametro ::= Tipo Id
| Tipo Id "," ListaDeclaracaoParametro
Tipo ::= TipoClasse
| TipoPrimitivo
TipoClasse ::= Id
TipoPrimitivo ::= "string"
| "int"
| "boolean"
modAcesso ::= "public"
| "private"

Arquivos Auxiliares
plp.interfaceclasseabstrata.parser
Parser - InterfaceClasseabstrata.jj
plp.interfaceclasseabstrata.excecoes
AssinaturaJaDeclaradaException.java
AssinaturaNaoDeclaradaException.java
InterfaceJaDeclaradaException.java
InterfaceNaoDeclaradaException.java

Centro de Informática - UFPE