Função eval com celUtil e celTS ao mesmo tempo?

Função eval com celUtil e celTS ao mesmo tempo?

por Thiago Gomes -
Número de respostas: 4

A função eval é a função que realiza os cálculos das expressões, mas neste EP vamos ter variáveis atribuições. Uma operação como:

b = b + a 

É convertida para:
b b a + =

Quem calcula isso é a eval certo? Só que nesse caso a eval tá recebendo uma lista ligada com cabeça do tipo celTS.

Há momentos em que temos expressões com variáveis, que são do tipo celTS, e números que são celUtil.

Tá certo isso? Terei que "adaptar" minha função eval para trabalhar com dois tipos de célula?

Isso é basicamente reescrever ela inteira. XD
Em resposta à Thiago Gomes

Re: Função eval com celUtil e celTS ao mesmo tempo?

por Gustavo Estrela de Matos -

Pelo o que eu entendi é sim. Na verdade a parte que você vai ter que reescrever bastante é a que faz a operação em si, mas mesmo assim depois que você faz a função para um operador unários e um binário é só ctrl+c ctrl+v.

Em resposta à Gustavo Estrela de Matos

Re: Função eval com celUtil e celTS ao mesmo tempo?

por Thiago Gomes -

Hmmm, tendi... Eu tava usando 3 ponteiro do tipo CelUtil nessa função, só que se a célula for CelTS, vou ter que usar um ponteiro CelTS. Além disso, a estrutura CelUtil tem um campo prox que aponta para uma CelUtil. E se a próxima for CelTS? x.x

Em resposta à Thiago Gomes

Re: Função eval com celUtil e celTS ao mesmo tempo?

por Gustavo Estrela de Matos -

Você não vai precisar de ponteiro CelTS porque a lista é de células do tipo celUtil, mesmo as que estão "relacionadas" a variaveis. O que diferencia ela e o que já diferenciava float de operador. No campo classe, quando for uma célula "relacionada" a uma variável, estará indicado ID_STR e o campo item dessa célula terá uma string que você irá usar para identificar, em ts.c a célula que tem esse nome, e daí fazer as operações. Se você não fez ts.c, eu recomendo, porque fica mais fácil de entender o que fazer na eval.c 

Em resposta à Thiago Gomes

Re: Função eval com celUtil e celTS ao mesmo tempo?

por Gabriel Ogawa -

Todas as expressões posfixas deveriam ser formadas apenas de estruturas do tipo CelUtil (a eval sempre recebe uma lista de CelUtil). Quando uma CelUtil representa uma variável, ela será do tipo ID_STR e conterá uma string com o nome da variável que ela representa.

Com esse nome você consegue, usando funções da ts.c, encontrar o valor em float da variável e alterar o valor em float da variável. Todo o tratamento de CelTS deveria ser feito na ts.c, até onde eu entendi.