64
9/8/2018 1 Paradigmas de Linguagem de Programação Sintaxe Introdução Sintaxe: conjunto de regras que definem a forma da linguagem; Como as sentenças podem ser formadas como sequências de componentes básicos – palavras; A sintaxe não revela nada sobre o significado da sentença; Exemplo: Em C, palavras chaves como while, do, for, if, são palavras da linguagem; Palavras não são elementares, elas são construídas com caracteres que pertencem a um alfabeto; Assim, a sintaxe de uma linguagem é definida por dois conjuntos de regras: regras léxicas e regras sintáticas. Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

1

Paradigmas de Linguagem de ProgramaçãoSintaxe

Introdução

▪ Sintaxe: conjunto de regras que definem a forma da linguagem;

▪ Como as sentenças podem ser formadas como sequências de componentes básicos –palavras;

▪ A sintaxe não revela nada sobre o significado da sentença;

▪ Exemplo:▪ Em C, palavras chaves como while, do, for, if, são palavras da linguagem;

▪ Palavras não são elementares, elas são construídas com caracteres que pertencem a umalfabeto;

▪ Assim, a sintaxe de uma linguagem é definida por dois conjuntos de regras: regras léxicase regras sintáticas.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 2: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

2

Introdução

▪ Será apresentado nos próximos slides a definição de compilador e suas fases deanálise léxica, sintática e semântica

▪ Compreender a sintaxe e o comportamento de um compilador é essencial para obom programador

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Contexto de um compilador

▪ Aquilo que é usualmente designado por um compilador é de fato um conjunto de programas que no seu conjunto formam o compilador;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 3: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

3

Contexto de um compilador

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Componentes▪ Pré-Processador: processa diretivas; retira os comentários; entre outras tarefas.

▪ Compilador: faz a análise do texto escrito na linguagem fonte e faz a sua transcriçãopara a linguagem destino;

▪ Assembler: faz a transcrição da linguagem intermediária para a linguagem final(máquina);

▪ Loder/Linker: no caso de que se querer um programa executável os “loader/linker”fazem a junção do código máquina produzido pelas anteriores fases a um conjuntode serviços (“run-time routines”) que permitem a criação de um programaindependente

Contexto de um compilador

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Código Fonte

Tokens e Lexemas

Árvore Sintática Abstrata

AST Decorada

Código de Máquina

Ab

stra

ção

Imp

lem

enta

ção

Page 4: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

4

Processo de compilação

▪ 1) Análise ▪ 1.1) Análise léxica

▪ Organiza caracteres de entrada em grupos, chamados tokens

▪ Erros: tamanho máximo da variável excedido, caracteres inválidos.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Processo de compilação

▪ 1) Análise ▪ 1.2) Análise sintática

▪ Organiza tokens em uma estrutura hierárquica

▪ Erros: falta de (, ), =, identificador inválido...

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 5: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

5

Processo de compilação

▪ 1) Análise ▪ 1.3) Análise semântica

▪ Checa se o programa respeita regras básicas de consistência

▪ Erro: tipos inconsistentes ➔ atribuir uma string em uma variável inteira

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Processo de compilação

▪ Vejamos um exemplo, seja a seguinte instrução de atribuição:▪ posicao = inicial + incremento * 60

▪ Na análise léxica é separada em uma lista de palavras:

▪ (posicao,=,inicial,+,incremento,*,60)

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 6: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

6

Processo de compilação

▪ Vejamos um exemplo, seja a seguinte instrução de atribuição:▪ posicao = inicial + incremento * 60

▪ Na análise sintática tenta-se construir uma frase correta com a lista de palavrasproduzidas pela fase anterior. É usual construir uma estrutura em árvore pararepresentar a frase obtida.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Processo de compilação

▪ Vejamos um exemplo, seja a seguinte instrução de atribuição:▪ posicao = inicial + incremento * 60

▪ Na análise semântica verifica a validade da frase no que diz respeito aos tipos dasentidades utilizadas. Por exemplo, se um dos identificadores presentes na expressãoé do tipo real, então é necessário converter 60 para a sua representação real:

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 7: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

7

Tabela de símbolos

▪ A informação acerca das palavras que o programa contém tem de fluir entre asvárias fases do compilador;

▪ A tabela de símbolos vai conter uma entrada para cada uma das palavras queforam identificadas pelo analisador léxico;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Gestão de erros

▪ Trata-se de detectar os erros enviando uma mensagem apropriada para outilizador: local do erro; tipo do erro; causa provável;

▪ É importante tentar recuperar do erro automaticamente de forma a podercontinuar a tarefa de compilação até ao máximo possível;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 8: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

8

Descrição gráfica das fases

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Definição de linguagem

▪ Linguagens Formais▪ Alfabeto: Um conjunto finito e não vazio de símbolos arbitrários é designado por um

alfabeto, e é denotado por Σ;

▪ Um símbolo de um alfabeto é uma entidade abstrata básica, podendo representarnúmeros, letras, desenhos, etc, por exemplo: 1,2,a,b,c.

▪ Um alfabeto é representado por: Σ (sigma)

Σ = {0,1}

Σ = {a,b}

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 9: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

9

Definição de linguagem

▪ Linguagens Formais▪ Palavra (ou cadeia de caracteres): As sequências finitas de símbolos (do alfabeto)

justapostos;

▪ O conjunto de todas as palavras sobre Σ é denotado por Σ ∗;

▪ A palavra vazia, não contém nenhuma letra, e é denotada por ɛ;

