schnorr / comp

Disciplina de Compiladores (INF01147) - INF/UFRGS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Operadores unários e binários

lanahra opened this issue · comments

É relevante para a realização da etapa 2 diferenciar quais operadores são unários, quais são binários, e quais pertencem aos dois grupos. Entretanto, na especificação da etapa 1, foi dito apenas que alguns caracteres eram "especiais". Fiz uma relação baseada em outras linguagens do possível valor semântico dos operadores, e se são unários ou binários.

Unário:

  • - inverte o sinal
  • ! negação lógica
  • & acesso ao endereço da variável
  • * acesso ao valor do ponteiro

Binário:

  • + soma
  • - subtração
  • * multiplicação
  • / divisão
  • % resto da divisão
  • | bitwise OR
  • & bitwise AND
  • ^ exponenciação
  • > maior que lógico
  • < menor que lógico

Não sei:

  • ?
  • #

Essa relação está correta? Essa relação está completa? Qual é significado semântico dos operadores? Quais são binários e quais são unários?

Os operadores aritméticos tais como - e + (e lógicos tais como a negação !) podem de fato ser unários em situações tais como x = -y. Sendo assim, expressões artiméticas e lógicas devem prever esses cenários. Isso não está explícito na especificação (e muito menos se fala em semântica dos operadores) pois estamos assumindo que tais expressões (aritméticas e lógicas) são bastantes similares pouco importando a linguagem imperativa e que a análise semântica (onde vinculamos significado aos operadores) vem depois. Então essa lista está apropriada pois como disseste se baseia em outras linguagens.

Seria também necessário prever o operador ternário, no estilo
(a == 5 ? 'a' : 'b')
?

@D-to-the-K, vejo com bons olhos a preparação da gramática para reconhecer o operador ternário, na forma expressão ? expressão : expressão, mas ela não é fundamental. Considero portanto como um esforço do grupo de ir além da especificação.

Veja f94f61b, que torna explícito os regramentos sobre operadores.