Difference between revisions of "The YACC Parser Generator/Exercise 4"

From Wiki**3

< The YACC Parser Generator
(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 ==

Revision as of 17:57, 9 February 2015

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