▪ Seja Σ = {a,b}

▪ Então as cadeias possíveis são:▪ w = ɛ▪ w = a▪ w = b▪ w = ab

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Definição de linguagem

▪ Linguagens Formais▪ Linguagem: Um conjunto arbitrário de palavras de Σ∗ é designado por uma

linguagem e é usualmente denotado por L;

▪ Se Σ representa um alfabeto,

▪ Então Σ* representa o conjunto de todas as palavras possíveis sobre Σ;

▪ Σ+ representa o conjunto de todas as palavras excetuando a palavra vazia.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 10: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

10

Definição de linguagem

▪ Linguagens Formais▪ Linguagem

▪ Assim podemos dizer que:

▪ Σ* = {ɛ, a, b, ab, ba, aab, abb, aaaa, ...}

▪ Σ+ = Σ* - ɛ = {a, b, ab, ba, aab, abb, aaaa, ...}

▪ Uma linguagem L é geralmente definida como um subconjunto de Σ*;

▪ Uma sentença é geralmente definida como uma cadeia pertencente à linguagem L.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Definição de linguagem

▪ Linguagens Formais▪ Tamanho ou Comprimento

▪ O tamanho ou comprimento de uma cadeia w, representado por |w|, é o número de símbolos que compõem a cadeia;

▪ w = ɛ |w| = 0

▪ w = a |w| = 1

▪ w = ab |w| = 2

▪ w = abb |w| = 3

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 11: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

11

Definição de linguagem

▪ Linguagens Formais▪ Concatenação de Palavras: a concatenação de w e v é a cadeia obtida pela adição

dos símbolos de v no final de w. Nenhum símbolo pode ser mudado de lugar;

▪ Se w = a1, a2,...,an e v = b1, b2, ... ,bn

Então a concatenação, w o v = a1a2...anb1b2...bn

Por exemplo: seja w = ababa e v = cdcdcd

Então w o v = ababacdcdcd

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Definição de linguagem

▪ Linguagens Formais▪ Concatenação de Palavras

▪ A operação de concatenação satisfaz as seguintes propriedades:▪ a) associatividade ▪ b) elemento neutro a direita e a esquerda

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 12: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

12

Definição de linguagem

▪ Linguagens Formais▪ Concatenação de Palavras

▪ A operação de concatenação também vale para as linguagens▪ L1 o L2 = {x o y | x Є L1 e y Є L2}

