II – Análise léxica DEI lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada: - ppt carregar
PublicouCamille Cavaco Alterado mais de 6 anos atrás
Apresentação em tema: "II – Análise léxica DEI lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada:"— Transcrição da apresentação:
1 II – Análise léxica DEI lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada: lex & yacc Aho, Sethi e Ullman – secção 3.5 e 3.8 Jorge Morais LFA 1999/
2 Linguagem lex DEI Linguagem de especificação dum analisador usando expressões regulares estendidas As expressões regulares definem padrões para cada um dos tokens As acções são especificadas para cada token em linguagem C Jorge Morais LFA 1999/
3 Compilador lex DEI Programa em lex  compilador lex  lex.yy.c
lex.yy.c  compilador C  a.out entrada  a.out  sequência de tokens Jorge Morais LFA 1999/
4 Especificação em lex DEI
Declarações (variáveis, definições de constantes e definições regulares) %% Regras de tradução (Padrão {Acção em C}) Procedimentos auxiliares (em C, podendo ser compilados separadamente) Jorge Morais LFA 1999/
5 Interface com o parser DEI
Quando activado pelo parser, lê o resto da entrada, à procura da sequência mais longa que corresponda a um dos padrões especificados, e executa a acção correspondente As acções acabam com o retorno ao parser (em algumas situações, como na procura de espaços em branco, pode continuar a procurar mais padrões) Jorge Morais LFA 1999/
6 Interface com o parser (cont.)
DEI yylex é a função chamada pelo parser O token é o valor retornado Os atributos podem ser passados usando a variável global yylval O lexema é colocado na variável global yytext O tamanho do lexema é colocado na variável global yyleng Jorge Morais LFA 1999/
7 Cópia directa DEI As definições de constantes (na parte das declarações) são escritas entre as sequências %{ e %} são copiadas directamente para o ficheiro lex.yy.c, não sendo usadas nas definições regulares ou nas regras de tradução Os procedimentos auxiliares também são copiados directamente Jorge Morais LFA 1999/
8 Definições regulares DEI
Como já foi visto, permite definir alguns padrões mais usuais por nomes; esta definição é feita na parte das declarações Na parte das regras de tradução, as definições regulares estão entre { e } para distinguir de literais: id significa a sequência de caracteres 'i' e 'd' {id} significa a definição regular id Jorge Morais LFA 1999/
9 Meta-símbolos DEI '-' usado na definição de domínios (a-z)
'\' carácter de escape usado como na linguagem C (\n, \t, etc...) e também para usar caracteres que são meta-símbolos (\- significa o carácter '-') "aspas" servem para delimitar caracteres / operador de procura à frente (lookahead) Jorge Morais LFA 1999/
10 Implementação do simulador AF
DEI O lex usa um simulador dum autómato finito usando uma tabela de transições Especificação em lex  compilador lex  tabela de transições O simulador lê a entrada e, usando a tabela de transições, simula as transições dos autómatos Jorge Morais LFA 1999/
11 Exemplo dum analisador léxico
DEI Vamos considerar o pequeno analisador léxico dado anteriormente com: espaços em branco: ' ', tabulação e nova linha operadores relacionais: <, <=, >, >=, ==, != identificadores: letra (letra | dígito)* números: dígito+ (. dígito+)? (E [+-]? dígito+)? Jorge Morais LFA 1999/
12 Exemplo dum analisador léxico
DEI Código fonte: ex1.lex Compilação: lex ex1.lex (ou flex ex1.lex) gcc lex.yy.c -o ex1 –ll (ou gcc lex.yy.c –o ex1 –lfl) Comando: ex1 – lê a partir do standard input ex1 fich Jorge Morais LFA 1999/
Carregar ppt "II – Análise léxica DEI lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada:"
III – Análise sintáctica Geradores de parsers Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.9 LFA 1999/ Jorge Morais.