(Created page with "== Problema == == Solução == category:Compiladores category:Ensino") |
(→Problema) |
||
Line 1: | Line 1: | ||
== Problema == | == Problema == | ||
+ | Pretende-se fazer uma calculadora de expressões lógicas usando a interpretação dirigida pela sintaxe. A calculadora utiliza 10 variáveis designadas pelos números 0 a 9 da variável ival associada ao token '''VAR'''. Os literais verdadeiro e falso são designados pelos tokens '''VERD''' e '''FALS''', respectivamente. O cálculo é efectuado através de uma sequência de expressões terminadas por ';' ou ',' consoante o resultado da expressão deva ser impresso ou não, respectivamente. A atribuição de uma expressão a uma variável é efectuada pelo operador '=', não associativo. As expressões utilizam os seguintes operadores, por ordem decrescente de prioridade: | ||
+ | |||
+ | * '''negação lógica:''' | ||
+ | operador unário pré-fixado, não associativo, designado por '!'. | ||
+ | |||
+ | * '''E lógico:''' | ||
+ | operador binário, associativo à esquerda, designado por '&'. | ||
+ | |||
+ | * '''OU inclusivo lógico:''' | ||
+ | operador binário, associativo à esquerda, designado por '|'. | ||
+ | |||
+ | * '''OU exclusivo lógico:''' | ||
+ | operador binário, associativo à direita, designado por ' ~ '. | ||
+ | |||
+ | * '''comparação:''' | ||
+ | operadores binários, associativos à esquerda, designados por '>', '<', EQ e NE. | ||
+ | |||
+ | A prioridade dos operadores pode ser alterada utilizando parenteses curvos '(' e ')'. No início todos os registos têm o valor lógico falso. | ||
+ | |||
+ | Todas as rotinas auxiliares devem ser codificadas. | ||
== Solução == | == Solução == |
Pretende-se fazer uma calculadora de expressões lógicas usando a interpretação dirigida pela sintaxe. A calculadora utiliza 10 variáveis designadas pelos números 0 a 9 da variável ival associada ao token VAR. Os literais verdadeiro e falso são designados pelos tokens VERD e FALS, respectivamente. O cálculo é efectuado através de uma sequência de expressões terminadas por ';' ou ',' consoante o resultado da expressão deva ser impresso ou não, respectivamente. A atribuição de uma expressão a uma variável é efectuada pelo operador '=', não associativo. As expressões utilizam os seguintes operadores, por ordem decrescente de prioridade:
operador unário pré-fixado, não associativo, designado por '!'.
operador binário, associativo à esquerda, designado por '&'.
operador binário, associativo à esquerda, designado por '|'.
operador binário, associativo à direita, designado por ' ~ '.
operadores binários, associativos à esquerda, designados por '>', '<', EQ e NE.
A prioridade dos operadores pode ser alterada utilizando parenteses curvos '(' e ')'. No início todos os registos têm o valor lógico falso.
Todas as rotinas auxiliares devem ser codificadas.