▪ Exemplo:▪ L1 = {a, bc} e L2 = {aa, cb, bb}▪ L1 o L2 = {x o y | x Є L1 e y Є L2} = {▪ L1 o L2 = {

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Definição de linguagem

▪ Linguagens Formais▪ Sufixo, prefixo e subcadeia

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 13: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

13

Definição de linguagem

▪ Linguagens Formais▪ União, Intersecção e Diferença

▪ União: L1 U L2 = {w: w Є L1 ou w Є L2}

▪ Intersecção: L1 ∩ L2 = {w: w Є L1 e w Є L2}

▪ Diferença: L1 - L2 = {w: w Є L1 e w Ɇ L2}

▪ Exemplo:

▪ L1={a, b, aa, ab, abb, aab, aaa} e L2={a, aa, aaa, aaaa}

▪ União: L1 U L2 =

▪ Intersecção: L1 ∩ L2 =

▪ Diferença: L1 - L2 =

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Definição de linguagem

▪ Linguagens Formais▪ A imagem inversa de P, denotada por P−1 é a palavra que se obtém de P por inversão

da ordem das letras. Por exemplo: se P = abcd, então

▪ P −1 = dcba;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 14: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

14

Análise léxica

▪ Regras Léxicas▪ Especificam o conjunto de caracteres que constituem o alfabeto da linguagem, bem

como a maneira que eles podem ser combinados;

▪ Exemplo

▪ Pascal: letras maiúsculas e minúsculas são idênticas;

▪ C e ADA: letras maiúsculas e minúsculas são diferenciadas;

▪ Pascal: sinal de diferente → <>

▪ C: sinal de diferente → !=

▪ ADA: sinal de diferente → /=:

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise léxica

▪ Seu objetivo é analisar a entrada dada (programa fonte) e dividi-la em sequênciasconsiderando os tokens da linguagem, definidos por expressões regulares;

▪ Cada token é normalmente formado por seu tipo (se é um operador lógico, umidentificador, um número inteiro, etc.) e pelo seu valor e outros atributos.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 15: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

15

Análise léxica

▪ Este valor vai depender do tipo do token e normalmente corresponde àsequência de caracteres realmente lida da entrada.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise léxica

▪ Tarefa principal▪ Ler o arquivo onde se encontra o programa-fonte

▪ Produzir como saída uma sequência de tokens com seus respectivos códigos que oAnalisador Sintático usará para validar regras da gramática;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 16: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

16

Análise léxica

▪ Primeira fase do compilador;

▪ Lê a sequência de caracteres do canal de entrada e produz uma sequência de palavras (lexemas);

▪ Expressões regulares e as gramáticas regulares

▪ Descrevem a sintaxe das linguagens de programação

▪ Dado uma palavra

▪ Trata-se agora de, dado uma linguagem, ser capaz de reconhecer de forma automática se uma dada frase pertence a essa linguagem.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise léxica

▪ Lê os caracteres de entrada (scanner) e os agrupa em sequências chamadas lexemas (tokens);

▪ Os tokens são consumidos na fase seguinte (análise sintática);

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Analisador Léxico (scanner)

token

GetToken()

Programa

Fonte Para Análisesemântica

Analisador sintático (parser)

Tabela de Símbolos (identificadores e

constantes)

Page 17: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

17

Análise léxica

▪ A tabela de símbolos é utilizada para diferenciar palavras e símbolos reservados da linguagem (while, for, =, >, <) de identificadores definidos pelo usuário

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Lexema (lido) Token (Tipo)

; <PONTO_VIRGULA>

aux <IDENTIFICADOR>

while <PALAVRA_RESERVADA>

Análise léxica

▪ A tabela de símbolos também é utilizada para armazenar o tipo e o valor das variáveis e o seu escopo

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Lexema (lido) Token (Tipo) Valor

; <PONTO_VIRGULA> -

aux <IDENTIFICADOR> 10

while <PALAVRA_RESERVADA> -

Page 18: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

18

Análise léxica

▪ Classes de tokens mais comuns: ▪ identificadores;

▪ palavras reservadas;

▪ números inteiros sem sinal;

▪ números reais;

▪ cadeias de caracteres;

▪ sinais de pontuação e de operação;

▪ caracteres especiais;

▪ símbolos compostos de dois ou mais caracteres especiais;

▪ comentários;

▪ etc.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise léxica

▪ Exemplos de tokens que podem ser reconhecidos em uma linguagem deprogramação como C:

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 19: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

19

Análise léxica

▪ O analisador léxico desconsidera o trecho do código fonte que encontra-se entredelimitadores de comentários.

▪ Além disso, ele desconsidera espaços em branco colocados pelos programadoresa fim de melhorar a legibilidade do código fonte (endentação).

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise léxica

EXEMPLO: seja a cadeia 3.2 + (2 * 12.01), o analisador léxico teria:

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 20: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

20

Análise léxica

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Expressão Regular

a

corresponde a

a

abc abc

[abc] a, b ou c

[a-f] a,b,c,d,e ou f

[0-9] qualquer digito de 0 a 9

X+ um ou mais elemento de X

X* zero ou mais elemento de X

[0-9]+ qualquer inteiro

(...) agrupamento de expressão

| alternância OU

(a|b|c)* equivale a [a-c]*

Análise léxica

▪ Exemplo: Expressão para reconhecer números reais (0, 27, .12, 2.19)▪ [0-9]+|[0-9]+\.[0-9]+|\.[0-9]+ [0-9]+(\.[0-9]+)?|\.[0-9]+ [0-9]*(\.)?[0-9]+

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 21: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

21

Análise sintática

▪ Regras Sintáticas▪ Especificam as sequências de símbolos que constituem estruturas sintáticas válidas;

▪ Estas regras permitem o reconhecimento de expressões e comandos;

▪ Exemplo:

▪ Pascal: atribuição → a:=b;

▪ C: atribuição → a=b;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática

As linguagens de programação possuem regras precisas para descrever a estruturasintática de programas bem formados;

Exemplo: Linguagem C

Funções➔ declaração e comando

Comando➔ expressões

A estrutura sintática das construções de uma linguagem de programação éespecificada pelas regras gramaticais de uma gramática livre de contexto

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 22: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

22

Análise sintática

Benefícios para projetistas de linguagens:

▪ Uma gramática provê uma especificação sintática precisa e fácil de entenderpara as linguagens de programação;

▪ A partir de determinadas classes gramaticais, podemos construirautomaticamente um analisador sintático eficiente;

▪ Durante o processo de construção do analisador, podem ser detectadasambiguidades sintáticas;

▪ Uma gramática permite o desenvolvimento de uma linguagem iterativamente,possibilitando lhe acrescentar novas construções para realizar novas tarefas;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática

▪ Utiliza os tokens produzidos pela análise léxica e verifica a formação do programa com o uso de GLC (Gramáticas Livres de Contexto)▪ A partir dos tokens é criada uma representação intermediária da árvore sintática ➔

mostra a estrutura gramatical da sequência de tokens;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 23: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

23

Análise sintática

expr = a + b * 60

<identificador, 1>,

< = >,

<identificador, 2>,

<+>,

<identificador, 3>,

< * >,

<numero, 60>

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Percorrendo a árvore e consultando a GLC é possível verificar se a expressão pertence à

linguagem.=

<id,1> +

<id,2> *

<id,3> 60

Análise sintática

▪ O analisador sintático recebe do analisador léxico uma cadeia de tokensrepresentando o programa fonte e verifica se essa cadeia de tokenspertence à linguagem gerada pela gramática.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 24: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

24

Análise sintática

O analisador sintático constrói uma árvore de derivação e a passa aorestante do front-end do compilador para processamento.

Obs: na prática não é necessário construir a árvore de derivaçãoexplicitamente, pois a ações de verificação e tradução podem serimplementados em um único módulo.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática

Existem 3 estratégias gerais de análise sintática para o processamento degramáticas: Universal, Descendente (Top –Down) e Ascendente (Bottom –Up).

Em ambas as estratégias a entrada do analisador sintático é consumida daesquerda para a direita, um símbolo de cada vez

Os analisadores criados à mão normalmente utilizam gramáticas LL

Os analisadores sintáticos para a maioria de gramáticas LR geralmente sãoconstruídos utilizando ferramentas automatizadas

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 25: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

25

Análise sintática

▪ Para descrever uma linguagem é necessário uma série de regras gramaticais;

▪ As regras são formadas por uma única estrutura do lado esquerdo seguida dometasímbolo “::=“ e por uma sequência de itens do lado direito (símbolos ouestruturas);

▪ Estruturas entre <> são chamadas de não terminais;

▪ Símbolos como garota e cachorro são chamadas de terminais;

▪ As regras gramaticais são as produções.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática

▪ Exemplo de uma gramática para expressões aritméticas de adição emultiplicação:▪ <exp>::= <exp>+<exp> | <exp>*<exp> | (exp) | <num>

▪ <num> ::= <num><digito> | <digito>

▪ <digito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 26: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

26

Análise sintática

▪ BNF▪ Sentenças simples consistem de uma frase nominal e de uma frase verbal seguida de

um ponto, da seguinte maneira:

▪ <sentence> ::= <frase_nominal><frase_verbal>.

▪ Deve-se saber descrever a estrutura de uma frase nominal e de uma frase verbal:

▪ <frase_nominal> ::= <artigo><substantivo>

▪ <artigo> ::= um | a

▪ <substantivo> ::= garota | cachorro

▪ <frase_verbal> ::= <verbo> <frase_nominal>

▪ <verbo> ::= viu | abraça

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática

▪ Cada regra gramatical apresentada consiste de uma string colocada entre “<“ e“>”, esta string é o nome da estrutura que está sendo descrita;

▪ O símbolo ::= pode ser lido como “consiste de” ou “é o mesmo que”;

▪ Após o símbolo ::=, temos uma sequência de outros nomes e símbolos;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 27: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

27

Análise sintática

▪ Construção de uma sentença legal:▪ Inicia-se com o símbolo <sentença> e prossegue-se trocando o lado esquerdo por

alternativas do lado direito nas regras;

▪ Este processo criará uma derivação na linguagem;

▪ Desta forma, podemos construir a sentença: “A garota viu um cachorro”;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

▪ Montando a derivação da sentença: “a garota viu um cachorro”▪ <sentença> → <frase_nominal><frase_verbal>.▪ → <artigo><substantivo><frase_verbal>.▪ → a <substantivo><frase_verbal>.▪ → a garota <frase_verbal>.▪ → a garota <verbo><frase_nominal>.▪ → a garota viu <frase_nominal>.▪ → a garota viu <artigo><substantivo>.▪ → a garota viu um <substantivo>.▪ → a garota viu um cachorro.

▪ Pode-se começar com a sentença “a garota viu um cachorro”, e voltar até <sentença> para provar que é uma sentença válida da linguagem.

Page 28: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

28

Análise sintática - Extensão da BNF ➔ EBNF (Extend BNF)

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Definição EBNF para uma linguagem de programação simples

Definição EBNF para uma calculadora Definição de sintaxe para uma linguagem

Análise sintática – Recursão a Esquerda

Na gramática a seguir, o não-terminal E representa expressões consistindo emtermos separados pelo operador +; T representa termos consistindo em fatoresseparados pelo operador *; e F representa fatores que podem ser expressos entreparênteses ou identificadores.

Essa gramática não pode ser usada com o método de análise descendente pois érecursiva a esquerda.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 29: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

29

Análise sintática – Recursão a Esquerda

Gramáticas são recursivas à esquerda se possui um não-terminal A para o qualexistam derivações do tipo A➔Aα para uma cadeia α.

Para o par de produções recursivas à esquerda

A➔ Aα|β

A substituição abaixo elimina a recursão

imediata à esquerda:

A➔ βA’

A’➔ αA’ | ε

Nenhuma outra modificação é requerida a partir de A.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Recursão a Esquerda

Gramática para expressões simples:

E → E + T | T

T → T * F | F

F → ( E ) | id

Aplicando transformação na Primeira Regra

E → E + T | T é do tipo

A ➔ Aα | β

Obtemos:

A ➔ βA’

E ➔TE’

A’ ➔ αA’ | ε

E’ ➔ +TE’ | ε

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 30: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

30

Análise sintática – Recursão a Esquerda

Gramática para expressões simples:

E → E + T | T

T → T * F | F

F → ( E ) | id

Aplicando transformação na Segunda Regra

E → T * F | F é do tipo

A ➔ Aα | β

Obtemos:

A ➔ βA’

T ➔FT’

A’ ➔ αA’ | ε

E’ ➔ *FT’ | ε

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Recursão a Esquerda

Assim, obtemos a partir de:

E → E + T | T

T → T * F | F

F → ( E ) | id

A gramática equivalente sem recursão à esquerda:

E → TE’

E’ → +TE’

T → FT’T’ → *FT’ | ε

F → (E) | id

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 31: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

31

Análise sintática – Recursão a Esquerda

Exemplo 2:

A→ Aa | b

Exemplo 3:

S → SS+ | SS* | a

Exemplo 4:

S → Sa | B

B → Bb | c

Para o par de produções recursivas à esquerda

A ➔ Aα|β

Considere para eliminar a recursão

A ➔ βA’

A’ ➔ αA’ | ε

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Recuperação de erro

O recuperador de erros em um analisador sintático possui objetivos simples, masdesafiadores:

▪ Informar a presença de erros de forma clara e precisa;

▪ Recuperar-se de cada erro com rapidez suficiente para detectar errossubsequentes;

▪ Acrescentar um custo mínimo no processamento de programas corretos.

Como um recuperador de erro deve informar a presença de um erro?

No mínimo ele precisa informar o local no programa fonte onde o erro foidetectado, pois existe uma boa chance de que o local exato do erro seja em umdos tokens anteriores.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 32: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

32

Análise sintática – Recuperação de erro

Recuperação em nível de frase

Ao detectar um erro, o analisador sintático pode realizar a correção localsobre o restante da entrada.

Uma correção local típica compreende a substituição de uma vírgula por umponto-e-vírgula, exclusão de um ponto-e-vírgula desnecessário.

A escolha da correção local fica a critério do projetista do compilador.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Recuperação de erro

Produções de Erro

Nesta estratégia de recuperação de erro podemos estender a gramática dalinguagem em mãos com produções que geram construções erradas,antecipando assim os erros mais comuns.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 33: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

33

Análise sintática

▪ Não é possível enumerar a sintaxe de todos os programas das mais diferenteslinguagens;

▪ É necessário uma maneira de definir um conjunto infinito usando uma descriçãofinita:

▪ A sintaxe de uma linguagem é definida através de uma gramática;

▪ Gramática: conjunto de regras que definem todos os construtores que podem seraceitos na linguagem.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática

▪ Fortran foi definido através da especificação de algumas regras em inglês;

▪ Algol 60 foi definido através de uma gramática livre de contexto desenvolvida porJonh Backus;▪ Essa gramática ficou conhecida como BNF (Backus-Naur Form);

▪ BNF foi utilizada posteriormente na definição de várias linguagens como C, Pascale Ada;

▪ BNF é uma metalinguagem pois consiste numa linguagem para descrição deoutras linguagens.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 34: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

34

Análise sintática

▪ Observe os dois trechos de código a seguir, sendo o código a. em C e o código b. em Pascal

a. b.

while(x!=y) while x<>y do

{ begin

... ...

} end

▪ Ambas possuem a mesma estrutura conceitual, porém, diferem na aparência léxica;

▪ Quando duas construções diferem apenas no nível léxico, se diz que elas seguem a mesmasintaxe abstrata e diferem na sintaxe contreta.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática

▪ Com tudo isso, é possível concluir que a descrição sintática de uma linguagem:▪ Ajuda o programador a saber como escrever um programa sintaticamente correto;

▪ Pode ser usada para determinar se um programa está sintaticamente correto ➔ este é exatamente o trabalho do compilador!

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 35: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

35

Análise sintática - Análise Top-Down

▪ Como reconhecer se uma sentença está de acordo com uma gramática?▪ Pode-se implementar reconhecedores de sentença

▪ Recursivamente, com retrocesso

▪ Com mecanismo preditivo▪ First e Follow

▪ Para usar os reconhecedores, primeiramente deve-se transformar a Gramática Livre de Contexto

▪ Eliminação de produções vazias

▪ Eliminação de recursividade a esquerda

▪ Fatoração de uma gramática

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Conjuntos First

▪ First(α)▪ Definição informal: conjunto de todos os terminais que começam com qualquer

sequência derivável de α▪ Definição formal

▪ Se existe um t ∈ T e um β ∈ V* tal que α ⇒* t β então t ∈ First(α)

▪ Se α ⇒* ε então ε ∈ First(α)

A → B | C | D first(A) = {b, c, d}

B→ b first(B)= {b}

C → c first(C)= {c}

D → d first(D)= {d}

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 36: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

36

Análise sintática – Conjuntos First

▪ Para determinar o FIRST(A):▪ Se a é terminal, então o first(a) = a;

▪ Se A é não terminal e A→aα é uma produção, então se acrescenta a ao conjunto defirst de A, logo: first(A)=a;

▪ Se A→ε é uma produção ε, logo first(A)=ε;

▪ Se A→Y1Y2...Yk é uma produção, então todo i tal que todos Y1...Yi-1 são nãoterminais e FIRST(Yj) contém ε, onde j=1,2...i-1. acrescente todo símbolo diferentede ε de FIRST(Yj) a FIRST(A). Se ε ∈ FIRST(A), para todo i=1,2..k. então acrescente ε aFIRST(A).

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Conjuntos First

E → TE’

E’ → +TE’ | ε

T→ FT’

T’→ *FT’ | ε

F → (E) | id

First(E) = { ? }

First(E’) = { ? }

First(T) = { ? }

First(T’) = { ? }

First(F) = { ? }

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 37: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

37

Análise sintática – Conjuntos First

E → TE’

E’ → +TE’ | ε

T→ FT’

T’→ *FT’ | ε

F → (E) | id

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Conjuntos First

E → TE’

E’ → +TE’ | ε

T→ FT’

T’→ *FT’ | ε

F → (E) | id

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Se F derivasse em ε seria preciso incluir o first(T’)

em first(T)

Page 38: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

38

Análise sintática – Conjuntos First

E → TE’

E’ → +TE’ | ε

T→ FT’

H → E’T

T’→ *FT’ | ε

F → (E) | id

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(H) = { ? }

First(T’) = { *, ε }

First(F) = { (, id }

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Conjuntos First

E → TE’

E’ → +TE’ | ε

T→ FT’

H → E’T

T’→ *FT’ | ε

F → (E) | id

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(H) = { First(E’) U First(T) }

First(T’) = { *, ε }

First(F) = { (, id }

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 39: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

39

Análise sintática – Conjuntos First

E → TE’

E’ → +TE’ | ε

T→ FT’

H → E’T

T’→ *FT’ | ε

F → (E) | id

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(H) = { +, (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Conjuntos Follow

▪ Se A é um não-terminal, o follow(A) é o conjunto de terminais imediatamenteseguintes (à direita) de A

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 40: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

40

Análise sintática – Conjuntos Follow

▪ Para determinar follow(A)1. Colocar $ em follow(S) se S é o símbolo de partida. $ é o marcador de fim de

entrada durante análise

2. Se existe uma produção A→αBβ e β ∉ ε então tudo que estiver em first(β), excetoε, deve ser adicionado em follow(B)

3. Se existe uma produção A→ αB ou A→ αBβ onde first(β) contem ε (β → ε), entãotudo que está em follow(A) está em follow(B)

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Conjuntos Follow

E → TE’

E’ → +TE’ | ε

T → FT’

T’ → *FT’ | ε

F → (E) | id

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Follow(E) = { ), $ }

Follow(E’) = Follow(E) = { ), $ }

Follow(T) = First(E’) U Follow(E) U Follow(E’) = { +, ), $}

Follow(T’) = Follow(T) = {+, ), $}

Follow(F) = First(T’) U Follow(T) U Follow(T’) = { *, +, ), $}

Page 41: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

41

Análise sintática – Conjuntos Follow

E → TE’

E’ → +TE’ | ε

T → FT’

T’ → *FT’ | ε

F → (E) | id

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Follow(E) = { ), $ }

