Literal Int/Float em atribuição
otaviojacobi opened this issue · comments
@schnorr Como dito na aula de definição do trabalho, houve uma modificação em que, por exemplo, +3 não deve ser reconhecdo como TK_LIT_INT mas sim como o caractere especial '+' seguido de um TK_LIT_INT. Dado isso, devemos fazer a mudança respectiva na expression para que seja aceito que +3 ou -3 também seja uma expression ? Ou isso só seria possivel de fazer em uma atribuição como em
name int = +3;
E aí devemos modificar a atribuição para além de receber uma expressão poder receber um '+' ou '-' seguido de um TK_LIT_INT/FLOAT ?
Em primeiro lugar, acredito que a entrada name int = +3
não faça parte da gramática, pois estamos declarando uma variável name
do tipo int
e ao mesmo tempo inicializando ela. Seguindo a gramática descrita na Especificação da Etapa 2, essa inicialização deveria ser com o operador <=
, portanto assim: name int <= +3
(assumindo que tal comando não seja global).
Quanto ao questionamento principal, as sequências +3
e -3
devem ser de fato reconhecidas, cada uma, como dois tokens na Etapa 2 (isso potencialmente leva a pequena modificações no que foi realizado na etapa inicial). Nesse sentido, nós poderíamos fazer com que o token +
(e -
) seja unário, além de binário quando utilizado em soma por exemplo. Veja #53 para uma lista de operadores unários, binários e ternários. Veja f94f61b para um detalhamento.