| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2009 06:06:20
|
nellaf
Thread.start()
Membro desde: 18/04/2009 23:54:51
Mensagens: 32
Offline
|
Boas
Será que alguém me pode ajudar com este código onde quero calcular o valor de uma expressão em postfix,isto é o que tentei fazer e acho que está perto do código correct:
Desde já muito obrigado
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2009 08:30:54
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
Oi nellaf,
Bem, existiam alguns erros tanto da lógica da manipulação da pilha e do método em sí.
Abaixo coloco o código corrigido e comentado
Algumas observações.
Se vc quiser mesmo um parser para expressões pós-fixadas em que a precedência dos operadores deve ser respeitada, que se possa usar parênteses e os números não estejam apenas nas unidades (apenas um dígito) vc vai precisar melhorar um pouco sua estrutura e trabalhar com reconhecimento de gramáticas.
Por exemplo, a gramática:
Reconhece expressões desse tipo (mas com números de um dígito)
Mudando um pouquinho ela conseguimos reconhecer números inteiros de vários dígitos.
Mas como falei, para reconhecer esse tipo de estrutura vc precisa melhorar um pouco seu método, construindo para isso um analizador léxico e um sintático. Entretanto, acho que o que vc quer mesmo é só fazer expressões simples como 45+ 76- 97* 29/
Para isso, o que eu te passei já resolve. Note também que não usei uma notação formal para as gramáticas. Ah, e não esquecendo de dize que ep é o símbolo vazio (epson). É possível reconhecer os parênteses usando a pilha, acho até que é possível tratar a precedência da forma que você está fazendo, mas acho que um analisador ficaria mais fácil de entender.
[]´s
P.S. Faltou falar também que as gramáticas que passei reconhecem expressões infixadas.
P.S.2 Faltou a produção inicial das gramáticas. Já arrumei
This message was edited 8 times. Last update was at 05/12/2009 09:52:01
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2009 16:07:54
|
nellaf
Thread.start()
Membro desde: 18/04/2009 23:54:51
Mensagens: 32
Offline
|
Muito obrigado, já funciona correctamente.
Agora estava a querer fazer o mesmo para calcular a partir do preFixa, é possivel?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2009 23:01:56
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
nellaf wrote:Muito obrigado, já funciona correctamente.
Agora estava a querer fazer o mesmo para calcular a partir do preFixa, é possivel?
É possível sim.
Seria algo como:
Perceba que não há necessidade de usar uma pilha. Como lhe falei, seria melhor vc usar um esquema de análise mais robusto pois esse algoritmo que está usando é muito simples e muito pouco flexível.
Vou preparar um código aqui para reconhecimento da primeira gramática que postei no post anterior. Logo posto para vc.
[]´s
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2009 23:43:35
|
nellaf
Thread.start()
Membro desde: 18/04/2009 23:54:51
Mensagens: 32
Offline
|
Eu sou iniciante em java e talvez por isso o algoritmo seja muito simples. Por acaso conclui a pouco o algoritmo para o prefixa, é o seguinte:
Poderia dizer o que cada case está a fazer, é que não estou a conseguir ler a lógica do algoritmo.
Pode ver outro post meu em http://www.guj.com.br/posts/list/146336.java e ver se é possivel simplificar ou alterar alguma coisana classe ArvExp.java?
Muito obrigado
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2009 23:55:38
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
Fiz o exemplo da gramática:
É analisador léxico e sintático muuuuuito simples para expressões com as operações de adição e multiplicação, respeitando a precedência dos operadores e o uso de parênteses.
Se quiser colocar as outras operações é só queimar um pouco de fosfato
[]´s
This message was edited 2 times. Last update was at 04/12/2009 23:57:36
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/12/2009 22:57:08
|
nellaf
Thread.start()
Membro desde: 18/04/2009 23:54:51
Mensagens: 32
Offline
|
davidbuzatto wrote:
nellaf wrote:Muito obrigado, já funciona correctamente.
Agora estava a querer fazer o mesmo para calcular a partir do preFixa, é possivel?
É possível sim.
Seria algo como:
[code...[/code]
Perceba que não há necessidade de usar uma pilha. Como lhe falei, seria melhor vc usar um esquema de análise mais robusto pois esse algoritmo que está usando é muito simples e muito pouco flexível.
Vou preparar um código aqui para reconhecimento da primeira gramática que postei no post anterior. Logo posto para vc.
[]´s
Obrigado por tudo...
Poderia ver outro post meu (http://www.guj.com.br/posts/list/146336.java) a ver se há maneira de simplificar a classe AevExp.class??
Obrigado
|
|
|
 |
|
|