Pergunta

Estou testando um conversor de infix a postfix-infix e encontrei algum tipo de incerteza. Por exemplo, uma soma simples de infix

1 + 2 + 3 + 4

pode ser convertido para pós -fixo um

1 2 + 3 + 4 +

Supondo que os operadores com igual precedência não sejam acumulados. Se eles são, então eu entendo

1 2 3 4 + + +

Por outro lado, todas as seguintes expressões pós -fix podem ser convertidas para a soma inicial

1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +

Todas essas expressões pós -fix estão corretas?

Atualização1

Se você fizesse esse conversor, a qual formulário você escolheria? Eu preciso escolher um para teste.

Foi útil?

Solução

Você precisa definir uma restrição extra.

Matematicamente, suas expressões postfix são todas iguais. Mas em uma adição inteira de computador não é realmente comutativa por causa do transbordamento.

Substitua 1 2 3 4 pelo ABCD e considere a possibilidade de transbordamento. A maioria das linguagens de programação define isso a + b + c + d deve ser avaliado da esquerda para a direita para que a b + c + d + é a única tradução correta.

Somente quando você define que a ordem de avaliação não é "não especificada", todas as versões postfix são equivalentes. Esse foi o caso de compiladores (mais antigos) C.

Outras dicas

Sim, tudo correto. Eles correspondem às seguintes expressões de infix entre colchetes:

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))

+ é confuso - é comutativo, então, de fato, todo resultado parece correto.

Considere a substituição + com outros operadores: 1 a 2 b 3 c 4.
O resultado correto aqui, para operadores associativos à esquerda, é

1 2 a 3 b 4 c

Então, no seu caso, eu esperaria 1 2 + 3 + 4 +

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top