COMPILADORES

1190 palavras 5 páginas
Compiladores - Análise Léxica
Fabio Mascarenhas - 2013.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 transforma o programa de uma sequência de caracteres sem nenhuma estrutura para uma sequência de tokens if x == y then z = 1; else z = 2; if| |x| |==| |y| |then|\n

|z| |=| |1|;|\n|else|\n

|z| |=| |2|;|

Tipo do token
• Em português:
• substantivo, verbo, adjetivo...
• Em uma linguagem de programação:

• identificador, numeral, if, while, (, ;, identação, ...

Tipo do token
• Cada tipo corresponde a um conjunto de strings
• Identificador: strings de letras ou dígitos, começadas por letra
• Numeral: strings de dígitos

• Espaço em branco: uma string de brancos, quebras de linha, tabs, ou comentários • while: a string while

Análise léxica
• Classificar substrings do programa de acordo com seu tipo
• Fornecer esses tokens (par tipo e substring) ao analisador sintático

foo=42

AL

AS

Exemplo
• Para o código abaixo, conte quantos tokens de cada tipo ele tem

x = 0;\nwhile (x < 10) {\n\tx++;\n}\n

Tipos: id, espaço, num, while, outros

Exemplo
• Para o código abaixo, conte quantos tokens de cada tipo ele tem

x = 0;\nwhile (x < 10) {\n\tx++;\n}\n

Tipos: id (3), espaço (10), num (2), while (1), outros (9)

Ambiguidade
• A análise léxica de linguagens modernas é bem simples, mas historicamente esse não é o caso
• Em FORTRAN, espaços em branco dentro de um token também são ignorados
• VAR1 e VAR 1 são o mesmo token
• DO5I=1,25 são 7 tokens: “DO”, “5”, “I”, ‘=’, “1”, “,”, “25”
• Já DO5I=1.25 são 3 tokens: “DO5I”, “=”, “1.25”

Ambiguidade
• As palavras-chave de PL/1 não são reservadas
• IF ELSE THEN THEN = ELSE; ELSE ELSE = THEN
• Mas mesmo linguagens modernas têm ambiguidades léxicas

• ==, ++, +=
• Templates C++/Generics Java: List vs foo >> 2;
• O analisador léxico

Relacionados