** trabalho de faculdade - urgente!

20 respostas
J

Olá pessoal

Eu e meu grupo temos que implementar em Java, um programa que reconheça expressões lógicas.

Temos que construir uma gramática ( GLC - Gramática Livre de Contexto ) e depois implementá-la em java.

Segue abaixo, algumas informações de como deverá ser nosso trabalho:


Descrição do problema

O tema da pesquisa é a Hierarquia de Chomsky, seus elementos com suas definições e relações. Além disto, deve ser feita uma implementação no contexto da gramática livre de contexto, usando a técnica da análise preditiva para produção de um software de reconhecimento de expressões lógicas.

Estas expressões devem ser terminadas por EOL, ou seja, aparecer uma em cada linha de um arquivo texto de entrada e podem conter: números binários de 1 dígito (0 ou 1) ou identificadores (ambos sem sinal), e as seguintes operações lógicas: conjunção ( ^ ), disjunção( v ), negação ( ? ), condicional ( -> ) e bicondicional ( <-> ).
São possíveis também parênteses e colchetes balanceados. Se acontecerem de forma aninhada, o colchetes devem estar sempre mais externos do que o parênteses.
Os identificadores devem ser formados apenas por letras.
A unidade de leitura da entrada de dados é o caractere, sendo assim a GLC deverá prever, através de regras próprias, a construção de todos os elementos usados no reconhecimento: números, identificadores, operadores, etc.

A saída do programa deverá ser o resultado da avaliação de cada expressão: se ok ou não. Em caso de erro (não reconhecimento da expressão), apresente além da mensagem de erro o número da linha que contém o erro, o caractere que provocou o erro e ainda qual(is) o(s) caractere(s) seriam esperados no ponto do erro.

Exemplo de arquivo de entrada:
1 v 0
x v (y -> z)
z <-> [x v (y ^ z)?]
Valor
1
1 ^
x ? y
(x <-> [y v x])

