A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

II – Análise léxica lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada:

Apresentações semelhantes


Apresentação em tema: "II – Análise léxica 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 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 LFA 1999/ Jorge Morais

2 Linguagem lex 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 LFA 1999/ Jorge Morais

3 Compilador lex Programa em lex compilador lex lex.yy.c lex.yy.c compilador C a.out entrada a.out sequência de tokens LFA 1999/ Jorge Morais

4 Especificação em lex 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) LFA 1999/ Jorge Morais

5 Interface com o parser 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) LFA 1999/ Jorge Morais

6 Interface com o parser (cont.) 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 LFA 1999/ Jorge Morais

7 Cópia directa 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 LFA 1999/ Jorge Morais

8 Definições regulares 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 LFA 1999/ Jorge Morais

9 Meta-símbolos - 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) LFA 1999/ Jorge Morais

10 Implementação do simulador AF 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 LFA 1999/ Jorge Morais

11 Exemplo dum analisador léxico 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 + )? LFA 1999/ Jorge Morais

12 Exemplo dum analisador léxico 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 LFA 1999/ Jorge Morais


Carregar ppt "II – Análise léxica lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada:"

Apresentações semelhantes


Anúncios Google