Lex is a computer program that generates lexical analyzers ("scanners" or "lexers"). Lex is commonly used with the yacc parser generator. Lex, originally written by Mike Lesk and Eric Schmidt and described in 1975, is the standard lexical analyzer generator on many Unix systems, and a tool exhibiting its behavior is specified as part of the POSIX standard. The computer program Yacc is a LALR parser generator developed by Stephen C. Johnson at AT&T Corporation for the Unix operating system in 1970. The name is an acronym for "Yet Another Compiler Compiler". It generates a parser, the part of a compiler that tries to make syntactic sense of the source code, specifically a LALR parser, based on an analytic grammar written in a notation similar to BNF.
1. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Ferramentas Lex & YACC
Compiladores
Ailton Felix :: Bruno Normande :: Michel Alves
Universidade Federal de Alagoas, Campus A. C. Simões
Tabuleiro do Martins - Maceió - AL, CEP: 57072-970
Docente Responsável: Prof. Msc. Alcino Dall’Igna Júnior
11 de Dezembro 2010
Bacharelado em Ciência da Computação Disciplina: Compiladores
2. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Sumário
Tópicos Centrais da Explanação
Lex/Flex.
YACC/Bison.
Bacharelado em Ciência da Computação Disciplina: Compiladores
3. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Sumário
Tópicos Centrais da Explanação
Lex/Flex.
YACC/Bison.
Bacharelado em Ciência da Computação Disciplina: Compiladores
4. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Sumário
Tópicos Centrais da Explanação
Lex/Flex.
YACC/Bison.
Bacharelado em Ciência da Computação Disciplina: Compiladores
5. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Gerador de Analisadores Léxicos
Ferramentas no estilo Lex utilizam uma especificação
baseada em expressões regulares.
A partir dessa definição, Lex gera automaticamente um
programa que simula o comportamento de autômatos
equivalentes às expressões fornecidas.
O programa lê uma entrada e verifica se essa entrada
está no formato especificado.
Enquanto verifica a entrada, pode executar algumas
ações (trechos de programa) desejadas.
Bacharelado em Ciência da Computação Disciplina: Compiladores
6. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Gerador de Analisadores Léxicos
Ferramentas no estilo Lex utilizam uma especificação
baseada em expressões regulares.
A partir dessa definição, Lex gera automaticamente um
programa que simula o comportamento de autômatos
equivalentes às expressões fornecidas.
O programa lê uma entrada e verifica se essa entrada
está no formato especificado.
Enquanto verifica a entrada, pode executar algumas
ações (trechos de programa) desejadas.
Bacharelado em Ciência da Computação Disciplina: Compiladores
7. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Gerador de Analisadores Léxicos
Ferramentas no estilo Lex utilizam uma especificação
baseada em expressões regulares.
A partir dessa definição, Lex gera automaticamente um
programa que simula o comportamento de autômatos
equivalentes às expressões fornecidas.
O programa lê uma entrada e verifica se essa entrada
está no formato especificado.
Enquanto verifica a entrada, pode executar algumas
ações (trechos de programa) desejadas.
Bacharelado em Ciência da Computação Disciplina: Compiladores
8. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Gerador de Analisadores Léxicos
Ferramentas no estilo Lex utilizam uma especificação
baseada em expressões regulares.
A partir dessa definição, Lex gera automaticamente um
programa que simula o comportamento de autômatos
equivalentes às expressões fornecidas.
O programa lê uma entrada e verifica se essa entrada
está no formato especificado.
Enquanto verifica a entrada, pode executar algumas
ações (trechos de programa) desejadas.
Bacharelado em Ciência da Computação Disciplina: Compiladores
9. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Gerador de Analisadores Léxicos
Ferramentas no estilo Lex utilizam uma especificação
baseada em expressões regulares.
A partir dessa definição, Lex gera automaticamente um
programa que simula o comportamento de autômatos
equivalentes às expressões fornecidas.
O programa lê uma entrada e verifica se essa entrada
está no formato especificado.
Enquanto verifica a entrada, pode executar algumas
ações (trechos de programa) desejadas.
Bacharelado em Ciência da Computação Disciplina: Compiladores
10. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Principais Utilizações
Transformações simples e extração de padrões em
textos.
Separação da entrada em unidades léxicas, como
preparação para um analisador sintático.
Os exemplos utilizados nesta apresentação seguirão o
formato do programa Flex.
Bacharelado em Ciência da Computação Disciplina: Compiladores
11. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Principais Utilizações
Transformações simples e extração de padrões em
textos.
Separação da entrada em unidades léxicas, como
preparação para um analisador sintático.
Os exemplos utilizados nesta apresentação seguirão o
formato do programa Flex.
Bacharelado em Ciência da Computação Disciplina: Compiladores
12. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Principais Utilizações
Transformações simples e extração de padrões em
textos.
Separação da entrada em unidades léxicas, como
preparação para um analisador sintático.
Os exemplos utilizados nesta apresentação seguirão o
formato do programa Flex.
Bacharelado em Ciência da Computação Disciplina: Compiladores
13. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex/Flex
Principais Utilizações
Transformações simples e extração de padrões em
textos.
Separação da entrada em unidades léxicas, como
preparação para um analisador sintático.
Os exemplos utilizados nesta apresentação seguirão o
formato do programa Flex.
Bacharelado em Ciência da Computação Disciplina: Compiladores
14. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Fontes
Um texto fonte para LEX é composto de:
Lista de expressões regulares;
Fragmentos de programa associados a cada expressão.
Quando o fonte é submetido ao LEX, um programa é
automaticamente gerado. Esse programa:
Lê um arquivo de entrada;
Particiona a entrada em cadeias que “casam” com as
expressões regulares definidas;
Executa os fragmentos de programa associados às expressões
“casadas” e escreve no arquivo de saída.
Bacharelado em Ciência da Computação Disciplina: Compiladores
15. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Fontes
Um texto fonte para LEX é composto de:
Lista de expressões regulares;
Fragmentos de programa associados a cada expressão.
Quando o fonte é submetido ao LEX, um programa é
automaticamente gerado. Esse programa:
Lê um arquivo de entrada;
Particiona a entrada em cadeias que “casam” com as
expressões regulares definidas;
Executa os fragmentos de programa associados às expressões
“casadas” e escreve no arquivo de saída.
Bacharelado em Ciência da Computação Disciplina: Compiladores
16. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Fontes
Um texto fonte para LEX é composto de:
Lista de expressões regulares;
Fragmentos de programa associados a cada expressão.
Quando o fonte é submetido ao LEX, um programa é
automaticamente gerado. Esse programa:
Lê um arquivo de entrada;
Particiona a entrada em cadeias que “casam” com as
expressões regulares definidas;
Executa os fragmentos de programa associados às expressões
“casadas” e escreve no arquivo de saída.
Bacharelado em Ciência da Computação Disciplina: Compiladores
17. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Fontes
Um texto fonte para LEX é composto de:
Lista de expressões regulares;
Fragmentos de programa associados a cada expressão.
Quando o fonte é submetido ao LEX, um programa é
automaticamente gerado. Esse programa:
Lê um arquivo de entrada;
Particiona a entrada em cadeias que “casam” com as
expressões regulares definidas;
Executa os fragmentos de programa associados às expressões
“casadas” e escreve no arquivo de saída.
Bacharelado em Ciência da Computação Disciplina: Compiladores
18. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Fontes
Um texto fonte para LEX é composto de:
Lista de expressões regulares;
Fragmentos de programa associados a cada expressão.
Quando o fonte é submetido ao LEX, um programa é
automaticamente gerado. Esse programa:
Lê um arquivo de entrada;
Particiona a entrada em cadeias que “casam” com as
expressões regulares definidas;
Executa os fragmentos de programa associados às expressões
“casadas” e escreve no arquivo de saída.
Bacharelado em Ciência da Computação Disciplina: Compiladores
19. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Fontes
Um texto fonte para LEX é composto de:
Lista de expressões regulares;
Fragmentos de programa associados a cada expressão.
Quando o fonte é submetido ao LEX, um programa é
automaticamente gerado. Esse programa:
Lê um arquivo de entrada;
Particiona a entrada em cadeias que “casam” com as
expressões regulares definidas;
Executa os fragmentos de programa associados às expressões
“casadas” e escreve no arquivo de saída.
Bacharelado em Ciência da Computação Disciplina: Compiladores
20. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Fontes
Um texto fonte para LEX é composto de:
Lista de expressões regulares;
Fragmentos de programa associados a cada expressão.
Quando o fonte é submetido ao LEX, um programa é
automaticamente gerado. Esse programa:
Lê um arquivo de entrada;
Particiona a entrada em cadeias que “casam” com as
expressões regulares definidas;
Executa os fragmentos de programa associados às expressões
“casadas” e escreve no arquivo de saída.
Bacharelado em Ciência da Computação Disciplina: Compiladores
21. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Funcionamento
Esquema de Funcionamento
Bacharelado em Ciência da Computação Disciplina: Compiladores
22. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Exemplo com Flex
Um Exemplo Usando o Gerador Flex
O fonte é dividido em três seções separadas por “%%”:
definições, regras e subrotinas.
Bacharelado em Ciência da Computação Disciplina: Compiladores
23. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Lex - Exemplo com Flex
Um Exemplo Usando o Gerador Flex
O fonte é dividido em três seções separadas por “%%”:
definições, regras e subrotinas.
Bacharelado em Ciência da Computação Disciplina: Compiladores
24. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC/Bison
Geradores de Analisadores Sintáticos
O YACC/BISON serve para gerar automaticamente
programas para análise sintática (usualmente em “C”)
de códigos fonte de uma linguagem específica qualquer.
Estas ferramentas possuem como entrada uma descrição de
uma gramática, que especifica uma determinada linguagem,
e gera como saída um programa em C ou C++ que será o
parser desta linguagem.
O parser gerado pelo YACC/BISON permite realizar apenas a
validação do código fonte, indicando se está correto
sintaticamente ou não.
Bacharelado em Ciência da Computação Disciplina: Compiladores
25. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC/Bison
Geradores de Analisadores Sintáticos
O YACC/BISON serve para gerar automaticamente
programas para análise sintática (usualmente em “C”)
de códigos fonte de uma linguagem específica qualquer.
Estas ferramentas possuem como entrada uma descrição de
uma gramática, que especifica uma determinada linguagem,
e gera como saída um programa em C ou C++ que será o
parser desta linguagem.
O parser gerado pelo YACC/BISON permite realizar apenas a
validação do código fonte, indicando se está correto
sintaticamente ou não.
Bacharelado em Ciência da Computação Disciplina: Compiladores
26. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC/Bison
Geradores de Analisadores Sintáticos
O YACC/BISON serve para gerar automaticamente
programas para análise sintática (usualmente em “C”)
de códigos fonte de uma linguagem específica qualquer.
Estas ferramentas possuem como entrada uma descrição de
uma gramática, que especifica uma determinada linguagem,
e gera como saída um programa em C ou C++ que será o
parser desta linguagem.
O parser gerado pelo YACC/BISON permite realizar apenas a
validação do código fonte, indicando se está correto
sintaticamente ou não.
Bacharelado em Ciência da Computação Disciplina: Compiladores
27. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC/Bison
Geradores de Analisadores Sintáticos
O YACC/BISON serve para gerar automaticamente
programas para análise sintática (usualmente em “C”)
de códigos fonte de uma linguagem específica qualquer.
Estas ferramentas possuem como entrada uma descrição de
uma gramática, que especifica uma determinada linguagem,
e gera como saída um programa em C ou C++ que será o
parser desta linguagem.
O parser gerado pelo YACC/BISON permite realizar apenas a
validação do código fonte, indicando se está correto
sintaticamente ou não.
Bacharelado em Ciência da Computação Disciplina: Compiladores
28. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC/Bison
Flex & Bison Integrados
Bacharelado em Ciência da Computação Disciplina: Compiladores
29. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
30. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
31. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
32. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
33. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
34. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
35. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
36. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
37. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Yet Another Compiler-of-Compilers
Produz um parser bottom-up para uma dada
gramática;
Usado para produzir compiladores para Pascal, C,
C++ entre outras;
Além disso, foi usado no desenvolvimento de:
bc(calculadora);
eqn & pic;
verificador de sintaxe SQL(minisql);
Lex.
bison: Versão GNU.
Bacharelado em Ciência da Computação Disciplina: Compiladores
38. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Sequência Básica Operacional
Arquivo contendo gramática desejada no
formato yacc.
Programa yacc.
Programa fonte C criado pelo yacc.
Compilador C.
Programa executável que faz a análise sintática
da gramática descrita em parse.y.
Bacharelado em Ciência da Computação Disciplina: Compiladores
39. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Sequência Básica Operacional
Arquivo contendo gramática desejada no
formato yacc.
Programa yacc.
Programa fonte C criado pelo yacc.
Compilador C.
Programa executável que faz a análise sintática
da gramática descrita em parse.y.
Bacharelado em Ciência da Computação Disciplina: Compiladores
40. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Sequência Básica Operacional
Arquivo contendo gramática desejada no
formato yacc.
Programa yacc.
Programa fonte C criado pelo yacc.
Compilador C.
Programa executável que faz a análise sintática
da gramática descrita em parse.y.
Bacharelado em Ciência da Computação Disciplina: Compiladores
41. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Sequência Básica Operacional
Arquivo contendo gramática desejada no
formato yacc.
Programa yacc.
Programa fonte C criado pelo yacc.
Compilador C.
Programa executável que faz a análise sintática
da gramática descrita em parse.y.
Bacharelado em Ciência da Computação Disciplina: Compiladores
42. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Sequência Básica Operacional
Arquivo contendo gramática desejada no
formato yacc.
Programa yacc.
Programa fonte C criado pelo yacc.
Compilador C.
Programa executável que faz a análise sintática
da gramática descrita em parse.y.
Bacharelado em Ciência da Computação Disciplina: Compiladores
43. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Sequência Básica Operacional
Arquivo contendo gramática desejada no
formato yacc.
Programa yacc.
Programa fonte C criado pelo yacc.
Compilador C.
Programa executável que faz a análise sintática
da gramática descrita em parse.y.
Bacharelado em Ciência da Computação Disciplina: Compiladores
44. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Exemplo de Uso
expr ::= expr + term | term
term ::= term * factor | factor
factor ::= ’(’ expr ’)’ | num | id
Bacharelado em Ciência da Computação Disciplina: Compiladores
45. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Exemplo de Uso
expr ::= expr + term | term
term ::= term * factor | factor
factor ::= ’(’ expr ’)’ | num | id
Bacharelado em Ciência da Computação Disciplina: Compiladores
46. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Formato do Arquivo
{Definições}
%%
{Regras}
%%
{Código Suplementar}
Bacharelado em Ciência da Computação Disciplina: Compiladores
47. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Formato do Arquivo
{Definições}
%%
{Regras}
%%
{Código Suplementar}
Bacharelado em Ciência da Computação Disciplina: Compiladores
48. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Seção de Regras
Normalmente escrita como segue:
expr : expr ’+’ term
| term
;
term : term ’*’ factor
| factor
;
factor : ’(’ expr ’)’
| ID
| NUM
;
Bacharelado em Ciência da Computação Disciplina: Compiladores
49. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Seção de Regras
Normalmente escrita como segue:
expr : expr ’+’ term
| term
;
term : term ’*’ factor
| factor
;
factor : ’(’ expr ’)’
| ID
| NUM
;
Bacharelado em Ciência da Computação Disciplina: Compiladores
50. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Seção de Regras
Normalmente escrita como segue:
expr : expr ’+’ term
| term
;
term : term ’*’ factor
| factor
;
factor : ’(’ expr ’)’
| ID
| NUM
;
Bacharelado em Ciência da Computação Disciplina: Compiladores
51. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Seção de Definições
Normalmente escrita como segue:
%{
#include <stdio.h>
#include <stdlib.h>
%}
%token ID NUM
%start expr
Bacharelado em Ciência da Computação Disciplina: Compiladores
52. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Seção de Definições
Normalmente escrita como segue:
%{
#include <stdio.h>
#include <stdlib.h>
%}
%token ID NUM
%start expr
Bacharelado em Ciência da Computação Disciplina: Compiladores
53. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Seção de Definições
Normalmente escrita como segue:
%{
#include <stdio.h>
#include <stdlib.h>
%}
%token ID NUM
%start expr
Bacharelado em Ciência da Computação Disciplina: Compiladores
54. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Observações
lex/flex produz uma função yylex();
yacc produz uma função yyparse();
yyparse() espera chamar uma yylex();
Como obter yylex()?
Escrever sua própria!
Usar lex/flex
Bacharelado em Ciência da Computação Disciplina: Compiladores
55. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Observações
lex/flex produz uma função yylex();
yacc produz uma função yyparse();
yyparse() espera chamar uma yylex();
Como obter yylex()?
Escrever sua própria!
Usar lex/flex
Bacharelado em Ciência da Computação Disciplina: Compiladores
56. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Observações
lex/flex produz uma função yylex();
yacc produz uma função yyparse();
yyparse() espera chamar uma yylex();
Como obter yylex()?
Escrever sua própria!
Usar lex/flex
Bacharelado em Ciência da Computação Disciplina: Compiladores
57. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Observações
lex/flex produz uma função yylex();
yacc produz uma função yyparse();
yyparse() espera chamar uma yylex();
Como obter yylex()?
Escrever sua própria!
Usar lex/flex
Bacharelado em Ciência da Computação Disciplina: Compiladores
58. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Observações
lex/flex produz uma função yylex();
yacc produz uma função yyparse();
yyparse() espera chamar uma yylex();
Como obter yylex()?
Escrever sua própria!
Usar lex/flex
Bacharelado em Ciência da Computação Disciplina: Compiladores
59. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Observações
lex/flex produz uma função yylex();
yacc produz uma função yyparse();
yyparse() espera chamar uma yylex();
Como obter yylex()?
Escrever sua própria!
Usar lex/flex
Bacharelado em Ciência da Computação Disciplina: Compiladores
60. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Observações
lex/flex produz uma função yylex();
yacc produz uma função yyparse();
yyparse() espera chamar uma yylex();
Como obter yylex()?
Escrever sua própria!
Usar lex/flex
Bacharelado em Ciência da Computação Disciplina: Compiladores
61. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Construindo yylex()
Normalmente escrita como segue:
int yylex()
{
if(it’s a num)
return NUM;
else if(it’s an id)
return ID;
else if(parsing is done)
return 0;
else if(it’s an error)
return -1;
}
Bacharelado em Ciência da Computação Disciplina: Compiladores
62. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Construindo yylex()
Normalmente escrita como segue:
int yylex()
{
if(it’s a num)
return NUM;
else if(it’s an id)
return ID;
else if(parsing is done)
return 0;
else if(it’s an error)
return -1;
}
Bacharelado em Ciência da Computação Disciplina: Compiladores
63. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Construindo yylex()
Normalmente escrita como segue:
int yylex()
{
if(it’s a num)
return NUM;
else if(it’s an id)
return ID;
else if(parsing is done)
return 0;
else if(it’s an error)
return -1;
}
Bacharelado em Ciência da Computação Disciplina: Compiladores
64. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Lex & YACC
Bacharelado em Ciência da Computação Disciplina: Compiladores
65. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Lex & YACC - Exemplo de Uso
Suponha um arquivo lex scanner.l e um
arquivo yacc chamado decl.y.
Passos a serem feitos:
yacc -d decl.y
lex scanner.l
gcc -c lex.yy.c y.tab.c
gcc -o parser lex.yy.o y.tab.o -ll
(Nota) scanner deve incluir na seção de definições:
#include "y.tab.h"
Bacharelado em Ciência da Computação Disciplina: Compiladores
66. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Lex & YACC - Exemplo de Uso
Suponha um arquivo lex scanner.l e um
arquivo yacc chamado decl.y.
Passos a serem feitos:
yacc -d decl.y
lex scanner.l
gcc -c lex.yy.c y.tab.c
gcc -o parser lex.yy.o y.tab.o -ll
(Nota) scanner deve incluir na seção de definições:
#include "y.tab.h"
Bacharelado em Ciência da Computação Disciplina: Compiladores
67. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Lex & YACC - Exemplo de Uso
Suponha um arquivo lex scanner.l e um
arquivo yacc chamado decl.y.
Passos a serem feitos:
yacc -d decl.y
lex scanner.l
gcc -c lex.yy.c y.tab.c
gcc -o parser lex.yy.o y.tab.o -ll
(Nota) scanner deve incluir na seção de definições:
#include "y.tab.h"
Bacharelado em Ciência da Computação Disciplina: Compiladores
68. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Lex & YACC - Exemplo de Uso
Suponha um arquivo lex scanner.l e um
arquivo yacc chamado decl.y.
Passos a serem feitos:
yacc -d decl.y
lex scanner.l
gcc -c lex.yy.c y.tab.c
gcc -o parser lex.yy.o y.tab.o -ll
(Nota) scanner deve incluir na seção de definições:
#include "y.tab.h"
Bacharelado em Ciência da Computação Disciplina: Compiladores
69. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
70. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
71. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
72. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
73. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
74. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
75. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
76. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
77. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
78. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
Em Relação as Regras
As regras podem ser recursivas;
As regras não podem ser ambíguas;
A ferramenta usa um parser bottom-up Shift/
Reduce;
Solicita um token
Empilha
Redução?
Sim: reduz usando a regras correspondentes
Não: pega outro token
yacc -v gram.y gera a tabela de estados, em
y.output
Bacharelado em Ciência da Computação Disciplina: Compiladores
79. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
A Volta do Atributo
Cada símbolo tem um valor associado (atributo)
Pode ser uma quantidade numérica no caso de um número (Ex.:42)
Pode ser um ponteiro para um string ("Hello, World!")
Pode ser um ponteiro para uma tabela de símbolos.
Ao usarmos lex junto com o YACC, o valor é colocado
em yylval
Em situações complexas, yylval é uma union.
Típico código lex: [0-9]+ {yylval = atoi(yytext); return NUM}
Bacharelado em Ciência da Computação Disciplina: Compiladores
80. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
A Volta do Atributo
Cada símbolo tem um valor associado (atributo)
Pode ser uma quantidade numérica no caso de um número (Ex.:42)
Pode ser um ponteiro para um string ("Hello, World!")
Pode ser um ponteiro para uma tabela de símbolos.
Ao usarmos lex junto com o YACC, o valor é colocado
em yylval
Em situações complexas, yylval é uma union.
Típico código lex: [0-9]+ {yylval = atoi(yytext); return NUM}
Bacharelado em Ciência da Computação Disciplina: Compiladores
81. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
A Volta do Atributo
Cada símbolo tem um valor associado (atributo)
Pode ser uma quantidade numérica no caso de um número (Ex.:42)
Pode ser um ponteiro para um string ("Hello, World!")
Pode ser um ponteiro para uma tabela de símbolos.
Ao usarmos lex junto com o YACC, o valor é colocado
em yylval
Em situações complexas, yylval é uma union.
Típico código lex: [0-9]+ {yylval = atoi(yytext); return NUM}
Bacharelado em Ciência da Computação Disciplina: Compiladores
82. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
A Volta do Atributo
Cada símbolo tem um valor associado (atributo)
Pode ser uma quantidade numérica no caso de um número (Ex.:42)
Pode ser um ponteiro para um string ("Hello, World!")
Pode ser um ponteiro para uma tabela de símbolos.
Ao usarmos lex junto com o YACC, o valor é colocado
em yylval
Em situações complexas, yylval é uma union.
Típico código lex: [0-9]+ {yylval = atoi(yytext); return NUM}
Bacharelado em Ciência da Computação Disciplina: Compiladores
83. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
A Volta do Atributo
Cada símbolo tem um valor associado (atributo)
Pode ser uma quantidade numérica no caso de um número (Ex.:42)
Pode ser um ponteiro para um string ("Hello, World!")
Pode ser um ponteiro para uma tabela de símbolos.
Ao usarmos lex junto com o YACC, o valor é colocado
em yylval
Em situações complexas, yylval é uma union.
Típico código lex: [0-9]+ {yylval = atoi(yytext); return NUM}
Bacharelado em Ciência da Computação Disciplina: Compiladores
84. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
A Volta do Atributo
Cada símbolo tem um valor associado (atributo)
Pode ser uma quantidade numérica no caso de um número (Ex.:42)
Pode ser um ponteiro para um string ("Hello, World!")
Pode ser um ponteiro para uma tabela de símbolos.
Ao usarmos lex junto com o YACC, o valor é colocado
em yylval
Em situações complexas, yylval é uma union.
Típico código lex: [0-9]+ {yylval = atoi(yytext); return NUM}
Bacharelado em Ciência da Computação Disciplina: Compiladores
85. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
A Volta do Atributo
Cada símbolo tem um valor associado (atributo)
Pode ser uma quantidade numérica no caso de um número (Ex.:42)
Pode ser um ponteiro para um string ("Hello, World!")
Pode ser um ponteiro para uma tabela de símbolos.
Ao usarmos lex junto com o YACC, o valor é colocado
em yylval
Em situações complexas, yylval é uma union.
Típico código lex: [0-9]+ {yylval = atoi(yytext); return NUM}
Bacharelado em Ciência da Computação Disciplina: Compiladores
86. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
YACC
A Volta do Atributo
Cada símbolo tem um valor associado (atributo)
Pode ser uma quantidade numérica no caso de um número (Ex.:42)
Pode ser um ponteiro para um string ("Hello, World!")
Pode ser um ponteiro para uma tabela de símbolos.
Ao usarmos lex junto com o YACC, o valor é colocado
em yylval
Em situações complexas, yylval é uma union.
Típico código lex: [0-9]+ {yylval = atoi(yytext); return NUM}
Bacharelado em Ciência da Computação Disciplina: Compiladores
87. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Conclusões
Balanço Geral da Experiência
O Que Foi Aprendido?
Escrever um compilador é difícil: requer tempo e
esforço!
Scanners e parsers podem ser construídos por métodos
automáticos.
Bacharelado em Ciência da Computação Disciplina: Compiladores
88. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Conclusões
Balanço Geral da Experiência
O Que Foi Aprendido?
Escrever um compilador é difícil: requer tempo e
esforço!
Scanners e parsers podem ser construídos por métodos
automáticos.
Bacharelado em Ciência da Computação Disciplina: Compiladores
89. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Conclusões
Balanço Geral da Experiência
O Que Foi Aprendido?
Escrever um compilador é difícil: requer tempo e
esforço!
Scanners e parsers podem ser construídos por métodos
automáticos.
Bacharelado em Ciência da Computação Disciplina: Compiladores
90. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Conclusões
Balanço Geral da Experiência
O Que Foi Aprendido?
Escrever um compilador é difícil: requer tempo e
esforço!
Scanners e parsers podem ser construídos por métodos
automáticos.
Bacharelado em Ciência da Computação Disciplina: Compiladores
91. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Agradecimentos
Grato Pela Atenção!
Bacharelado em Ciência da Computação Disciplina: Compiladores
92. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Contatos
Como Contactar o Grupo?
Ailton Felix - afdlf2@gmail.com
Bruno Normande - normandelins@gmail.com
Michel Alves - michel.mas@gmail.com
Bacharelado em Ciência da Computação Disciplina: Compiladores
93. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Contatos
Como Contactar o Grupo?
Ailton Felix - afdlf2@gmail.com
Bruno Normande - normandelins@gmail.com
Michel Alves - michel.mas@gmail.com
Bacharelado em Ciência da Computação Disciplina: Compiladores
94. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Contatos
Como Contactar o Grupo?
Ailton Felix - afdlf2@gmail.com
Bruno Normande - normandelins@gmail.com
Michel Alves - michel.mas@gmail.com
Bacharelado em Ciência da Computação Disciplina: Compiladores
95. Universidade Federal do Estado de Alagoas Instituto de Computação - Campus A. C. Simões
Contatos
Como Contactar o Grupo?
Ailton Felix - afdlf2@gmail.com
Bruno Normande - normandelins@gmail.com
Michel Alves - michel.mas@gmail.com
Bacharelado em Ciência da Computação Disciplina: Compiladores