Programa fonte token padrões lexema Tokens
|
|
- Marisa Conceição de Lacerda
- 6 Há anos
- Visualizações:
Transcrição
1 Análise Léxica Analisador Léxico Primeira fase de um compilador. Objetivo: ler os caracteres de entrada e produzir como saída uma seqüência de tokens que o parser vai usar para análise sintática. Programa fonte analisador léxico token pede próximo token tabela de símbolos parser 1 2 Construindo um Analisador Léxico Outras Possíveis Tarefas do Analisador Léxico Especificar tokens e lexemas da linguagem. Implementar (ou gerar através de ferramenta) o analisador a partir da especificação. Tratamento de espaços em branco e comentários. Tratamento de mensagens de erro (localização / impressão). 3 4 Por que usar um Analisador Léxico? Tokens, Padrões e Lexemas Design mais simples misturar análise léxica com sintática torna o parser bem mais complicado. Eficiência separação possibilita construir processadores léxicos e sintáticos mais eficientes. Portabilidade variações de dispositivos podem ficar restritas ao analisador léxico. Existem conjuntos de strings na entrada que geram o mesmo token. Elas são descritas por padrões associados ao token. O padrão casa cada string do conjunto. Um lexema é uma seqüência de caracteres do programa fonte que casa com um padrão de um token. Tokens são símbolos terminais da linguagem
2 Tokens, Padrões e Lexemas Tokens normalmente são palavras-chave, operadores, identificadores, constantes, strings literais e símbolos de pontuação, como parenteses e vírgulas. Padrões normalmente são especificados por expressões regulares. Tokens, Padrões e Lexemas TOKEN LEXEMAS DESCRIÇÃO const const const if if if relação <, <=, =, < >, > < ou <= ou id pi, count, D2 Letra seguida de letras e/ou dígitos num , 0, 6.02E23 Constante numérica literal pequeno exemplo Quaisquer caracteres entre exceto aspa 7 8 Dificuldades na Implementação de um Analisador Léxico Linguagens que requerem determinados construtores em posições (colunas) específicas da linha de entrada (e.g. Fortran). Tratamento de espaços em branco. Ausência de palavras reservadas. Dificuldades - Exemplos Fortran: DO 5 I = 1.25 DO 5 I = 1,25 PL/I: IF THEN THEN THEN = ELSE; ELSE ELSE = THEN; 9 10 Atributos de um Token Ao reconhecer um token num é relevante saber se seu valor é zero ou um, por exemplo. Geralmente associado a um token existe um atributo. Uso da tabela de símbolos para guardar informações auxiliares sobre tokens. Atributos de um Token - Exemplo E = M * C ** 2 <id, apontador p/ posição de E na tabela de símbolos> <atrib_op,> <id, apontador p/ posição de M na tabela de símbolos> <mult_op,> <id, apontador p/ posição de C na tabela de símbolos> <exp_op,> <num, valor 2>
3 Erros de Análise Léxica Relativamente raros. fi(a == f(x)) Geralmente o analisador tenta se recuperar do erro, ignorando caracteres modalidade pânico. remover um caracter estranho inserir um caracter ausente substituir um caracter incorreto por um correto transpor dois caracteres adjacentes. Opções de Implementação de um Analisador Léxico Uso de um gerador de analisadores léxicos, como lex ou flex, que produzem um analisador léxico a partir de uma especificação em expressões regulares. Escrever o analisador em uma linguagem de programação convencional, usando as facilidades de E/S da linguagem para ler a entrada. Escrever o analisador léxico em assembly, gerenciando explicitamente a leitura. Obs: Uso de bufferização da entrada é importante para a eficiência de um analisador léxico Bufferização da Entrada Bufferização da Entrada Uso de sentinelas. Função: reduzir a sobrecarga imposta no processamento de um caractere. Uso de um buffer dividido em duas metades, com N caracteres cada uma. Leitura de N caracteres de entrada através de um único comando. : : : E : : = : M : * : eof C : * : * : 2 : eof : : : : eof apontador_adiante ++; início_de_lexema se apontador_adiante == eof se apontador_adiante == fim da 1 a metade recarregar 2 a metade; apontador_adiante ++; senão se apontador_adiante == fim da 2 a metade recarregar 1a metade; mover apontador_adiante p/ início 1 a metade; senão terminar a análise léxica; 15 apontador_adiante 16 Especificação dos Tokens Expressões regulares notação importante para especificar padrões. Baseado na Teoria das Linguagens: alfabetos, cadeias e linguagens Operações sobre linguagens: união, concatenação e fechamento Exemplo: seja L o conjunto (de letras) {A,B,,Z,a,b,,z e D o conjunto (de dígitos) {0,1,,9. Operadores sobre Linguagens OPERAÇÃO DEFINIÇÃO união de L e M, L M = {s s L escrita L M ou s M concatenação de L e M, LM = { st s L e escrita LM t M fechamento Kleene de L, L* = i = 0, L i escrito L* fechamento positivo de L, L + = i = 1, L i escrito L
4 Operações sobre Linguagens - Exemplo L D conjunto composto de letras e dígitos. LD conjunto de strings compostas de letras seguidas de dígitos. L 4 conjunto de todas as strings com 4 letras. L* conjunto de todas as strings de letras, inclusive a string vazia. D + conjunto de strings de um ou mais dígitos. L(L D)*? Propriedades Algébricas é comutativa e associativa concatenação é associativa concatenação se distribui sobre é o elemento identidade da concatenação * é idempotente Expressões Regulares Expressões Regulares O operador unário * possui a maior precedência e é associativo à esquerda. A concatenação tem a segunda maior precedência e é associativo à esquerda. possui a menor precedência e é associativo à esquerda. (a) ((b)*(c)) a b*c Permitem a definição de linguagens a partir de definições de expressões regulares mais simples. Exemplos: Identificadores em C: letra (letra dígito) * a b (a b) (a b) a* (a b)* a a*b Expressões Regulares Definição de Linguagem Regular Autômato Finito descreve uma linguagem. ER é uma formalização algébrica de um AF. Linguagem descrita por uma ER G Linguagem Regular: L(G). Comandos que pesquisam palavras (grep) padrão definido por uma ER A constante é uma expressão regular. L( )={ Qualquer símbolo a é uma ER. L(a)={a Uma variável L representa uma Linguagem Regular
5 Definição de Linguagem Regular Se E e F são ER s então E F é uma ER. L(E F) = L(E) L(F) Se E e F são ER s então EF é uma ER. L(EF)=L(E)L(F) Se E é uma ER então E* é uma ER. L(E*)=(L(E))* Se E é uma ER então (E) é uma ER. L((E))=L(E) Exemplos (0 1) * (0 1) * (0 11) 0 * (0 * 10 * 10 * 10 * ) * palavras que contêm 001. palavras com pelo menos um par de 0 s consecutivos. palavras de comprimento par, com 0 s nas posições ímpares ER s e Autômatos Finitos Os AF definem Linguagens. Equivalência entre AFND e AFD. ER definem Linguagens Regulares. Geradores de Analisadores Léxicos (Lex ou Flex) constroem AFD s a partir de definições regulares. ER s e Autômatos Finitos Equivalência entre ER s e AF s: ER s e Autômatos Finitos L( ) = { ER s e Autômatos Finitos L(R S) = L(R) L(S) L(a) = {a L(RS) = L(R)L(S)
6 ER s e Autômatos Finitos L(R * ) = (L(R)) * Exemplo: R = (1 01) * (0 ) E = (a b) * abb Definições Regulares Nomeia expressões regulares. Definição regular é uma seqüência de definições: d 1 r 1 d 2 r 2... d n r n d i é um nome distinto e r i, uma expressão de símbolos em Σ {d 1,d 2,...,d i Exemplo - Pascal letra A B Z a b z dígito0 1 9 idletra (letra dígito)* dígitosdígito dígito* fração_opc. dígitos expoente_opc(e (+ - ) dígitos) num dígitos fração_opc expoente_opc Simplificações Notacionais + uma ou mais instâncias. r+ rr*? zero ou uma instância. r? r [ ] classes de caracteres. Ex: [abc] a b c [a-z] a b z [A-Za-z][A-Za-z0-9]* Simplificações Notacionais Conjuntos Não-Regulares dígitos dígito dígito* fração_opc. dígitos expoente_opc (E (+ - ) dígitos) num dígitos fração_opc expoente_opc r+ rr* r? r dígitosdígito + fração_opc (. dígitos)? expoente_opc (E (+ -)? dígitos)? num dígitos fração_opc expoente_opc Impossibilidade de algumas linguagens serem descritas por qualquer expressão regular. Expressões regulares não podem ser usadas para descrever parênteses balanceados ou construções aninhadas
7 Reconhecimento de Tokens Gerar diagramas de transição e depois implementar uma máquina de estados. Implementar autômatos finitos determinísticos e nãodeterminísticos. Usar uma linguagem gerada pela seguinte gramática: cmd if expr then cmd if expr then cmd else cmd expr termo termo termo termo id num Reconhecimento de Tokens Definições regulares: if if then then else else < <= = < > > >= id letra(letra dígito)* num dígito + (.dígito + )?(E(+ -)?dígito + )? delim branco tabulação avanço de linha ws delim Reconhecimento de Tokens EXPRESSÃO REGULAR ws if then else id num < <= = < > > >= TOKEN if then else id num VALOR DE ATRIBUTO apontador para entrada da tabela apontador para entrada da tabela LT LE EQ NE GT GE Diagramas de Transições Passo intermediário na geração de um analisador léxico. Delineiam ações quando um analisador léxico é chamado pelo parser. Assumimos que os próximos diagramas de transições sejam determinísticos. estado de partida rótulo 1 rótulo Diagramas de Transições Para operadores relacionais: Diagramas de Transições Para identificadores e palavras-chave, e para espaços:
8 Diagramas de Transições Para números sem sinal em Pascal: Código C - Próximo Estado de Partida Código C do Analisador Léxico token próximo_token() { while(1) { switch(estado) { case 0: c = next_char(); if(c == c == \t c == \n ) { estado = 0; inicio_de_lexema++; else if(c == < ) estado = 1; else if(c == = ) estado = 5; else if(c == > ) estado = 6; else estado = falhar(); break;... /* inserir código para casos 1-8 aqui */ Código C do Analisador Léxico case 9: c = next_char(); if(isletter(c)) estado = 10; else estado = falhar(); break; case 10: c = next_char(); if(isletter(c)) estado = 10; else if(isdigit(c) estado = 10; else estado = 11; break; case 11: retrair(1); instalar_id(); return(obter_token());... /* inserir casos aqui */ Código C do Analisador Léxico Ferramenta Lex case 25: c = next_char(); if(isdigit(c)) estado = 26; else estado = falhar(); break; case 26: c = next_char(); if(isdigit(c)) estado = 26; else estado = falhar(); break; case 27: retrair(1); instalar_num(); return(num); Ferramenta Lex Compilador Lex. Especificação de entrada Linguagem Lex. Programa gerado representação tabular de um diagrama de transições. Ações associadas às expressões regulares trechos de códigos em C
9 Linguagem Lex Linguagem (e compilador) para especificar analisadores léxicos. Criando um analisador léxico com Lex: programa fonte Lex lex.l lexyy.c fluxo de caracteres de entrada Compilador Lex Compilador C a.out lexyy.c a.out seqüência de tokens Especificações Lex Formato: declarações variáveis, constantes, definições regulares regras de tradução expressões regulares e ações em C procedimentos auxiliares Funcionamento do Lex ativado leitura da entrada um caractere por vez encontra o mais longo prefixo reconhecido por uma das expressões regulares executa a ação correspondente retorna o token apropriado. Figurações Importantes do Lex Declaração de constantes e variáveis (1 a seção) são envolvidas por chaves especiais (%{ e %). Procedimentos auxiliares (3 a seção) também são copiados diretamente no analisador léxico lexyy.c. Metassímbolos em Lex: ( )? \ Expressões Regulares em Lex Um Programa Lex. a. [a-z$] [abj-oz] [^aa] [A-Z][A-Z0-9]* [+-]?[0-9]+ a{3,5 [^A-Z] %{ int num_lines = 0, num_chars = 0; % \n ++num_lines; ++num_chars;. ++num_chars; main() { yylex(); printf( linhas = %d,caracteres = %d\n, num_lines, num_chars); int yywrap() { return(1);
10 Um Outro Programa Lex Programa Lex - Analex {id printf( Identificador: %s\n, yytext); { [^\n]* /* nada */ %{ /* definição de constantes LT,LE,EQ,NE,. printf( Caractere desconhecido: %s\n, GT,GE,IF,THEN,ELSE,ID,NUMERO,RELOP */ yytext); % /* definições regulares */ void main(int argc, char *argv[]){ delim [ \t\n] ++argv, --argc; ws {delim+ if (argc > 0) letra [A-Za-z] yyin = fopen(argv[0],"r"); else digito [0-9] yyin = stdin; id {letra({letra {digito)* yylex(); numero {digito+(\.{digito+)? (E[+\-]?{digito+)? int yywrap(){ return(1); Programa Lex - Analex {ws {/* nenhuma ação, nenhum ret. */ if {return(if); then {return(then); else {return(else); {id {yylval = instalar_id(); return(id); {numero {yylval = instalar_num(); return(numero); "<" {yylval = LT; return(relop); "<=" {yylval = LE; return(relop); "=" {yylval = EQ; return(relop); "<>" {yylval = NE; return(relop); Programa Lex - Analex ">" {yylval = GT; return(relop); ">=" {yylval = GE; return(relop); int instalar_id(){ /* Copia lexema para a tabela de símbolos. Primeiro caracter do lexema é apontado pela variável yytext e o comprimento é definido pela variável yyleng. */ int instalar_num() {
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 maisCOMPILADORES. Análise léxica. 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 léxica Parte 02 Prof. geovanegriesang@unisc.br Reconhecimento de tokens Na aula anterior, padrões foram expressados
Leia maisCompiladores 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 maisLex 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 maisPapel 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 maisFolha 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 maisO 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 maisUtiliza 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 mais1 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 maisProf. 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 maisCompiladores. 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 maisCompiladores. 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 maisFunçã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 maisCompiladores - 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 maisLinguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.
LFA Aula 02 Linguagens regulares - introdução 28/09/2015 Celso Olivete Júnior olivete@fct.unesp.br 1 Na aula passada... Visão geral Linguagens regulares expressões regulares autômatos finitos gramáticas
Leia maisa * Expressões Regulares (ER) AF e ER Equivalências entre AFD, AFND, AF-, ER
a * Expressões Regulares (ER) AF e ER Equivalências entre AFD, AFND, AF-, ER 1 Expressões Regulares (ER) Uma ER sobre um alfabeto é definida como: a) é uma ER e denota a linguagem vazia b) é uma ER e denota
Leia maisCompiladores - 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 maisIdentificadores 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 maisIV.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 maisAnalisador 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 maisIntrodução. Flex e uma ferramenta para gerar scanners programas que reconhecem padrões lexicais em texto
Compiladores Flex Introdução Flex e uma ferramenta para gerar scanners programas que reconhecem padrões lexicais em texto O flex lê o arquivo de entrada fornecido, para uma descrição de um scanner a ser
Leia maisLinguagens 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 maisComo 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 maisFERRAMENTA 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 maisIntroduçã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 maisTokens, 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 maisUniversidade 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 maisCompiladores. 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 maisCompiladores 02 Analise léxica
Compiladores 02 Analise léxica Sumário Análise Léxica Definição: Lexema, tokens Tabela símbolos Expressões regulares, automatos Relembrando O compilador é dividido em duas etapas Análise Síntese Análise
Leia maisEstrutura 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 maisAná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 maisCompiladores. 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 maisV.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 maisCompiladores 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 maisUm 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 maisProjeto de Compiladores. FIR Faculdade Integrada do Recife João Ferreira joaoferreira@fir.br 5 e 6 de março de 2007
Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira joaoferreira@fir.br 5 e 6 de março de 2007 Agenda da Aula Resposta exercício da aula passada Revisão As Fases de Um Compilador Analisador
Leia maisConcurso 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 maisIntrodução ao FLEX e expressões regulares
Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07 Ficha 1 Introdução ao FLEX e expressões regulares Objectivos: Familiarização com a ferramenta FLEX; Introdução ao reconhecimento
Leia maisAná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 maisCompiladores - 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 maisa * Expressões Regulares (ER) Conversão de AF para ER no JFLAP Equivalências entre AFD, AFND, AF-, ER, GR
a * Expressões Regulares (ER) Conversão de AF para ER no JFLAP Equivalências entre AFD, AFND, AF-, ER, GR 1 Expressões Regulares (ER) Uma ER sobre um alfabeto é definida como: a) é uma ER e denota a linguagem
Leia maisConstruçã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 maisLicenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07
Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07 Ficha 3 Autómatos Finitos Objectivos: Introdução ao conceito de Autómato Finito e notações utilizadas na sua representação;
Leia mais1 Expressões Regulares e Linguagens
1 1 Expressões Regulares e Linguagens Linguagem de Programação o Pesquisa em Textos o Componentes de Compiladores Intimamente Relacionadas com AFNDs São capazes de definir todas e somente as linguagens
Leia maisCompiladores 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) Expressões e Definições Regulares Revisão Expressões regulares descrevem todas as linguagens que podem ser construídas
Leia maisPython 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 maisLinguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática
Linguagens Formais Aula 01 - Conceitos Básicos Prof. Othon Batista Mestre em Informática Sumário Introdução à Linguagem Alfabeto Cadeias de Símbolos, Palavras Tamanho de Palavra Prefixo, Sufixo ou Subpalavra
Leia maisAná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 maisAná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 maisCompiladores - 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 maisConstrução de Compiladores Aula 3 - Analisador Sintático
Construção de Compiladores Aula 3 - Analisador Sintático Bruno Müller Junior Departamento de Informática UFPR 20 de Agosto de 2014 Definição A análise sintática (parsing) é um processo que verifica se
Leia maisCompiladores. 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 maisSCC Capítulo 1 Linguagens Regulares e Autômatos Finitos
SCC-505 - Capítulo 1 Linguagens Regulares e Autômatos Finitos João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo
Leia maisParadigmas de Linguagens de Programação. Expressões e Instruções de Atribuição
Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação
Leia maisEXPRESSÃO REGULAR PARA UMA FUNÇÃO EQUIVALENTE EM PASCAL, UTILIZANDO DOIS ALGORITMOS BASEADOS NO TEOREMA DE KLEENE RONALD GLATZ
PROTÓTIPO TIPO PARA TRANSFORMAÇÃO DE UMA EXPRESSÃO REGULAR PARA UMA FUNÇÃO EQUIVALENTE EM PASCAL, UTILIZANDO DOIS ALGORITMOS BASEADOS NO TEOREMA DE KLEENE 1 OBJETIVO DESTE TRABALHO ALGUNS CONCEITOS BÁSICOS
Leia maisLinguagens de Programação
Linguagens de Programação 128 13 129 Linguagens de Programação Uma linguagem de programação é um vocabulário e um conjunto de regras gramaticais usadas para escrever programas de computador. Esses programas
Leia maisLinguagens 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 Gramáticas Vamos usar uma notação parecida com a de expressões regulares para definir
Leia maisCompiladores 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 maisOperações Fechadas sobre LR s Aplicações
a n Operações Fechadas sobre LR s Aplicações (H&U, 969),(H&U, 979), (H;M;U, 200) e (Menezes, 2002) (Sipser,997) Operações que preservam a propriedade de ser uma LR Existem muitas operações que, quando
Leia maisCompiladores. 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 maisCompiladores. Análise léxica. Plano da aula. Vocabulário básico. Motivação para análise léxica. Estrutura de um compilador
Estrutura de um compilador Compiladores Análise lexical (1) Expressões Regulares 1 2 Plano da aula 1. Motivação do uso de E.R. e definições Linguagens, tokens, lexemas... 2. Regras de formação e exemplos
Leia maisCompilação da linguagem Panda
Construção de Compiladores I [BCC328] Atividades Práticas Compilação da linguagem Panda Departamento de Computação Universidade Federal de Ouro Preto Prof. José Romildo Malaquias 22 de abril de 2015 Resumo
Leia maisCompiladores - 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 maisDEP. INFORMÁTICA - UNIVERSIDADE DA BEIRA INTERIOR
DEP. INFORMÁTICA - UNIVERSIDADE DA BEIRA INTERIOR Eng. Informática Linguagens Formais e Compilação 2º Semestre Resolução da Frequência 1 20/Abril/2010 Pergunta A.1 A.2 A.3 A.4 B C.1 C.2 Total Cotação 0,75
Leia maisaceita, l L R L (l) = erro, l L
26 Capítulo 3 Análise Lexical A análise lexical é a primeira fase de um compilador A sua tarefa é a de ler a sequência de caracteres do canal de entrada e produzir uma sequência de palavras (lexemas) As
Leia maisExpressões e Gramáticas Regulares e Autómatos Finitos
Folha Prática Expressões e Gramáticas Regulares e Autómatos Finitos 1 Expressões e Gramáticas Regulares e Autómatos Finitos Expressões Regulares e Autómatos Finitos 1. Determine e implemente computacionalmente
Leia maisINSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE Algoritmos ANSI C - Introdução Copyright 2014 IFRN Agenda Conceitos básicos ANSI C Hello World Funções em C Exercícios 2 /26 A linguagem
Leia maisSistemas Operacionais e Introdução à Programação. Programação com linguagem C
Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Entrada e saída: escrevendo na tela Veja uma comparação entre um programa Portugol e seu equivalente em C: Inicio Inteiro
Leia maisExpressões Regulares. Linguagens Formais e Autômatos. Andrei Rimsa Álvares
Linguagens Formais e Autômatos Expressões Regulares Andrei Rimsa Álvares Material extraído do livro e slides do Prof. Newton Vieira (hcp://dcc.ufmg.br/~nvieira) Expressões Regulares Até agora foram vistas
Leia maisLinguagens 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 maisDescriçã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 maisCompiladores. 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 maisLINGUAGENS 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 maisCompiladores 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 maisHistórico e motivação
Expressões regulares 1. Histórico e motivação 2. Definição a) Sintaxe b) Semântica c) Precedência dos operadores 3. Exemplos 4. Leis algébricas 5. Dialetos 6. Aplicações 7. Exercícios Pré-requisito: básico
Leia maisCompiladores - 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 maisExercicios. 7.2 Quais das seguintes afirmações são verdadeiras? Justifica. (d) abcd L((a(cd) b) )
Exercicios 7.1 Escreve expressões regulares para cada uma das seguintes linguagens de Σ = {a, b}: (a) palavras com não mais do que três as (b) palavras com um número de as divisível por três (c) palavras
Leia maisCompiladores - 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 maisLinguagens e Programação Gramáticas. Paulo Proença
Linguagens e Programação Gramáticas Gramáticas Ferramenta para a descrição e análise de linguagens; Baseada num conjunto de regras que especificam o modo de construção das frases válidas na linguagem;
Leia maisLinguagens Formais e Autômatos 02/2016. LFA Aula 01 24/10/2016. Celso Olivete Júnior.
LFA Aula 01 Apresentação 24/10/2016 Celso Olivete Júnior olivete@fct.unesp.br 1 Professor Celso Olivete Júnior Bacharelado em Ciência da Computação (Unoeste-2002) Mestrado e Doutorado em Engenharia Elétrica
Leia maisFunçã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 maisA linguagem C (visão histórica)
A linguagem C (visão histórica) A linguagem C é uma linguagem de programação desenvolvida no ínício dos anos 70 por Dennis Ritchie, que trabalhava nos laboratórios Bell e que também inciou em paralelo,
Leia maisTratamento dos Erros de Sintaxe. Adriano Maranhão
Tratamento dos Erros de Sintaxe Adriano Maranhão Introdução Se um compilador tivesse que processar somente programas corretos, seu projeto e sua implementação seriam grandemente simplificados. Mas os programadores
Leia maisLINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO
LINGUAGEM LIVRE DE CONTEXTO As Linguagens Livres de Contexto é um reconhecedor de linguagens, capaz de aceitar palavras corretas (cadeia, sentenças) da linguagem. Por exemplo, os autômatos. Um gerador
Leia maisAná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 maisConceitos 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 maisAlfabeto, 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 maisLinguagens Livres de Contexto
Universidade Católica de Pelotas Centro Politécnico Bacharelado em Ciência da Computação 364018 Linguagens Formais e Autômatos TEXTO 4 Linguagens Livres de Contexto Prof. Luiz A M Palazzo Maio de 2011
Leia maisAmbiente de desenvolvimento
Linguagem C Ambiente de desenvolvimento Um programa em C passa por seis fases até a execução: 1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução Etapa 1: Criação do programa
Leia maisCompiladores 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 maisPROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95
PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:
Leia maisCompiladores Aula 4. Celso Olivete Júnior.
Aula 4 Celso Olivete Júnior olivete@fct.unesp.br Na aula de hoje... Revisão: gramáticas Relações em uma gramática: Cabeça, Último, Primeiro (First) e Seguinte (Follow) Capítulo 4 (seção 4.4.2) do livro
Leia maisAná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 maisAlgoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Leia maisLinguagens de Programação I
Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler
Leia maisCompiladores. 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 maisA Linguagem C. A forma de um programa em C
A Linguagem C Criada em 1972 por D. M. Ritchie e K. Thompson. Tornou-se uma das mais importantes e populares, principalmente pela portabilidade e flexibilidade. Foi projetada para o desenvolvimento de
Leia mais