Teoria Dos Compiladores - 2
Teoria Dos Compiladores - 2
Teoria Dos Compiladores - 2
Especificação de tokens
Definições Regulares
d1 r1
d2 r2
...
dn rn
digito 0 | 1 | ... | 9
digitos digito digito*
fração_opc . digitos |
expoente_opc (E ( +| - | ) digitos) |
12
Extensões
Reconhecimento de tokens
Exemplo
1. identificação de tokens
letra [a-zA-Z]
digito [0-9]
id letra.(letra| digito)*
num digito+(.digito+)?(E(+|-)?digito+)?
op_atrib := op_ma >
op_maig >= op_ig =
op_vezes * div div
delim [ \t\n] espac delim+
autômatos determinísticos
=
2
início >
0 1
outro
letra ou dígito
Lex
A ferramenta lex
ê lex e yacc
regras
padrões
gramaticais
lex yacc
Programas lex
declarações
%%
regras
%%
funções auxiliares
Ex.:
letra [a-z]
ident {letra}+
p1 { ação 1}
p2 { ação 2}
... ...
pn { ação n}
Ex.:
p1 |
p2 { ação }
18
ê variáveis
Exemplo
%{
/* conta palavras */
%%
\n ++nchar, ++nline;
%%
main()
{
yylex();
printf("%d\t%d\t%d\n", nchar, nword, nline);
}
19
Padrões lex
justaposição é concatenação.
'|' é união.
classe de caracteres
[a-z][a-z0-9]{0,7}
" \ [ ] ^ - ? . * +
| $ ( ) / { } % < >
Exemplos
x letra "x"
abc cadeia "abc"
"*" símbolo asterisco
xyz"+" cadeia "xyz+"
xyz+ cadeias que começam por xy seguidas de 1 ou mais z's
[+-0-9] símbolo + ou símbolo - ou qualquer dígito