COMPILADORES
1190 palavras
5 páginas
Compiladores - Análise LéxicaFabio 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