Follow(E’) = Follow(E) = { ), $ }

Follow(T) = First(E’) U Follow(E) U Follow(E’) = { +, ), $}

Follow(T’) = Follow(T) = {+, ), $}

Follow(F) = First(T’) U Follow(T) U Follow(T’) = { *, +, ), $}

Regra 2 e regra 1

Análise sintática – Conjuntos Follow

E → TE’

E’ → +TE’ | ε

T → FT’

T’ → *FT’ | ε

F → (E) | id

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Follow(E) = { ), $ }

Follow(E’) = Follow(E) = { ), $ }

Follow(T) = First(E’) U Follow(E) U Follow(E’) = { +, ), $}

Follow(T’) = Follow(T) = {+, ), $}

Follow(F) = First(T’) U Follow(T) U Follow(T’) = { *, +, ), $}

Regra 3

Page 42: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

42

Análise sintática – Conjuntos Follow

E → TE’

E’ → +TE’ | ε

T → FT’

T’ → *FT’ | ε

F → (E) | id

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Follow(E) = { ), $ }

Follow(E’) = Follow(E) = { ), $ }

Follow(T) = First(E’) U Follow(E) U Follow(E’) = { +, ), $}

Follow(T’) = Follow(T) = {+, ), $}

Follow(F) = First(T’) U Follow(T) U Follow(T’) = { *, +, ), $}

