Attribute Grammars/Exercise 14: Operadores Lógicos: Difference between revisions

From Wiki**3

< Attribute Grammars
 
Line 1: Line 1:
{{TOCright}}
#REDIRECT [[ist:Attribute Grammars/Exercise 14: Operadores Lógicos]]
== Problema ==
 
Uma máquina reconhece os símbolos de '''0''' a '''9''', '''~''' e '''!'''. Os símbolos de '''0''' a '''9''' são organizados em sequências possivelmente delimitadas por '''!'''. Se a sequência numérica não estiver delimitada, então o seu valor é simplesmente o do seu maior dígito (em base 10). Sequências delimitadas indicam o número correspondente aos dígitos em base 10. O operador '''~''' calcula o valor da soma dos seus argumentos (este operador é associativo à esquerda).
 
Exemplo: à sequência '''1934~!26!~12''' corresponde ao valor 9+26+2=37.
 
# Identifique a gramática atributiva correspondente ao problema, descrevendo o significado de todos os atributos, assim como os respectivos tipos. Que tipo de gramática obteve?
# Identifique a árvore de sintaxe decorada e o grafo de dependências para a frase '''123~!123!''' (valor 126).
# Escreva uma especificação YACC que implemente a gramática descrita em 1. Codifique toda a especificação (incluindo as zonas de declarações e de regras) e todas as funções auxiliares. '''Não utilizar variáveis globais.'''
 
== Gramática Atributiva ==
 
'''E''' representa uma expressão; '''N''' representa um número; '''S''' representa uma sequência de dígitos não delimitada; e '''D''' representa uma sequência de dígitos delimitada. O atributo booleano '''v''' representa o valor associado a cada símbolo.
 
[[image:attrgram14.jpg|500px]]
 
Como se pode ver pelas acções semânticas associadas à gramática, todos os atributos são sintetizados, pelo que a gramática é do tipo S.
 
== Árvore Sintáctica Decorada e Grafo de Dependências ==
 
[[image:attrgramtree14.jpg|500px]]
 
== Especificação YACC (versão directa a partir da gramática acima) ==
 
Considerando que a gramática acima é do tipo S, a realização em YACC é trivial e deixa-se como exercício para o leitor.
 
[[category:Compiladores]]
[[category:Ensino]]

Latest revision as of 23:19, 5 December 2018