Compiladores 02 Analise léxica

Tamanho: px
Começar a partir da página:

Download "Compiladores 02 Analise léxica"

Transcrição

1 Compiladores 02 Analise léxica

2 Sumário Análise Léxica Definição: Lexema, tokens Tabela símbolos Expressões regulares, automatos

3 Relembrando O compilador é dividido em duas etapas Análise Síntese Análise Análise léxica Quebra a entrada em pedaços conhecidos como tokens Análise sintática Analisa a estrura de frase do programa Análise semântica Verifica o significado do programa

4 Relembrando O compilador é dividido em duas etapas Análise Síntese Síntese Geração de código intermediário Otimização de código Geração de código objeto

5 Análise (Front-end) 1.1) Análise léxica Organiza caracteres de entrada em grupos, chamados tokens Erros: tamanho máximo da variável excedido, formação de identificadores, caracteres inválidos.. 1.2) Análise sintática Organiza tokens em uma estrutura hierárquica Erros: falta de (, ), =, identificador inválido ) Análise semântica Checa se o programa respeita regras básicas de consistência Erros: tipos inconsistentes atribuir uma string em uma variável

6 Análise Léxica Também chamado de scanner Tarefa principal: Ler o arquivo onde se encontra o programa fonte Agrupar em sequências o que chamamos de lexemas (tokens)

7 Análise Léxica Algumas Definições: Lexemes: sequência de caracteres que forma uma unidade léxica Tokens: um objeto que contém um par de informações Identificador do tipo da unidade léxica E um valor

8 Análise Léxica Exemplos de tokens: Identificadores nome_de_variavel Números reais 1.8, 2.9, 0.1 nome_de_classe Palavras reservadas if, while, class, for... Caracteres especiais $, º, ª Números inteiros sem sinal 10, 234, 0 Comentários /* isto é um comentário */

9 Análise Léxica Tokens: um objeto que contém um par de informações Identificador do tipo da unidade léxica E um valor Ao ler um identificador(nome_de_variável) gera os seguintes tokens: Tempo <IDENT, tempo> Soma <IDENT, Soma>

10 Análise Léxica Tokens: um objeto que contém um par de informações Identificador do tipo da unidade léxica E um valor Ao ler um identificador(nome_de_variável) gera os seguintes tokens: Tempo <IDENT, tempo> Soma <IDENT, Soma> Isto é um TOKEN!