Saída:

  1. 1 v 0
    ok!

  2. x v (y -> z)
    ok!

  3. z <-> [x v (y ^ z)?]
    ok!

  4. Valor
    ok!

  5. 1
    ok!

  6. 1 ^
    erro na linha 6: foi encontrado fim de linha, mas era esperado um identificador, abre parênteses ou constante (1 ou 0)

  7. x ? y
    erro na linha 7: foi encontrado ?y?, mas era esperado um ?>?

  8. (x <-> [y v x])
    erro na linha 8: foi encontrado um ?[? mas era esperado um abre parênteses, uma constante (1 ou 0), ou um identificador.


Sugestões:

· O primeiro passo é a construção de uma gramática que reconheça uma expressão.
· O segundo passo é a reescrita desta gramática eliminando possíveis recursividades à esquerda e conflitos.
· Use o método readLine da classe BufferedReader para ler linha-a-linha do arquivo de entrada.
· Os métodos transformados a partir das variáveis da gramática serão estáticos. O processamento irá ser concentrado no main.
· O método reconheça, também estático, deverá trabalhar fazer a leitura caractere-a-caractere sobre a string que representa a expressão.


http://geocities.yahoo.com.br/hmcristovao/mapas/


Exemplo de aplicação da análise preditiva (explicado em aula)

Suponha a GLC:
S -> A <EOF> | <EOF>
A -> aA | bA | Bg
B -> cC
C -> B | DE
D -> dD | λ
E -> e | f
A expressão regular que denota a linguagem gerada é:

((a|b)c+d(e|f)g)?<EOF>

Esta GLC não tem conflito, ambigüidade e recursividade à esquerda, portanto pode-se aplicar a técnica da análise preditiva para geração do algoritmo:

função S() {
   se(próxCaracter==?a? ou próxCaracter==?b? ou próxCaracter==?c?) 
      A(); reconhece(<EOF>);
   senão se(próxCaracter==<EOF>)
      reconhece(<EOF>);
   senão
      imprime(?erro?);
)
função A() {
   se(próxCaracter==?a?)
      reconhece(?a?); A();
   senão se(próxCaracter==?b?)
      reconhece(?b?); A();
   senão se(próxCaracter==?c?)
      B(); reconhece(?g?);
)
função B() {
   reconhece(?c?); C();
)
função C() {
   se(próxCaracter==?c?) 
      B();
   senão se(próxCaracter==?d? ou próxCaracter==?e? ou próxCaracter==?f?) 
      D(); E();
}
função D() {
   se(próxCaracter==?d?) 
      reconhece(?d?); D();
   senão
      ;
}
função E() {
   se(próxCaracter==?e?)
      reconhece(?e?); 
   senão se(próxCaracter==?f?)
      reconhece(?f?); 
}

Obs.:  A função reconhece tem o objetivo de verificar se o próximo caractere é de fato o que foi passado como argumento. Se sim então  o próximo caracter e põe em próxCaracter, senão dispara uma mensagem de erro. 

função reconhece(caracter c) {
   se(próxCaracter == c)
      próxCaracter = lêPróximoCaracterDoArquivo();
   senão
      imprime(?erro?);
      sai_do_programa;
}

Nossa gramática livre de contexto está ficando assim até agora:

<binario> -> 1|0
<ident> -> A|…|Z|…|a|…|z| <ident> | <binario>
<op> -> ^|v|’|->|<->
<parente> -> (<parente>) | <ident> <op> <ident> ==> errado !!!
<colchete> -> [<colchete>] | <colchetes> <op> <colchete> | <ident>
<exp> -> <colchete> | <wcpar>
<wcpar> -> <parente> | x
<eol> -> <separa>


Então , é justamente esta gramática que a gente deve implementar em Java, ela ainda nao está pronta e está com erros, mas é mais ou menos assim que deve ficar.

Alguém pode nos ajudar ?

Alguém já fez algo parecido ?

Obrigado

t+

20 Respostas

J

Oi

Seguinte, pra ficar melhor coloca aí o seu nome completo, nome da faculdade, nome da disciplina e nome do professor… Assim da pra fazer até a capa pra vc… Vai ser preciso tb né???

:ykua: :ykua: :ykua: :ykua:

N

8O
Que moleza eihn!

J

Bom

se alguém quiser fazer a capa também pode fazer… mas faça no Corel Draw pra ficar mais bonita hahuahuhauahuahuahuahua


Falando sério

Ninguém do nosso grupo sabe Java, vamos começar amanhã a implementar o programa, por isso postei nossa duvida, assim de repente alguém ajuda a gente, pois afinal de contas : " uma mão lava a outra "

não precisa e nem deve dar o trabalho de mão beijada pra gente, mas apenas dar algumas dicas, sei lá dar uns pedaços de códigos… e o resto a gente se vira…

t+

AHHHH !!! PS: Favor usar a versão 11 do Corel kkkkkkkkkkkkk

valeu !!!

Ahe Jevaux, vamos marcar a gelada pô !!!

falou…

J

Opa

Da uma linha aqui :lol:

T+

C

:lol:

Complementando:

http://www.portaljava.com.br/home/modules.php?name=FAQ&myfaq=yes&id_cat=2&categories=Instru��es+de+uso+do+Portal+Java

D

Sem dúvida, uma mão lava a outra, de forma que quando alguém possui alguma dúvida, essa dúvida pode ser respondida aqui no fórum.

Se acaso vocês tiverem dúvidas relacionadas a Java quando tiverem fazendo este trabalho, podem postar aqui que não negaremos ajuda, mas fazer o trabalho de universidade para outros é complicado.

Acredito que grande parte das pessoas que contribuem no PJ quando entraram na universidade não sabiam Java e nem por isso deixaram de correr atrás e aprender.

E

henrique quanto mais te conheço mais eu me impressiono!!!
Vc realemnte e sem noçao kkkkkkkkkkkkkkkkkkkkkkkkkkkkk

J

mas heim

eu não to pedindo pra minguém fazer nosso trabalho, apenas to pedindo alguma ORIENTAÇÃO.

to pedindo se alguém já fez algo parecido , PARECIDO nao igual, pra gente dar uma olhada, sacou ???

sei lá, algum site, alguns códigos, nao queremos nada pronto nao, EU NÃO DISSE ISSO, apenas queremos algo parecido pra comecar-mos o nosso trabalho.

algumas referencias apenas, algo parecido,

um código ( um pedaço ) em java que reconheçe expressões lógicas.

Admiro vcs , que ficam zuando os usuários do fórum, isso pega mal pra vcs.

falou…

R

Eu fiz algo parecido, porém não reconhecia gramáticas pré estabelecidas, era como se eu criasse uma própria linguagem e criasse um compilador para ela…

Fiz isso na disciplina de IA… meu algoritmo reconhece algo como:

<SYMBOLS>
A: Dia nublado
B: Sol forte
C: Chuva
<RULES>
R1: ~A ^ B -> ~C
R2: A v B -> C
<END>

Ai depois disso tudo ele pergunta o que achar necessário (true or false) e depois visualiza os resultados… é “quase” um programa especialista…

Qual teu e-mail que eu te passo a lógica, caso seja útil…

J

OK

meu e-mail é:

[email removido]

obrigado

t+

M

[color=“indigo”]Só duas dúvidas :grin: :

:arrow: Esse trabalho é da matéria Compiladores???

:arrow: Que dia você tem q entregar isso???[/color]

J

o trabalho é da matéria linguagens formais e autômatos, que vem antes de compiladores, é pré-requisito pra compiladores.

é pra entregar semana que vem

t+

O

Putz, ninguém sabe java??? Como vcs chegaram tão longe nas cadeiras dessa faculdade??? Que faculdade é essa…

M

[color=“indigo”]Na minha faculdade a gente só aprende Java no 6 sesmestre, que é também, quando a gente pega Compiladores… :roll:

E ninguém é obrigado a saber Java, só a quem interessa saber… Tem gente q se bandeia pra area de Redes ou BD ou Computação Gráfica ou … e mesmo quem opta por desenvolver, existem inúmeras linguagens de programação piores, tão boas ou melhores que Java… :wink: [/color]

J

Isso ahe Marcela !!!

Valeu pela ajuda !!!

Ninguém aki ainda aprendeu Java, estamos iniciando ainda na linguagem…eu particularmente nao gosto e nem quero aprender Java, existem outras áreas da informática que me atraem mais do que desenvolvimento em Java.

Onolox: se vc se acha tão esperto e fodão, faça o trabalho pra gente então, a gente paga pelo seu serviço !!! vc não é o cara ???

Se alguém puder ajudar nosso grupo eu agradeço !!!

valeu

t+

O

Para a minha amiga Marcela, vc é SIM obrigado a saber java se vc está querendo fazer algo em java!

E para o nosso amigo JHedimo… É por gente que nem vc que a área de informática está tão poluída de gente incompetente. O que na verdade é bom pra mim… e pra outros BONS profissionais… então… obrigado pra vc que é menos um pra competir comigo!

:lol:

D

Pô pessoal, calma aí. Não vamos discutir por tão pouca coisa. Se for para discutir, vamos falar sobre Java que é bem melhor.

J

OK

onolox:

Concordo com vc, que para ser um bom profissional, o cara tem que saber de tudo ( pelo menos um pouco ) e quanto mais souber melhor.

Mas concerteza deve existir alguma área da informática que vc nao goste ( ex: manutenção, programação em fortran , ou outro tipo de trabalho ).

Eu não sou obrigado a saber, a aprender uma coisa que eu nao gosto, que eu nao quero aprender. Nao tenho planos em trabalhar nesta área, entao nao vou queimar meus neurônios atoa, vou aprender uma coisa que eu gosto, uma área em que eu quero trabalhar.

Parabéns pra vc Onolox, vc deve ser um ÓTIMO profissional, deve saber de tudo e mais um pouco na área de informática.

Continue assim, sendo simpático e entendendo a opção de carreira de seus colegas de fórun, pois isso também ajudará muito na sua careira .

Bom parabéns de novo pela sua simpatia e respeito para conosco.

valeu gentem

t++

J

Ta ta ta ta

Cada um vira seus flames pra outro lado, procurem trabalhos prontos no Google, pq aqui é uma comunidade de ajuda, não de Consultoria (procurem isso no JavaSoft, vão achar um bom profissional lá)…

T+

C

“jeveaux”:
Ta ta ta ta

Cada um vira seus flames pra outro lado, procurem trabalhos prontos no Google, pq aqui é uma comunidade de ajuda, não de Consultoria (procurem isso no JavaSoft, vão achar um bom profissional lá)…

T+

Parece o Prof. Girafales! haeuhaeuhuahuaehaueh!!! :lol:

Criado 13 de junho de 2005
Ultima resposta 17 de jun. de 2005
Respostas 20
Participantes 9