Escolar Documentos
Profissional Documentos
Cultura Documentos
http://www.dcc.ufrj.br/~fabiom/comp
Introdução
if x == y then
z = 1;
else
z = 2;
if| |x| |==| |y| |then|\n |z| |=| |1|;|\n|else|\n |z| |=| |2|;|<EOF>
Tipo do token
• Em português:
foo=42
AL <id,”foo”> AS
<=,”=”>
<num,”42”>
Exemplo
• Para o código abaixo, conte quantos tokens de cada tipo ele tem
• Para o código abaixo, conte quantos tokens de cada tipo ele tem
Tipos: id (3), espaço (10), num (2), while (1), outros (9)
Ambiguidade
• DO5I=1,25 são 7 tokens: “DO”, “5”, “I”, ‘=’, “1”, “,”, “25”
• ==, ++, +=
• Logo, o fato dos tipos de tokens serem linguagens regulares dá uma notação
conveniente para especificarmos como classificar os tokens!
Expressões regulares
• Ela recebe uma expressão regular e uma string e retorna todas as ocorrências
daquela expressão regular na string
• Uma classe [ab-fx] denota { “a”, “b”, “c”, “d”, “e”, “f”, “x” }
• [a-z][0-9] denota o conjunto { “a0”, “a1”, ..., “a9”, “b0”, ..., “b9”, ..., “z9” }
• [a-z]+ denota o conjunto { “a”, “aa”, “aaa”, ..., “b”, “bb”, ..., “aba”, ... }, ou seja,
cadeias formadas de caracteres entre a e z
• [a-z][0-9]* denota o conjunto acima, mais o conjunto { “a”, “b”, ... “z” }
• Uma barra (|) em uma expressão regular denota a união dos conjuntos das
expressões à esquerda e à direita da barra
• Usar múltiplas regras para alternativas pode deixar a especificação mais legível
Especificação léxica
• Uma entrada 123.4 pode ser um token NUM (“123.4”), dois tokens NUM
(“123” e “.4”), um token NUM seguido de um ‘.’ seguido de outro NUM
(“123”, “.”, “4”), ou variações disso (“1”, “23”, “.4”)