Compiladores Prof. Bruno Moreno Aula 5 – 18/03/2011 Análise Léxica Cadeias e Linguagens Alfabeto e classe de caracteres Qualquer conjunto finito de símbolos {0,1} Tabela ASCII Cadeia Seqüência finita de símbolos retirada de um alfabeto Termos utilizados: sentença ou palavra Comprimento de cadeia |s| Cadeias e Linguagens |banana| = 6 | |=0 Linguagem Qualquer conjunto de cadeias sobre algum alfabeto fixo Operações em Linguagens Concatenação x = cão y = casa xy = cãocasa x = x = {cão} L0 = { } x² = xx = {cãocão} Operações em Linguagens Concatenação União L* = zero ou mais concatenações de L Um ou mais L U M = {s | s está em L ou s está em M} Zero ou mais LM = {st | s está em L e t está em M} L+ = uma ou mais concatenações de L Zero ou uma ocorrência L? = zerou ou uma concatenação de L Operações em Linguagens r* = r+ | r? = r | r+ = rr* Partes de uma cadeia Prefixo de s s = banana Prefixos: “ ” a “banana”; “bana” Cadeia resultante da remoção de zero ou mais símbolos da cauda (tail) da cadeia Sufixo de s s = banana Sufixos: “ ” a “banana”; “na” Cadeia resultante da remoção de zero ou mais símbolos da cabeça (head) da cadeia Partes de uma cadeia Subcadeia de s Cadeia obtida pela remoção de um prefixo e de um sufixo de s Exemplo nan de banana Subsequência de s Qualquer cadeia formada pela remoção de zero ou mais símbolos, não necessariamente contíguos, de s baaa de banana Exemplo de uma linguagem Seja L = {A, B, ..., Z, a, b, ..., z} e D = {0, ..., 9} 1. L U D 2. LD Conjunto de letras e dígitos Conjunto de cadeias formadas por uma letra seguida de um dígito A1, z4, D9, ... 3. L³ Conjunto de todas as cadeias com 3 letras AaA, DGh, ... Exemplo de uma linguagem 4. L* , a cadeia 5. L(L U D)* Conjunto de cadeia de letras, incluindo cazia Conjunto de qualquer letra seguida ou não por letras ou dígitos A, a6, aa, ... 6. D+ Conjunto de todas as cadeias com um ou mais dígitos Expressões Regulares Expressões Regulares Permite definir claramente conjuntos (cadeias) de um alfabeto Exemplo Identificadores em java letra ( letra | digito ) * Expressões Regulares Exemplo: Seja ∑ = {a, b} a|b a b (a | b)(a | b) aa ab ba bb Expressões Regulares Exemplo: Seja ∑ = {a, b} a* {a | b}* , a, b, aa, bb, aaa, bbb, ... (a*b*)* { , a, aa, aaa, ...} , a, b, aa, bb, aabb, abab Zero ou mais a’s seguidos de um b a*b Expressões Regulares Exemplo: Cadeia de letras e dígitos começando por uma letra letra → A | B | ... | Z | a | b | ... | z dígito → 0 | 1 | ... | 9 id → letra ( letra | dígito )* A 2p numero Reconhece! Não Reconhece! Reconhece! Expressões Regulares Exemplo: Números em Pascal são cadeias como 5280, 39.37, 6.336E4 ou 1.894E-4 dígito → 0 | 1 | ... | 9 dígitos → dígito dígito* fração_opcional → .dígitos | expoente_opcional → (E(+|-| )dígitos) | num → dígitos fração_opcional expoente_opcional Expressões Regulares Utilizando a notação + e ? Expressões Regulares Exemplo: Números em Pascal são cadeias como 5280, 39.37, 6.336E4 ou 1.894E-4 dígito → 0 | 1 | ... | 9 dígitos → dígito dígito* fração_opcional → .dígitos | expoente_opcional → (E(+|-| )dígitos) | num → dígitos fração_opcional expoente_opcional Expressões Regulares Exemplo: Números em Pascal são cadeias como 5280, 39.37, 6.336E4 ou 1.894E-4 dígito → 0 | 1 | ... | 9 dígitos → dígito+ fração_opcional → (.dígitos)? expoente_opcional → (E(+|-)?dígitos)? num → dígitos fração_opcional expoente_opcional Expressões Regulares Classes de caracteres [abc] = a | b | c [a-z] = a | b | ... | z [A-Za-z] [A-Za-z0-9]* Análise de cadeias Cada token é retornado ao passer quando espaços em branco são detectados Espaços Tabulações Avanços de linha delim → branco | tabulação | fim de linha espaço_em_branco → delim+ Exercícios Em dupla Próxima aula... Diagrama de transições e Autômatos