Regra 2 e Regra 3

Análise sintática – Conjuntos Follow

E → TE’

E’ → +TE’ | ε

T → FT’

T’ → *FT’ | ε

F → (E) | id

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Follow(E) = { ), $ }

Follow(E’) = Follow(E) = { ), $ }

Follow(T) = First(E’) U Follow(E) U Follow(E’) = { +, ), $}

Follow(T’) = Follow(T) = {+, ), $}

Follow(F) = First(T’) U Follow(T) U Follow(T’) = { *, +, ), $}

Regra 3

Page 43: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

43

Análise sintática – Conjuntos Follow

E → TE’

E’ → +TE’ | ε

T → FT’

T’ → *FT’ | ε

F → (E) | id

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

First(E) = First(T) = First(F) ={ (,id }

First(E’) = { +, ε}

First(T) = First(F) = { (, id }

First(T’) = { *, ε }

First(F) = { (, id }

Follow(E) = { ), $ }

Follow(E’) = Follow(E) = { ), $ }

Follow(T) = First(E’) U Follow(E) U Follow(E’) = { +, ), $}

Follow(T’) = Follow(T) = {+, ), $}

Follow(F) = First(T’) U Follow(T) U Follow(T’) = { *, +, ), $}

Regra 2 e Regra 3

Análise sintática – First Follow

