schnorr / comp

Disciplina de Compiladores (INF01147) - INF/UFRGS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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:

  1. Essa abordagem é realmente a correta?
  2. Se sim, algo como 3.1e-10 não deve retornar um token de float, mas os tokens float (3.1e), - e inteiro 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.