1 / 12

II – Análise léxica

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/2000 - 1. Linguagem lex. DEI.

dex
Download Presentation

II – Análise léxica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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/2000 - 1

  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/2000 - 2

  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/2000 - 3

  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/2000 - 4

  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/2000 - 5

  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/2000 - 6

  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/2000 - 7

  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/2000 - 8

  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/2000 - 9

  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/2000 - 10

  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/2000 - 11

  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/2000 - 12

More Related