S→AB first(S)={c} follow(S)={ $ }

A→c | ε first(A)={c, ε} follow(A)={ c }

B→ cbB | ca first(B)={c} follow(B)={ $ }

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 44: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

44

Análise sintática – Analisador Top-Down

▪ A análise top-down é realizada da raiz para as folhas

▪ Parte-se de um não-terminal que é o símbolo inicial da gramática em direção aos terminais

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática preditiva não-recursiva

▪ O símbolo da cadeia de entrada, em análise, é suficiente para determinar qual regra de produção deve ser escolhida

▪ São construídos utilizando gramáticas LL ( 1 ) ▪ Cadeia de entrada é analisada da esquerda para a direita ( Left-toright)

▪ A derivação das produções é feita mais a esquerda ( Leftmost)

▪ A cada passo é observado um ( 1) símbolo a frente para determinar que ação deve ser tomada

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 45: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

45

Análise sintática preditiva não-recursiva

▪ Condições▪ Eliminar a recursividade a esquerda

▪ Fatorar a gramática

▪ Construir o conjunto first e follow

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática preditiva não-recursiva

▪ Construção da tabela preditiva▪ Dimensão1: não terminal X

▪ Dimensão2: símbolo de entrada (terminal) t

▪ A entrada (X, t) contém a regra da produção a aplicar → obtida a partir dosconjuntos first e follow

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

S→cAa first(S)={c} follow(S)={ $ }

A→cB | B first(A)={b, c, ε} follow(A)={ a }

