Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aula 06 Paradigmas de Linguagem de Programação Sintaxe e Semântica Tópicos da Aula • Descrevendo Sintaxe e Semântica ▫ Gramática de Atributos ▫ Semântica Operacional Gramáticas de Atributos • É um dispositivo usado para descrever mais sobre a estrutura de uma linguagem de programação do que poderia ser descrito usando uma gramática livre de contexto • É uma extensão de uma gramática livre de contexto Gramática de Atributos • Problema semântico: compatibilidade de tipos ▫ Java: um valor de ponto-flutuante não pode ser atribuído a uma variável inteira; ▫ O oposto é legal; ▫ É possível especificar isto com BNF, mas são necessários muitos não-terminais; ▫ O tamanho da gramática determina o tamanho do analisador (parser). Gramática de Atributos • Problemas semânticos: todas as variáveis devem ser declaradas antes de serem referenciadas. ▫ Não pode ser especificado com BNF. • Outro exemplo: em Ada, se o end de um subprograma for seguido de um nome, o nome deve casar com o nome do subprograma ▫ Não pode ser especificado com BNF. Semântica Estática X Dinâmica As regras semânticas podem ser classificadas em estáticas ou dinâmicas dependendo do momento em que são checadas (compilação ou em tempo de execução). Semântica Estática • Descreve as características de uma programa válido ▫ Tem a ver com a forma (sintaxe) correta do programa • A maioria das restrições de tipos são definidas utilizando semântica estática • Estática porque é feita em tempo de compilação • Semântica porque é extra BNF • É difícil, senão impossível descrever semântica estática com BNF Semântica Estática • Gramáticas Livres do Contexto (GLC) não são capazes de descrever toda a sintaxe das linguagens de programação; • Gramáticas de Atributos (GA) são adições às GLCs que carregam informações semânticas através das árvores sintáticas; • Importância das Gramáticas de Atributos: ▫ Especifica semântica Estática; ▫ Projeto de compiladores (checagem da semântica estática). Exemplo: checagem de tipo. Gramáticas de atributos: definição •Def: Uma gramática de atributo é uma gramática com os seguintes recursos adicionais: – Associado a cada símbolo X da gramática está um conjunto de atributos A (X) – Associado a cada regra gramatical está um conjunto de funções semânticas e um conjunto possivelmente vazio de funções de predicado sobre os atributos dos símbolos na regra gramatical Gramáticas de atributos: um exemplo • Regras de tipo de uma atribuição simples • Sintaxe <assign> -> <var> = <expr> <expr> -> <var> + <var> | <var> <var> A | B | C • actual_type: ▫ Usado para armazenar o tipo atual de uma variável ou expressão (inteiro ou real) • expected_type: ▫ Usado para armazenar o tipo, inteiro ou real, esperado para a expressão, conforme determinado pelo tipo da variável no lado esquerdo da sentença de atribuição Gramáticas de atributos: um exemplo Gramáticas de atributos: um exemplo Gramáticas de atributos: um exemplo Gramáticas de atributos: um exemplo Gramáticas de atributos: um exemplo exp exp + termo | exp – termo | termo termo termo * fator | termo div fator | fator fator (exp) | num Gramáticas de atributos: um exemplo Exercício: escreva a gramática de atributos para a gramática abaixo número número dígito | dígito dígito 0 | 1 | 2 | 3| 4 | 5 | 6 | 7 | 8 | 9 Gramáticas de atributos: um exemplo Exercício: escreva a gramática de atributos para a gramática abaixo número número dígito | dígito dígito 0 | 1 | 2 | 3| 4 | 5 | 6 | 7 | 8 | 9 Gramáticas de atributos: um exemplo Exercício: escreva a gramática de atributos para a gramática abaixo decl tipo var_lista tipo int | float var_lista id, var_lista | id Semânticas • Não há nenhuma notação única amplamente aceitável ou formalismo para descrever semântica • Diversas necessidades de uma metodologia e notação para a semântica – Programadores precisam saber o que a sentença de uma linguagem significa – Desenvolvedores de compiladores devem saber exatamente o que as construções da linguagem significam – Geradores de compilação seriam possíveis – Projetistas poderiam detectar ambiguidades e inconsistências Semântica operacional • Semântica Operacional – Descrever o significado de uma sentença ou programa pela especificação dos efeitos de rodá-lo em uma máquina. – A mudança no estado de máquina (memória, registros, etc.) define o significado da sentença • Para usar semântica operacional em uma linguagem de alto nível, é necessária uma máquina virtual Semântica operacional • Um interpretador puro de hardware seria muito caro • Um interpretador puro de software também tem problemas – As características detalhadas de um computador em particular deixaria ações difíceis de entender – Uma definição semântica seria dependente da máquina Semântica operacional • Uma melhor alternativa: uma completa simulação • O processo: – Construir um interpretador (transforma código de origem em código de máquina de um computador idealizado) – Construir um simulador para o computador idealizado Semânticas operacionais • Usos de semânticas operacionais: – Manuais de linguagem e livros-texto de programação – Ensino de linguagens de programação • Dois níveis diferentes de uso de uma semântica operacional: – Semântica operacional natural: interesse no resultado final da execução de um programa completo – Semântica operacional estrutural: exame da sequência completa de mudanças de estado que ocorrem na execução de um programa • Avaliação – Boa se usada informalmente – Extremamente complexa se usada formalmente Semânticas operacionais • Exemplo: semántica do loop for na linguagem C Dúvidas?
Compartilhar