schnorr / comp

Disciplina de Compiladores (INF01147) - INF/UFRGS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Esclarecimento sobre operadores

AvatarHurden opened this issue · comments

Nessa etapa precisamos saber qual o comportamento de cada um dos operadores da linguagem (unários, binários e ternário). Em nenhum momento, porém, foi dito o que eles fazem ou em quais tipos operam. Dessa forma, segue a lista de dúvidas que tive sobre cada um:

  1. Quais são os tipos que podem ser comparados por igualdade? Por padrão, presumi que seriam quaisquer tipos, desde que sejam iguais ou numéricos (float, int e bool).

  2. De forma similar, quais podem ser comparados por desigualdade? Dessa vez, presumi que apenas os numéricos e chars.

  3. Em que tipos podem operar & (Bitwise AND) e | (Bitwise OR)?

  4. Os pipes devem verificar que os tipos das funções são coerentes? Ou seja, é preciso que o tipo de retorno da primeira função seja usado no input da segunda? Caso a segunda função não use o retorno da primeira (com o .), isso deve ser considerado um erro?

  5. Sobre pipes, qual exatamente é a diferença entre os dois tipos?

  6. Os operadores unários * e &, se forem iguais ao do C, operam sobre ponteiros. Na linguagem, porém, não existe o conceito de ponteiros. O que fazem esses operadores, então, e quais são os tipos que aceitam?

  7. O que faz o operador #?

Vamos lá novamente @AvatarHurden:

  1. Quaisquer tipos
  2. Quaisquer tipos
  3. Quaisquer tipos
  4. Sim, devemos verificar a coerência (veja também a resposta ao item 3 do #70). O uso do . não é obrigatório no que vem depois do pipe.
  5. Eles se inspiram de pacotes da linguagem R.
    • O magrittr apresenta o operador %>%,
    • enquanto que o pacote operators apresenta o %|%.
  6. Sem uso por enquanto (no léxico defino um superset grande de tokens para ter uma liberdade maior na especificação da linguagem das etapas seguintes)
  7. Nada, por enquanto.