B→ bcB | ε first(B)={b, ε} follow(B)={ a }

Page 46: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

46

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

Topo da pilha SS deriva em c?Sim: S→ cAa

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

S→ cAasubstitui na pilha o S por

cAa

Page 47: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

47

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

O topo da pilha é igual ao valor do topo de entrada

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

A deriva em b?Sim: A→B

Page 48: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

48

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$ A→B

Ba$ bca$

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

Substitui o A na pilha por B

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$ A→B

Ba$ bca$

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

B deriva em b?Sim: B→bcB

Page 49: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

49

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$ A→B

Ba$ bca$ B→bcB

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

B deriva em b?Sim: B→bcB

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$ A→B

Ba$ bca$ B→bcB

bcBa$ bca$ casar(b)

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

O topo da pilha é igual ao valor do topo de entrada

Page 50: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

50

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$ A→B

Ba$ bca$ B→bcB

bcBa$ bca$ casar(b)

cBa$ ca$ casar(c)

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

O topo da pilha é igual ao valor do topo de entrada

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$ A→B

Ba$ bca$ B→bcB

bcBa$ bca$ casar(b)

cBa$ ca$ casar(c)

Ba$ a$ B→ε

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

B deriva em a?SIM: quando B→ε

Page 51: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

51

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$ A→B

Ba$ bca$ B→bcB

bcBa$ bca$ casar(b)

cBa$ ca$ casar(c)

Ba$ a$ B→ε

a$ a$ casar(a)

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

O topo da pilha é igual ao valor do topo de entrada

Análise Sintática – Tabela Preditiva

Pilha Entrada Ação

S$ cbca$ S→cAa

cAa$ cbca$ casar(c)

Aa$ bca$ A→B

Ba$ bca$ B→bcB

bcBa$ bca$ casar(b)

cBa$ ca$ casar(c)

Ba$ a$ B→ε

a$ a$ casar(a)

$ $ aceita

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Não Terminal Símbolo de Entrada

a b c

S erro erro S→ cAa

A A→B A→B A→cB

B B→ε B→bcB erro

Entrada: cbca

O topo da pilha é igual ao valor do topo de entrada

Page 52: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

52

Análise sintática – Analisador Bottom-up

▪ A análise top-down é realizada das folhas para a raiz

▪ Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Analisador Bottom-up

id * id

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

F * id

id

T * id

F

id

T * F

F id

id

T

T * F

F id

id

E

T

T * F

F id

id

E → E + T | T T → T * F | F F → (E) | id

Entrada: id*id

Page 53: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

53

Análise sintática – Analisador Bottom-up

▪ O processo de análise sintática ascendente pode ser encarado como um processode “reduzir” uma cadeia w para o símbolo inicial da gramática

▪ Redução : operação de substituição do lado direito de uma produção pelo não-terminal correspondente do lado esquerdo

▪ Para a regra A→ α , α pode ser reduzido em A

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Analisador Bottom-up

▪ Analisadores sintáticos Bottom-up▪ Analisadores conhecidos como empilha-reduz (shift-reduce)

▪ Etapas do reconhecimento: determinar quando reduzir e determinar a produção aser utilizada para que a análise prossiga

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 54: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

54

Análise sintática – Analisador Bottom-up

▪ Componentes do analisador bottom-up▪ Pilha, onde os símbolos a serem reduzidos são empilhados▪ Tabela sintática, que guia o processo de shift e reduce

▪ Processo de reconhecimento de uma sentença1. Empilhar símbolos da cadeia de entrada2. Quando um lado direito apropriado de uma produção aparece, ele é reduzido

(substituído) pelo lado esquerdo da produção3. Se a análise tiver sucesso, esse processo ocorre até que os símbolos da cadeia de

entrada sejam todos consumidos e a pilha fique apenas com o símbolo inicial dagramática

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise sintática – Analisador Bottom-up

Gramática:

S→(L) | a

L→ L+S | S

Entrada: a+a

Pilha Cadeia Regra

$ (a+a)$

$ (a+a)$ shift (

$( a+a)$ shift a

$(a +a)$ reduce S→a

$(S +a)$ reduce L→S

$(L +a)$ shift +

$(L+ a)$ shift a

$(L+a )$ reduce S→a

$(L+S )$ reduce L→L+S

$(L )$ shift )

$(L) $ reduce S→(L)

$S $ aceita

Page 55: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

55

Análise sintática – Analisador Bottom-up

▪ Operações durante a análise:▪ Shift: coloca-se no topo da pilha o primeiro símbolo da cadeia de entrada

▪ Reduce: substitui-se o lado direito do handle pelo seu lado esquerdo

▪ Aceita: a cadeia de entrada é reconhecida

▪ Erro: a cadeia de entrada não é reconhecida

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise semântica

▪ A semântica define o significado dos programas sintaticamente corretos;

▪ Por exemplo, em C, a instrução

if(a>b)

max = a;

else

max = b;

▪ Diz que a expressão a>b deve ser avaliada e, dependendo do retorno (true ou false), um dos dois comandos de atribuição será executado.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 56: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

56

Análise semântica

▪ Regras sintáticas: mostram como formar o comando;

▪ Regras semânticas: mostram qual é o efeito do comando;

▪ Erros semânticos ▪ tipos inválidos - o programa dá um resultado, mas não é correto!

▪ o computador não advinha o que eu quero

▪ logo: o programa que escrevi não resolve o problema pretendido

