Como diferenciar a aridade de operadores `-` e `+`
schnorr opened this issue · comments
Dúvida de aluno. Na etapa 1, algo como 3-3
era reconhecido como dois tokens de inteiros (3
e -3
), pois -3
é um inteiro válido. Porém, isso deveria ser reconhecido como três tokens: inteiro, -
e inteiro. Garimpei essa pergunda no StackOverflow. Nesse caso, a resposta mais aceita diz que isso não é papel do scanner e sim do parser. O scanner deve retornar algo como -3
como dois tokens: -
e inteiro. Depois, o parser deverá fazer o reconhecimento disso como um inteiro negativo. Minhas dúvidas são:
- Essa abordagem é realmente a correta?
- Se sim, algo como
3.1e-10
não deve retornar um token de float, mas os tokensfloat
(3.1e),-
einteiro
e o parser identificar isso como um float?
Para a questão 1, sim, o scanner deve ser alterado para não mais reconhecer números inteiros (e ponto flutuantes) precedidos de sinal, pois caso o faço fica impossível para o parser diferenciar a aridade desses operadores de uma maneira simples. Isso não se aplica a questão 2, pois no caso de 3.1e-10
o sinal -
faz parte inerente deste ponto flutuante em notação científica.