11 Análise Léxica Tokens: um objeto que contém um par de informações Identificador do tipo da unidade léxica E um valor Ao ler uma palavra-chave, gera os seguintes tokens: If <KW_IF> while <KW_WHILE> Class <KW_CLASS> ( <LEFTPAR> Estes tokens, não precisam do valor

12 Análise Léxica Cada linguagem tem seu conjunto de tokens que são aceitos Por exemplo: Pascal: existe a palavra-chave then C++: não possui

13 Análise Léxica Cada linguagem tem seu conjunto de tokens que são aceitos Por exemplo: Pascal: existe a palavra-chave then C++: não possui A principal função do ANALISADOR LÉXICO é: Ler o arquivo E verificar se o que foi lido é um token válido Ao conjunto de tokens aceitos dá-se o nome: Tabela de símbolos

14 Análise Léxica Tabela de símbolos Conjunto de tokens aceitos Funciona como uma base de consulta para as fases seguintes do compilador Também utilizada para armazenar o tipo das variaveis o valor das variáveis e seu escopo

15 Análise Léxica Tabela de símbolos (exemplo de funcionamento) Seja o código: fi ( a < 10 ) { return a;

16 Análise Léxica Tabela de símbolos (exemplo de funcionamento) Seja o código: fi ( a < 10 ) { return a; Inicia a leitura do texto Captura as letras f e depois i O analisador léxico verifica na tabela de símbolos se: fi é uma palavra reservada?

17 Análise Léxica Tabela de símbolos (exemplo de funcionamento) Seja o código: fi ( a < 10 ) { return a; Inicia a leitura do texto Captura as letras f e depois i O analisador léxico verifica na tabela de símbolos se: fi é uma palavra reservada? Como não encontra informa que fi é um identificador <IDENT, fi >

18 Análise léxica Exemplo Soma = a + b * 40; Analisador léxico

19 Análise léxica Exemplo Soma = a + b * 40; <IDENT, apontador p/ posição soma na tabela de simbolos>, <OP_IGUAL>, <IDENT, apontador p/ posição a na tabela de simbolos>, <OP_SOMA>, <IDENT, apontador p/ posição b na tabela de simbolos>, <OP_MULT>, <NUM, valor 40> Analisador léxico

20 Análise léxica Exemplo Soma = a + b * 40; <IDENT, apontador p/ posição soma na tabela de simbolos>, <OP_IGUAL>, <IDENT, apontador p/ posição a na tabela de simbolos>, <OP_SOMA>, <IDENT, apontador p/ posição b na tabela de simbolos>, <OP_MULT>, <NUM, valor 40> Analisador léxico Tabela de simbolos Lexema (lido) token valor 1 soma <IDENT> - 2 = <OP_IGUAL> - 3 a <IDENT> <OP_SOMA> - 5 b <IDENT> - 6 * <OP_MULT> <NUM> 40

21 Análise léxica Exemplo Soma = a + b * 40; <IDENT, 1>, <OP_IGUAL>, <IDENT, 3>, <OP_SOMA>, <IDENT, 5>, <OP_MULT>, <NUM, valor 40> Analisador léxico Tabela de simbolos Lexema (lido) token valor 1 soma <IDENT> - 2 = <OP_IGUAL> - 3 a <IDENT> <OP_SOMA> - 5 b <IDENT> - 6 * <OP_MULT> <NUM> 40

22 Análise léxica Exemplo Soma = a + b * 40; <IDENT, 1>, <OP_IGUAL>, <IDENT, 3>, <OP_SOMA>, <IDENT, 5>, <OP_MULT>, <NUM, valor 40> Analisador léxico Tabela de simbolos Lexema (lido) token valor 1 soma <IDENT> - 2 = <OP_IGUAL> - 3 a <IDENT> <OP_SOMA> - 5 b <IDENT> - A partir da tabela pronta, todas fases 6 a consultam! * <OP_MULT> <NUM> 40

23 Análise léxica Exercicio: x1 = id2; flag2 = x1 * 2; Faça a analise léxica e construa a tabela de símbolos

24 Análise Léxica Seja este fonte: int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

25 Análise Léxica O analisador léxico, vê o código fonte como uma sequência de caracteres int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a; i n t sp g c d sp ( i n t sp a sp, sp i n t sp b ) { nl w h i l e (a! = b ) nl { i f sp ( a > b ) nl a = b ; nl e l s e nl b = a ; nl nl r e t u r n sp a ; nl

26 Análise Léxica O analisador léxico une os caracteres de acordo com os tokens da linguagem int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a; i n t sp g c d sp ( i n t sp a sp, sp i n t sp b ) { nl w h i l e (a! = b ) nl { i f sp ( a > b ) nl a = b ; nl e l s e nl b = a ; nl nl r e t u r n sp a ; nl

27 Análise Léxica O analisador léxico une os caracteres de acordo com os tokens da linguagem int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

28 Análise Léxica Note que: O Analisador Léxico ignora os espaços em branco int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

29 Análise Léxica Note que: O Analisador Léxico ignora os espaços em branco Também ignora comentários, newline... int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

30 Análise Léxica Note que: O Analisador Léxico ignora os espaços em branco Também ignora comentários, newline... Fica apenas os tokens int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

31 Análise léxica Lembrando que: Cada token tem um codigo/nome Ex: while <KW_WHILE> int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

32 Análise léxica Adiante veremos que, além do codigo/nome ele tem um numero que o identifica Ex: while <KW_WHILE> 12 int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

33 Análise Sintática Só para se ter uma idéia da análise sintática Cria-se uma arvore com os tokens Formalismo BNF int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

34 Análise Léxica - Perguntinha básica Como ele faz esse scanner(leitura) do arquivo? int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

35 Análise Léxica - Perguntinha básica Como ele faz esse scanner(leitura) do arquivo? Faça um programa para isso... int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

36 Análise Léxica - Perguntinha básica Como ele faz esse scanner(leitura) do arquivo? Autômatos!!! int gcd (int a, int b){ while(a!= b){ if(a > b) a = b; else b = a; return a;

37 Análise Léxica Exemplo dos formalismos: Expressão Regular Autômato Finito letra [A Z] [a z] digito [0 9] digitos digito digito* ident letra (letra digito)*

38 Análise Léxica Exemplo dos formalismos: Expressão Regular Autômato Finito letra [A Z] [a z] digito [0 9] digitos digito digito* ident letra (letra digito)* São eles os responsáveis por ler e validar o texto lido!

39 Análise léxica Algumas definições regulares dos tokens letra [A Z] [a z] digito [0 9] digitos digito digito* ident letra (letra digito)* fracao.digitos ε exponencial E ( + - ε) digitos ε num digitos fracao exponencial KW_INT int KW_WHILE while

40 Análise léxica Operadores * Zero ou mais instancias + Uma ou mais instancias? Zero ou uma instancia [... ] Classe de caracteres Ex: [A-Z] A B Instancia de A ou de B AB Instancia de A seguida da instancia B

41 Análise léxica Diagrama scanner-parser: Programa fonte Analisador léxico (Scanner) token Analisador sintático (Parser) semântico getnexttoken() Tabela de símbolos (identificadores e constantes)

42 Análise léxica Diagrama scanner-parser: Jflex e Jcup Expressões regulares regras léxicas regras sintáticas

43 Análise léxica Diagrama scanner-parser: Jflex e Jcup Expressões regulares regras léxicas Lex regras sintáticas Yacc Geradores automáticos Jflex e jcup

44 Análise léxica Diagrama scanner-parser: Jflex e Jcup Expressões regulares regras léxicas Lex regras sintáticas Yacc Geradores automáticos Jflex e jcup Analisador Léxico Analisador Sintático Classes geradas

45 Análise léxica Diagrama scanner-parser: Jflex e Jcup Expressões regulares entrada regras léxicas Lex Analisador Léxico regras sintáticas Yacc Analisador Sintático Geradores automáticos Jflex e jcup saída Classes geradas

46 Análise léxica Exercício Defina os tokens e faça a analise léxica do fonte C++ abaixo: int main (){ float altura, peso, imc; int i; cout << Informe altura e peso ; cin >> altura; cin >> peso; while(i <= 10){ imc = altura/(peso*peso); if(imc > 1.89) return altura; else return peso; i = i + 1;

47 Análise léxica Construa o automato para a seguinte linguagem L = { w w possui aa ou bb como subpalavra

48 Análise léxica Construa o automato para a seguinte linguagem L = { w w possui aa ou bb como subpalavra

Compiladores 04 Analise léxica Jflex. Prof José Rui

Compiladores 04 Analise léxica Jflex. Prof José Rui Compiladores 04 Analise léxica Jflex Prof José Rui Sumário Análise Léxica Definição: Lexema, tokens Tabela símbolos Expressões regulares, automatos JFlex Análise léxica Exemplo Soma = a + b * 40;

Leia mais

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores 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

Leia mais

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA) Análise Léxica A primeira fase da compilação Recebe os caracteres de entrada do programa e os converte em um fluxo de

Leia mais

Compiladores. Introdução

Compiladores. Introdução Compiladores Introdução Apresentação Turma Noite Continuada I 20/03 Continuada II 22/05 Atividades Regimental 05/06 Total 1 Ponto 1 Ponto 1 Ponto 7 Pontos 10 Pontos Aulas expositivas teórico-práticas Exercícios

Leia mais

Compiladores Aula 1. Celso Olivete Júnior.

Compiladores Aula 1. Celso Olivete Júnior. Aula 1 Celso Olivete Júnior olivete@fct.unesp.br Tópicos da disciplina Introdução à compilação Analisador léxico Analisador sintático descendente Analisador sintático ascendente Análise semântica Geração

Leia mais

Identificadores Nome de variáveis, constantes, métodos, etc...

Identificadores Nome de variáveis, constantes, métodos, etc... IV.2 Aspectos Léxicos Convencionais Classes de símbolos Genéricos Token genérico / Lei de formação bem definida Podem possuir limitações de tamanho e/ou valor Possuem valor semântico o token deve ser acompanhado

Leia mais

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores Motivação Prof. Sérgio Faustino Compiladores Conhecimento das estruturas e algoritmos usados na implementação de linguagens: noções importantes sobre uso de memória, eficiência, etc. Aplicabilidade freqüente

Leia mais

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011 Compiladores Prof. Bruno Moreno Aula 8 02/05/2011 RECONHECIMENTO DE TOKENS Reconhecimento de Tokens Até aqui aprendemos a identificar tokens Para reconhecimento, a única abordagem utilizada foi árvores

Leia mais

IV.2 Aspectos Léxicos Convencionais

IV.2 Aspectos Léxicos Convencionais IV.2 Aspectos Léxicos Convencionais Classes de símbolos Genéricos - Token genérico / Lei de formação bem definida - Limitações de tamanho e/ou valor - Possuem valor semântico o token deve ser acompanhado

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira

Leia mais

Compiladores I Prof. Ricardo Santos (cap 1)

Compiladores I Prof. Ricardo Santos (cap 1) Compiladores I Prof. Ricardo Santos (cap 1) Compiladores Linguagens de programação são notações que permitem descrever como programas devem executar em uma máquina Mas, antes do programa executar, deve

Leia mais

Prof. Adriano Maranhão COMPILADORES

Prof. Adriano Maranhão COMPILADORES Prof. Adriano Maranhão COMPILADORES LINGUAGENS: INTERPRETADAS X COMPILADAS Resumo: Linguagem compilada: Se o método utilizado traduz todo o texto do programa, para só depois executar o programa, então

Leia mais

Compiladores - Análise Léxica

Compiladores - Análise Léxica Compiladores - Análise Léxica Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Introdução Primeiro passo do front-end: reconhecer tokens Tokens são as palavras do programa O analisador léxico

Leia mais

Papel do analisador léxico: ler o arquivo fonte em busca de unidades significativas (os tokens) instanciadas por lexemas ou átomos.

Papel do analisador léxico: ler o arquivo fonte em busca de unidades significativas (os tokens) instanciadas por lexemas ou átomos. Análise Léxica Análise Léxica Papel do analisador léxico: ler o arquivo fonte em busca de unidades significativas (os tokens) instanciadas por lexemas ou átomos. Também denominado de scanner, porque varre

Leia mais

Compiladores Aula 3. Celso Olivete Júnior.

Compiladores Aula 3. Celso Olivete Júnior. Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula de hoje... Analisador léxico: tratamento de erros 2 Arquitetura básica de um compilador Análise Análise Léxica Análise Sintática Análise Semântica

Leia mais

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores Análise Léxica Cristiano Lehrer, M.Sc. Introdução (1/3) Análise léxica é a primeira fase do compilador. A função do analisador léxico, também denominado scanner, é: Fazer a leitura do programa

Leia mais

Análise Sintática Introdução

Análise Sintática Introdução Análise Sintática Introdução Renato Ferreira Linguagens e Automatas Linguagens formais são importantes em Computação Especialmente em linguagens de programação Linguagens regulares A linguagem formal mais

Leia mais

Analisador Léxico parte II

Analisador Léxico parte II Analisador Léxico parte II Compiladores Mariella Berger Sumário Definições Regulares Gerador de Analisador Léxico Flex Exemplos As fases de um Compilador Análise Léxica Análise Sintática ANÁLISE Análise

Leia mais

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador

Leia mais

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C ompiladores Análise Léxica Bruno Lopes Bruno Lopes ompiladores 1 / 31 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?

Leia mais

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 32. Instituto de C ompiladores Introdução Bruno Lopes Bruno Lopes ompiladores 1 / 32 Apresentação Em que período estão? O quanto sabem de programação? Quais linguagens? O quanto sabem de unix? O quanto sabem de Linguagens

Leia mais

Compiladores - Análise Léxica

Compiladores - Análise Léxica Compiladores - Análise Léxica Fabio Mascarenhas 2017.2 http://www.dcc.ufrj.br/~fabiom/comp Introdução Primeiro passo do front-end: reconhecer tokens Tokens são as palavras do programa O analisador léxico

Leia mais

Compiladores. Fabio Mascarenhas

Compiladores. Fabio Mascarenhas Compiladores Fabio Mascarenhas 2017.1 http://www.dcc.ufrj.br/~fabiom/comp Introdução Compiladores x Interpretadores Offline x Online Um compilador transforma um programa executável de uma linguagem fonte

Leia mais

Linguagens de Programação Aula 5

Linguagens de Programação Aula 5 Aula 5 Celso Olivete Júnior olivete@fct.unesp.br Na aula anterior Ambiguidade Análise léxica Exercício calculadora 2/@ Na aula anterior AF calculadora 3/@ Na aula de hoje Análise léxica implementação Gramática

Leia mais

Compiladores - Autômatos

Compiladores - Autômatos Compiladores - Autômatos Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp Especificação x Implementação Usamos expressões regulares para dar a especificação léxica da linguagem Mas como podemos

Leia mais

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S. Análise léxica Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador

Leia mais

Compiladores - JFlex. Fabio Mascarenhas

Compiladores - JFlex. Fabio Mascarenhas Compiladores - JFlex Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp JFlex Um gerador de analisadores léxicos que gera analisadores escritos em Java A sintaxe das especificações é inspirada

Leia mais

Linguagens de Programação Aula 3

Linguagens de Programação Aula 3 Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...

Leia mais

Compiladores - JFlex. Fabio Mascarenhas Monday, April 15, 13

Compiladores - JFlex. Fabio Mascarenhas Monday, April 15, 13 Compiladores - JFlex Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp JFlex Um gerador de analisadores léxicos que gera analisadores escritos em Java A sintaxe das especificações é inspirada

Leia mais

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador Estrutura de um compilador programa fonte Compiladores Análise lexical () Expressões Regulares analisador léxico analisador sintático analisador semântico análise gerador de código intermediário otimizador

Leia mais

Aspectos do analisador sintático Usabilidade da Dias de atraso

Aspectos do analisador sintático Usabilidade da Dias de atraso Aspectos do analisador sintático Usabilidade da Dias de atraso Grupo Interface Modularidade e Doc. Interna Doc. Externa Erros léxicos Cada teste vale (0.5) Total = (7,0) Nota Final fluxo de dados (0.5)

Leia mais

INE5421 LINGUAGENS FORMAIS E COMPILADORES

INE5421 LINGUAGENS FORMAIS E COMPILADORES INE5421 LINGUAGENS FORMAIS E COMPILADORES PLANO DE ENSINO Objetivo geral Conhecer a teoria das linguagens formais visando sua aplicação na especificação de linguagens de programação e na construção de

Leia mais

FACULDADE LEÃO SAMPAIO

FACULDADE LEÃO SAMPAIO FACULDADE LEÃO SAMPAIO Paradigmas de Programação Curso de Análise e Desenvolvimento de Sistemas Turma: 309-5 Semestre - 2014.2 Paradigmas de Programação Prof. MSc. Isaac Bezerra de Oliveira. 1 PARADIGMAS

Leia mais

Análise Léxica II. Eduardo Ferreira dos Santos. Setembro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 30

Análise Léxica II. Eduardo Ferreira dos Santos. Setembro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 30 Análise Léxica II Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Setembro, 2016 1 / 30 Sumário 1 Especicação de tokens 2 Reconhecimento de tokens Ambiguidade

Leia mais

Estrutura geral de um compilador programa-fonte

Estrutura geral de um compilador programa-fonte Análise léxica Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador

Leia mais

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013 Análise Sintática Compiladores Cristina C. Vieira 1 Árvore Sintática Nós internos: símbolos não-terminais Folhas: símbolos terminais Arcos: de símbolos não-terminais do LHS da produção para nós do RHS

Leia mais

V.2 Especificação Sintática de Linguagens de Programação

V.2 Especificação Sintática de Linguagens de Programação V.2 Especificação Sintática de Linguagens de Programação Deve ser baseada: No planejamento da Linguagem / Compilador Objetivos, Filosofia, Potencialidades,... Nos critérios de projeto/avaliação Legibilidade,

Leia mais

Compiladores. Conceitos Básicos

Compiladores. Conceitos Básicos Compiladores Conceitos Básicos Processadores de Linguagem De forma simples, um compilador é um programa que recebe como entrada um programa em uma linguagem de programação a linguagem fonte e o traduz

Leia mais

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever

Leia mais

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba Questão 01 No processo de construção de compiladores, é essencial compreender e manipular as expressões regulares e suas equivalências. Dentro desse contexto, seja o alfabeto = {a, b, c, d, e} e a seguinte

Leia mais

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1 Definição de uma Linguagem Linguagem= sintaxe + semântica Especificação da sintaxe: gramática livre de contexto, BNF (Backus-Naur Form) Especificação Semântica: informal (textual), operacional, denotacional,

Leia mais

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 12. Instituto de C ompiladores Análise Sintática Bruno Lopes Bruno Lopes ompiladores 1 / 12 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?

Leia mais

Folha 3 - Análise léxica

Folha 3 - Análise léxica Folha 3 Análise léxica 1. Escrever um programa em FLEX que permite contar o número de ocorrências de uma cadeia de caracteres contida num ficheiro de texto. 2. Escrever um programa em FLEX que permite

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 04 Sintaxe e Semântica Edirlei Soares de Lima Sintaxe e Semântica A descrição de uma linguagem de programação envolve dois aspectos principais:

Leia mais

Compiladores Aula 2. Celso Olivete Júnior.

Compiladores Aula 2. Celso Olivete Júnior. Aula 2 Celso Olivete Júnior olivete@fct.unesp.br Relembrando... Métodos de implementação 1. Compilação: Tradução do programa fonte Linguagem máquina Tradução lenta, execução rápida 2 Relembrando... Métodos

Leia mais

Construção de Compiladores Aula 2 - Analisador Léxico

Construção de Compiladores Aula 2 - Analisador Léxico Construção de Compiladores Aula 2 - Analisador Léxico Bruno Müller Junior Departamento de Informática UFPR 8 de Agosto de 2014 1 Analisador Léxico 2 3 Método 1: Programa 4 Código Analisador Léxico 5 Método

Leia mais

Descrição da Linguagem Pascal Jr.

Descrição da Linguagem Pascal Jr. Descrição da Linguagem Pascal Jr. Características gerais PascalJr possui convenções de tipos igual a linguagem Pascal PascalJr suporta definições de funções Com passagem de parâmetros por valor e por referência

Leia mais

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE Jeferson MENEGAZZO 1, Fernando SCHULZ 2, Munyque MITTELMANN 3, Fábio ALEXANDRINI 4. 1 Aluno 5ª fase do Curso de Ciência da Computação do Instituto

Leia mais

Tokens, Padroes e Lexemas

Tokens, Padroes e Lexemas O Papel do Analisador Lexico A analise lexica e a primeira fase de um compilador e tem por objetivo fazer a leitura do programa fonte, caracter a caracter, e traduzi-lo para uma sequencia de símbolos lexicos

Leia mais

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti. Sintaxe e Semântica George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo

Leia mais

Compiladores - Análise Recursiva

Compiladores - Análise Recursiva Compiladores - Análise Recursiva Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp Geradores x Reconhecedores A definição formal de gramática dá um gerador para uma linguagem Para análise sintática,

Leia mais

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica. Computação L2 Linguagem C++ ovsj@cin.ufpe.br Observação: Material Baseado na Disciplina Computação Eletrônica. Alfabeto São os símbolos ( caracteres ) permitidos na linguagem: Letras (maiúsculas e minúsculas);

Leia mais

Introdução parte II. Compiladores. Mariella Berger

Introdução parte II. Compiladores. Mariella Berger Introdução parte II Compiladores Mariella Berger Sumário Partes de um compilador Gerador da Tabela de Símbolos Detecção de erros As fases da análise As fases de um compilador Montadores O que é um Compilador?

Leia mais

Análise Léxica I. Eduardo Ferreira dos Santos. Março, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 31

Análise Léxica I. Eduardo Ferreira dos Santos. Março, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 31 Análise Léxica I Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Março, 2017 1 / 31 Sumário 1 A estrutura de um compilador 2 Analisador Léxico 2 / 31 A estrutura

Leia mais

Python e sua sintaxe LNCC UFRJ

Python e sua sintaxe LNCC UFRJ Python e sua sintaxe LNCC UFRJ Linguagens naturais e formais Linguagens naturais Linguagem formal Um conjunto finito e não-vazio cujos elementos são símbolos Qualquer cadeia finita de símbolos justapostos

Leia mais

1 d=

1 d= O que faz/o que é Como usar / Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas / Exemplos The Lex & YACC page: http://dinosaur.compilertools.net/ Flex: versão livre http://simplesamples.info/c++/flex.php

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 4 Análise Léxica Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir

Leia mais

Revisão. Fases da dacompilação

Revisão. Fases da dacompilação 1 Revisão Prof. Julio Arakaki Julio Arakaki 1 Fases da dacompilação Código fonte Análise Léxica tokens e lexemas Análise Sintática Árvore Sintática Abstrata (ASA) Análise Semântica ASA decorada Geração

Leia mais

Linguagens de Programação Aula 4

Linguagens de Programação Aula 4 Aula 4 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Autômatos finitos AF:exemplos... Cadeia de caracteres a,b,c 2/82 Na aula passada... Autômatos finitos AF:exemplos... Números inteiros(com

Leia mais

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C ompiladores Análise Sintática Bruno Lopes Bruno Lopes ompiladores 1 / 30 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?

Leia mais

Alfabeto, Cadeias, Operações e Linguagens

Alfabeto, Cadeias, Operações e Linguagens Linguagens de Programação e Compiladores - Aula 3 1 Alfabeto, Cadeias, Operações e Linguagens 1.Conjuntos Para representar um determinado conjunto é necessário buscar uma notação para representá-lo e ter

Leia mais

Compiladores - Análise Recursiva

Compiladores - Análise Recursiva Compiladores - Análise Recursiva Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Analisador Recursivo Maneira mais simples de implementar um analisador sintático a partir de uma gramática,

Leia mais

Projeto de Compiladores

Projeto de Compiladores Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 26 e 27 de fevereiro de 2007 Agenda da Aula Revisão Linguagem de Programação Tradutores Compilador As Fases de Um Compilador Linguagem

Leia mais

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam Linguagens Naturais LINGUAGENS FORMAIS Definições Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam São muito ricas, mas também ambíguas e imprecisas. Ex.: João

Leia mais

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos Linguagens Formais e Autômatos Gramáticas Livre do Contexto (GLC) Cristiano Lehrer, M.Sc. Linguagens Livres do Contexto (1/2) Seu estudo é de fundamental importância na informática: Compreende um universo

Leia mais

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos Plano da aula Compiladores Análise sintática (1) Revisão: Gramáticas Livres de Contexto 1 Introdução: porque a análise sintática? Noções sobre Gramáticas Livres de Contexto: Definição Propriedades Derivações

Leia mais

Lex Adaptação da obra original de Tom Niemann

Lex Adaptação da obra original de Tom Niemann LEX Lex Adaptação da obra original de Tom Niemann Durante a primeira fase, o compilador lê a entrada e converte as strings na origem para os tokens. Com expressões regulares, podemos especificar padrões

Leia mais

Hierarquia de Chomsky e sua relação com os autômatos

Hierarquia de Chomsky e sua relação com os autômatos Hierarquia de Chomsky: Linguagens Regulares, Livres de Contexto, Sensíveis ao Contexto e Irrestritas seus Reconhecedores, e Geradores Autômatos são essenciais para o estudo dos limites da computação. Existem

Leia mais

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42 Análise Sintática I Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Abril, 2017 1 / 42 Sumário 1 Introdução 2 Derivações 3 Ambiguidade 4 Análise sintática descendente

Leia mais

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS Acadêmico: Roger Anderson Schmidt Orientador : Marcel Hugo Supervisor : Ricardo de Freitas Becker Empresa

Leia mais

Compiladores - Gramáticas

Compiladores - Gramáticas Compiladores - Gramáticas Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa

Leia mais

O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page:

O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page: O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page: http://dinosaur.compilertools.net/ 1 O que faz Lex gera programas (em C)

Leia mais

Utiliza Expressões Regulares (ER) Estendidas para definir a especificação da análise léxica desejada

Utiliza Expressões Regulares (ER) Estendidas para definir a especificação da análise léxica desejada O que faz/o que é Como usar Como funciona Formato geral do Arquivo Submetido ao Lex ER estendidas Exemplos The Lex & YACC page: http://dinosaur.compilertools.net/ 1 O que faz Lex gera programas (em C)

Leia mais

Linguagens de Domínio Específico

Linguagens de Domínio Específico Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Análise sintática A análise sintática quebra o texto de um programa na sua estrutura

Leia mais

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior. LFA Aula 09 Gramáticas e Linguagens Livres de Contexto (Hopcroft, 2002) 18/01/2016 Celso Olivete Júnior olivete@fct.unesp.br www.fct.unesp.br/docentes/dmec/olivete/lfa 1 Classes Gramaticais Linguagens

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 03 Processo de Compilação Edirlei Soares de Lima Métodos de Implementação Arquitetura de Von Neumann: A linguagem de máquina de um computador

Leia mais

Pratica JFlex. Prática criando o primeiro analisador léxico

Pratica JFlex. Prática criando o primeiro analisador léxico UNIVERSIDADE DO OESTE DE SANTA CATARINA CAMPUS DE SÃO MIGUEL DO OESTE CURSO: CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMPILADORES PROFESSOR: JOHNI DOUGLAS MARANGON Pratica JFlex JFlex é uma ferramenta que permite

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

Leia mais

CP Compiladores I Prof. Msc.. Carlos de Salles

CP Compiladores I Prof. Msc.. Carlos de Salles CP 5017.9 Prof. Msc.. Carlos de Salles 1 - EMENTA O Processo de Compilação. Deteção e Recuperação de Erros. Introdução à geração de Código Intermediário. Geração de Código de Máquina. Otimização. Uma visão

Leia mais

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Análise sintática Parte 01 Prof. geovanegriesang@unisc.br Continuação... Próxima aula 2 Análise léxica x Análise sintática

Leia mais

Análise Léxica. O papel do analisador léxico

Análise Léxica. O papel do analisador léxico Análise Léxica Compiladores 1 A varredura, ou análise léxica, é a fase de um compilador que lê o programafonte como um arquivo de caracteres e o separa em marcas. Essas marcas são como palavras em uma

Leia mais

Working 03 : Conceitos Básicos I

Working 03 : Conceitos Básicos I Working 03 : Conceitos Básicos I Objetivos: Dominar os conceitos básicos da linguagem de programação C; Aprender a utilizar o compilador, identificando os erros de sintaxe do código fonte; Prazo de Envio:

Leia mais

Função de um Analisador Léxico (Scanner)

Função de um Analisador Léxico (Scanner) Análise Léxica Função de um Analisador Léxico (AL) Tarefas Secundárias do AL Vantagens da Separação entre Análise Léxica e Sintática Erros Léxicos Especificação e Reconhecimento dos tokens (ou átomos)

Leia mais

Compiladores - Gramáticas

Compiladores - Gramáticas Compiladores - Gramáticas Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura do programa

Leia mais

Compiladores Análise Semântica

Compiladores Análise Semântica Compiladores Análise Semântica Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,

Leia mais

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Análise léxica. Parte 01. Geovane Griesang

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Análise léxica. Parte 01. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Análise léxica Parte 01 geovanegriesang@unisc.br Compilador Compilador... é um programa de computador que lê um programa

Leia mais

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL: INE5416 Paradigmas de Programação Ricardo Azambuja Silveira INE CTC UFSC E Mail: silveira@inf.ufsc.br URL: www.inf.ufsc.br/~silveira Conceitos Léxica estudo dos símbolos que compõem uma linguagem Sintaxe

Leia mais

Compiladores Análise Semântica

Compiladores Análise Semântica Compiladores Análise Semântica Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 06 Análise Sintática (Implementação) Edirlei Soares de Lima Análise Sintática A maioria dos compiladores separam a tarefa da análise sintática

Leia mais

Análise Léxica. Sumário

Análise Léxica. Sumário Análise Léxica Renato Ferreira Sumário Definição informal de Análise Léxica Identifica tokens numa string de entrada Alguns detalhes Lookahead Ambiguidade Especificação de Analisadores Léxicos Expressões

Leia mais

Compiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison

Compiladores. Lex e Yacc / Flex e Bison. Ferramentas Flex/Bison Ferramentas Flex/Bison Prof. Sergio F. Ribeiro Lex e Yacc / Flex e Bison São ferramentas de auxílio na escrita de programas que promovem transformações sobre entradas estruturadas. São ferramentas desenvolvidas

Leia mais

Semântica Denotacional

Semântica Denotacional Semântica Denotacional Uma introdução ISBN 0-321-19362-8 Semântica denotacional é um método formal para definir a semântica de linguagens de programação. Interessa a: projetista de linguagens, quem escreve

Leia mais

Compiladores - Especificando Sintaxe

Compiladores - Especificando Sintaxe Compiladores - Especificando Sintaxe Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Sintática A análise sintática agrupa os tokens em uma árvore sintática de acordo com a estrutura

Leia mais

ESTRUTURA COM DECISÃO COMPOSTA

ESTRUTURA COM DECISÃO COMPOSTA LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA ESTRUTURA COM DECISÃO COMPOSTA Prof. Dr. Daniel Caetano 2018-1 Objetivos Entender o que são decisões compostas Compreender como implementar decisões compostas Capacitar

Leia mais

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18 Análise Sintática Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Outubro, 2016 1 / 18 Sumário 1 Introdução 2 Derivações 2 / 18 1 Introdução 2 Derivações 3 /

Leia mais

Função de um Analisador Léxico (Scanner)

Função de um Analisador Léxico (Scanner) Análise Léxica Função de um Analisador Léxico (AL) Tarefas Secundárias do AL Vantagens da Separação entre Análise Léxica e Sintática Erros Léxicos Especificação e Reconhecimento dos tokens (ou átomos)

Leia mais