▪ os erros semânticos são os mais difíceis de corrigir

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise semântica

▪ Conceitos semânticos básicos de uma LP▪ Variáveis: questões semânticas associadas a declaração (escopo, tipo e tempo de

vida);

▪ Valores e Referência: se o valor associado a variável denota localização na memória ou conteúdo localizado na memória;

▪ Expressões: possuem regras para serem escritas envolvendo os tipos de expressões permitidas;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 57: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

57

Análise semântica

▪ Abstração

▪ Processo de identificar apenas as qualidades ou propriedades relevantes dofenômeno que se quer modelar;

▪ As LP são as ferramentas com as quais os programadores podem implementar osmodelos abstratos;

▪ Por outro lado, as próprias LP são abstrações do processador subjacente;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise semântica

▪ Abstração

▪ Sugere a distinção que deve ser feita entre “o que” o programa faz e “como” ele éimplementado”;

▪ Quando um procedimento é chamado , pode-se concentrar apenas no que ele faz;

▪ Quando se está escrevendo o procedimento deve-se concentrar em como implementá-lo;

▪ As primeiras abstrações foram o uso de mnemônicos em assembly;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 58: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

58

Análise semântica

▪ Programas trabalham com entidades▪ Entidades: Variáveis, rotinas e comandos;

▪ As entidades dos programas possuem propriedades chamadas atributos;

▪ Os valores dos atributos devem ser definidos antes de sua utilização.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise semântica

▪ A definição do valor de um atributo é conhecida como amarração ou binding;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 59: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

59

Análise semântica

▪ Amarração estática: ▪ A amarração é estabelecida antes do tempo de execução e não pode ser alterada

depois;

▪ Exemplo: um conjunto de valores é amarrado ao tipo inteiro no tempo de implementação da linguagem, assim, a definição da linguagem específica que o tipo inteiro deve ser suportado e a implementação da linguagem amarra-o à representação da memória.

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Análise semântica

▪ Amarração dinâmica: ▪ A amarração é estabelecida em tempo de execução.

▪ Exemplo: as variáveis são amarradas a um valor em tempo de execução;

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Page 60: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

60

Exemplo

▪ Analise os códigos abaixo e identifique os erros em léxico, sintático e semântico:

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

int I2, A@;I2 = 0;while(I2 <= 0);

I = I+1;I2 = “a”;

int a, b c;a = 2;b := 3;c = 4;

media = (a+b+c)/3;

Fases da compilação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Analisador Léxico

total = num1 + num2 * 50

Page 61: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

61

Fases da compilação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Analisador Léxico

total = num1 + num2 * 50

(id,1)(=>(id,2)(+>(id,3)(*>(50>

Fases da compilação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Analisador Léxico

total = num1 + num2 * 50

Analisador Sintático

(id,1)(=>(id,2)(+>(id,3)(*>(50>

=(id,1) +

(id,2) *(id,3) 50

Page 62: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

62

Fases da compilação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Analisador Léxico

total = num1 + num2 * 50

Analisador Sintático

Analisador Semântico

(id,1)(=>(id,2)(+>(id,3)(*>(50>

=(id,1) +

(id,2) *(id,3) 50

=(id,1) +

(id,2) *(id,3) atof(50)

Fases da compilação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Analisador Léxico

total = num1 + num2 * 50

Analisador Sintático

Analisador Semântico

Gerador de Código Intermediário

(id,1)(=>(id,2)(+>(id,3)(*>(50>

=(id,1) +

(id,2) *(id,3) 50

t1 = atof(50)t2 = id3 * t1t3 = id2 + t2id1 = t3

=(id,1) +

(id,2) *(id,3) atof(50)

Page 63: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

63

Fases da compilação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Analisador Léxico

total = num1 + num2 * 50

Analisador Sintático

Analisador Semântico

Gerador de Código Intermediário

(id,1)(=>(id,2)(+>(id,3)(*>(50>

=(id,1) +

(id,2) *(id,3) 50

t1 = atof(50)t2 = id3 * t1t3 = id2 + t2id1 = t3

Otimizador de Código

t1 = id3 * 50.0id1 = id2 + t1

=(id,1) +

(id,2) *(id,3) atof(50)

Fases da compilação

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda

Analisador Léxico

total = num1 + num2 * 50

Analisador Sintático

Analisador Semântico

Gerador de Código Intermediário

(id,1)(=>(id,2)(+>(id,3)(*>(50>

=(id,1) +

(id,2) *(id,3) 50

t1 = atof(50)t2 = id3 * t1t3 = id2 + t2id1 = t3

Otimizador de Código

t1 = id3 * 50.0id1 = id2 + t1

=(id,1) +

(id,2) *(id,3) atof(50)

Gerador de Código

LDF R2,id3MULF R2, R2, #50.0LDF R1, id2ADDF R1, R1, R2STF id1, R1

Page 64: Paradigmas de Linguagem de Programação - arieldias.comarieldias.com/material/2019-1/PLP/Aula2.pdf · Expressões regulares e as gramáticas regulares Descrevem a sintaxe das linguagens

9/8/2018

64

Referências

▪ SEBESTA, Robert W. Conceitos de linguagens de programação. 9ª ed. PortoAlegre: Bookman, 2011. 792 p. ISBN 978-85-7780-791-8.

▪ Notas de aula – Professora Isabel Harb Manssour

Professor Ariel da Silva Dias - www.arieldias.com - Obra Gratuita, proibida reprodução e venda