quinta-feira, 21 de setembro de 2017

Construindo um PARSER em javascript - II

No primeiro post  desta série tomamos conhecimento da lógica do Parser de expressões, sem nos preocupar em solucionar a expressão lida. Neste post faremos o equate, ou seja, vamos rastrear a expressão transformada e armazenada na variável textoConv e resolver cada par de operações para obter o resultado final.

Diagrama teórico

A ordem de resolução de uma expressão, ainda sem levar em conta os parênteses, obedece a um conjunto de prioridades, mostrado a seguir:


Nossas explicações vão ser dadas em torno do exemplo fornecido no primeiro post (90*2-80*3).

Procedimento teórico

Os passos para o procedimento equate resolver a expressão estão esquematizados abaixo:


Início

O equate procura o operador de exponenciação "^".
Não acha.

Passo 1

O equate procura o operador de multiplicação "*" e acha.
O equate utiliza o operador como referencial e extrai o lado esquerdo (V03) e o lado direito (V04).
O equate efetua a multiplicação e armazena o resultado no lado esquerdo (V03).
O equate zera o lado direito (V04).
Agora a expressão resultante é V01*V02+V03.

Passo 2

O equate procura o operador de multiplicação "*" e acha.
O equate utiliza o operador como referencial e extrai o lado esquerdo (V01) e o lado direito (V02).
O equate efetua a multiplicação e armazena o resultado no lado esquerdo (V01).
O equate zera o lado direito (V02).
Agora a expressão resultante é V01+V03.

Passo 3

O equate procura o operador de adição "+" e acha.
O equate utiliza o operador como referencial e extrai o lado esquerdo (V01) e o lado direito (V03).
O equate efetua a adição e armazena o resultado no lado esquerdo (V01).
Agora a expressão resultante é V01.

O Resultado final é o conteúdo da variável de array V01.

No próximo post explicaremos o equate (resolução da expressão).

Conclusão

Neste tipo de procedimento de resolução de expressões não temos as ineficientes e complexas etapas de colocação da equação em árvores hierárquicas. As próprias estruturas que armazenam as variáveis vão sendo resumidas, até que reste apenas o elemento que atende pelo índice V01, onde fica o resultado final.

O rastreamento dos ramos das árvores binárias de expressões é algo mais elegível para o ladop da elegância do que da praticidade.





Nenhum comentário:

Postar um comentário