Este projeto tem como objetivo atender à disciplina de Paradigmas de Linguanges de Programação, ofertado pelo CIN na UFPE no semestre 2023.1
Este projeto estende as linguagens Funcional 1 com operadores para manipulação de listas. As funções são as seguintes:
- Verifica de sequencia: Dado uma lista de inteiro como entrada, a função verifica se a lista está em sequencia ou não.
Input: [1,2,3,4,6]
Output: true
Input: [1,2,10,4,6]
Output: false
Input: [1,2,3,4,6,9]
Output: false
- Verifica pareamento: Dado uma lista de caracteres como entrada, a função verifica se os caracteres iguais estão lado a lado.
Input: [1,1,2,2,3,3,4,4]
Output: true
Input: [1,1,3,4,6,9]
Output: false
- Contagem de similares: Dado duas listas como entrada, a função retorna quantas posições são iguais.
Input: [1,1,2,2,3,3,4,4] , [1,1,2,2,5,5,4,4]
Output: 6
Input: [1,9,2,3,3,3,4,4] , [1,9,2,3,5,5,7,4]
Output: 5
Programa ::= Expressao
Expressao ::= Valor | ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse
Valor ::= ValorConcreto
ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorLista
ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao | "..." Expressao | "&&&" Expressao
ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao | Expressao "???" Expressao
ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao
DeclaracaoFuncional ::= DecVariavel | DecFuncao | DecComposta
DecVariavel ::= "var" Id "=" Expressao
DecFuncao ::= "fun" ListId "=" Expressao
DecComposta ::= DeclaracaoFuncional "," DeclaracaoFuncional
ListId ::= Id | Id ListId
Aplicacao:= Id"(" ListExp ")"
ListExp ::= Expressao | Expressao, ListExp
IfThenElse ::= "if" Expressao "then" Expressao "else" Expressao
public boolean temParidade() {
for (int i = 1; i < this.valor().size(); i++) {
if (this.valor().get(i).equals(this.valor().get(i - 1))) {
return true;
}
}
return false;
}
public boolean ehSequencial() {
if (this.valor().isEmpty()) {
return true;
}
int primeiro = ((ValorInteiro)this.valor().get(0)).valor();
return ehSequencialAux(this.valor().subList(1, this.valor().size()), primeiro, 1);
}
private boolean ehSequencialAux(List<Expressao> lista, int primeiro, int indice) {
if (lista.isEmpty()) {
return true;
}
int atual = ((ValorInteiro)lista.get(0)).valor();
if (atual != indice + primeiro) {
return false;
}
return ehSequencialAux(lista.subList(1, lista.size()), primeiro, indice + 1);
}
public boolean contagemSimilares() {
//pegar os parametros, que sao a lista 1 e lista 2
if (lista1.size() != lista2.size()) {
return false;
}
for (int i = 0; i < lista1.size(); i++) {
if (!lista1.get(i).equals(lista2.get(i))) {
return false;
}
}
return true;
}
}
- Instalar Maven
sudo apt install maven -y
- Instalar JDK
sudo apt install openjdk-11-jdk
- Compilar .jj
java -cp ../../../../../../../javacc-7.0.10.jar javacc Functional1.jj
cd Funcional1
mvn clean generate-sources compile exec:java
- Applet
cd ..
mvn package
# Jar será gerado em ./Applet/target/
- Abrir Aplicação
# Acessar a pasta ./Applet/target/ e executar no terminal:
java -jar Funcional2-0.0.1.jar
- Laís Bandeira ([email protected])
- Victor Yuri ([email protected])