Tramalho

Disponível somente no TrabalhosFeitos
  • Páginas : 9 (2071 palavras )
  • Download(s) : 0
  • Publicado : 28 de março de 2013
Ler documento completo
Amostra do texto
Conversão e Resolução de Expressões Aritméticas
Uma expressão aritmética é um conjunto de operandos e operadores, como os exemplos abaixo:
1) A
2) A + B
3) A – B * C ^ D + E / F
4) C – A / E + B
Os operandos, nos exemplos acima, são representados por letras. Os operadores são os sinais das
operações.
Normalmente, os operadores são binários, ou seja, eles atuam sobre dois operandos. Dessamaneira,
pode-se dizer que uma expressão é composta por duas sub-expressões mais simples, unidas por meio
de um operador binário. Por sua vez, cada sub-expressão pode ser também composta por outras subexpressões, unidas por outros operadores, e assim por diante, até que se chegue à expressão mais
simples de todas, formada por apenas um operando, como a expressão 1 da lista acima.
AS expresões1 e 2 são as mais simples. Mas as duas seguintes podem conduzir a ambiguidades. Tanto
se pode imaginar a sub-expressão A-B*C^D+E/F como significando A menos o resultado de B vezes C
dividido por D somado a E dividido por F, quanto A menos B, multiplicado por C dividido por D mais E, e
tudo isso dividido por F.
Para evitar as ambiguidades, é atribuído a cada operador uma precedência, ouprioridade, sobre os
demais. Assim,
Operação
Potenciação
Multiplicação e Divisão
Soma e Subtração

Operador
^
*e/
+e-

Precedência
1
2
3

ou seja, a operação de potenciação tem precedência sobre as demais, e as operações de soma e
subtração têm precedência igual entre si, e em relação às outras três, são as menos prioritárias.
Assim, as expressões 1 a 4, dadas acima, significam oseguinte:
1) O valor de A
2) A somado a B
3) C elevado a D, multiplicado por B, somado a E dividido por F. Tudo isso é subtraído de A
4) A dividido por E, somado a B, tudo isso subtraído de C
Mas, e se quiséssemos alterar estes resultados, ou melhor, se fosse necessário mudar a ordem ditada
pelas precedências? Então, seria preciso usar parênteses. Logo, os parênteses servem para alterar asprecedências. Portanto, temos nova tabela de precedências:
Operação
Parentização
Potenciação
Multiplicação e Divisão
Soma e Subtração

Operador
(
^
*e/
+e-

Precedência
1
2
3
4

Portanto, poderíamos ter as expressões
3) (A - (B * (C ^ D)) + (E / F)) (Idem à anterior)

ou
(((A - B) *C) ^ D + E) / F
diferindo no resultado final, devido ao uso de parênteses em diferentes posiçõesda expressão.
As expressões apresentadas são chamadas de expressões de notação infixa, pois os operadores estão
entre os operandos.
operador infixo
A+B

Expressão com notação infixa

operando 1

operando 2

Quando se começou a escrever os primeiros compiladores para linguagens de alto nível, a avaliação de
expressões aritméticas trouxe uma série de problemas de solução difícil. Eramuito difícil solucionar uma
expressão como a do 3º e 4º exemplos. Isto dificultou bastante a escrita de comandos aritméticos de
muitas linguagens, como COBOL, por exemplo.
Em COBOL, os comandos aritméticos, em geral, só permitem o uso de um operador. Logo, as
expressões mais complexas, com vários operadores, nem sempre com a precedência normal, devem
ser feitas por partes. Por exemplo, aexpressão aritmética abaixo seria escrita, em COBOL, com os
comandos após a expressão:
4)

A

+

(B

*
aux

C)

/

(K

+
aux2

G)

aux
aux
Essa expressão, em COBOL, seria escrita com os comandos abaixo:
Multiply B by C giving aux
Add K, G giving aux2
Divide Aux by aux2 giving aux
Add A to aux
Assim, havia uma restrição forte às expressões aritméticas complexas, que tinhamque ser escritas em
várias partes separadas. Isto facilitava o trabalho do compilador, mas complicava a parte do
programador. Note como o programador tinha de decompor a expressão em suas sub-expressões
básicas, e calculá-las separadamente, antes de chegar ao resultado final.
O uso de expressões infixas com parênteses complica ainda mais a análise do compilador.
Em 1951, um matemático...
tracking img