schnorr / comp

Disciplina de Compiladores (INF01147) - INF/UFRGS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.