Prévia do material em texto
Atividades do Tema 2 – Análise Léxica
1. Em algumas linguagens, brancos podem ser usados em qualquer ponto de um
programa, sem nenhum significado, exceto dentro de uma cadeia de símbolos.
Suponha que essa regra é acrescentada à linguagem Pascal, de forma que, por
exemplo, as duas linhas a seguir são equivalentes:
XR3:=XR+3;
X R 3 : = X R + 3 ;
Como o analisador léxico pode tratar essa complicação adicional?
Dicas:
a. O analisador léxico reconhece tokens e não sentenças;
b. Defina um autômato para cada token: identificador, números, operadores,
pontuação;
c. Apenas despreze os espaços em branco...
d. A ligação entre os autômatos é lógica
e. Seja criativo.
2. Defina um autômato finito e a gramática regular equivalente que
reconheça/gere constantes numéricas em Pascal, cujo formato é:
[ + | – ] d( d )* [ . d( d )* ] [ E [ + | – ] d( d )* ]
onde:
d : representa um dígito {0, 1, ..., 8, 9}
[ x ] : significa que x é opcional
| : significa alternativa
3. No “Report” do Pascal, Niklaus Wirth define “números” (constantes dos tipos
integer e real), através das seguintes regras:
<digit sequence>::=<digit>{<digit>}
<unsigned integer>::=<digit sequence>
<unsigned real>::=<unsigned integer>.<digit sequence> |
<unsigned integer>.<digit sequence>E<scale factor> |
<unsigned integer> E <scale factor>
<unsigned number>::=<unsigned integer>|<unsigned real>
<scale factor>::=<unsigned integer> |
<sign> <unsigned integer>
<sign> ::= + | -
Explique como esta especificação pode ser usada para programar a parte
correspondente de um analisador léxico de Pascal definindo um autômato
finito que a reconheça.
Dicas:
a. Entenda o que está definido acima;
b. Trata-se de uma gramática
c. Note que ::= significa “é definido por”
d. Os termos estão fora de ordem. Organize-os, se achar melhor
e. Os itens não definem explicitamente os terminais. Deduza-os
f. Já fizemos algo assim
g. Seja criativo
4. Defina uma gramática regular que gere comentários em Pascal: sequências de
caracteres delimitadas por /* e */, não contendo pares do tipo */.
5. Defina um autômato finito que reconheça sentenças em {0,1}*, as quais não
contenham sequências do tipo 101.
6. Construa um autômato finito e a gramática regular equivalente à seguinte expressão
regular
a(a | bc)*b(a | b)*