The YACC Parser Generator/Exercise 4: Difference between revisions
From Wiki**3
< The YACC Parser Generator
Line 6: | Line 6: | ||
* '''OU inclusivo 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 ' ~ '. | * '''OU exclusivo lógico:''' operador binário, associativo à direita, designado por ' ~ '. | ||
* '''comparação:''' operadores binários, associativos à esquerda, designados por EQ e NE. | * '''comparação:''' operadores binários, '==', e '!=', 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. | A prioridade dos operadores pode ser alterada utilizando parenteses curvos '(' e ')'. No início todos os registos têm o valor lógico falso. |
Revision as of 08:40, 11 April 2016
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, '==', e '!=', 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.