Apresente os conjuntos FIRST e FOLLOW das variáveis da gramática a seguir.
G = ({S, A, B, C}, {a, b, c, d}, P, S) P = {S → ABC A → aA | ε B → bB | CdA C → cC | ε}
A identificação e o tratamento de erros em programas de computador estão entre as tarefas dos compiladores. Os erros de um programa podem ter variados tipos e precisam ser identificados e tratados em diferentes fases da compilação. Considere uma linguagem de programação que exige que as variáveis manipuladas por seus programas sejam previamente declaradas, não podendo haver duplicidade de identificadores para variáveis em um mesmo escopo. Considere, ainda, que a sintaxe dessa linguagem tenha sido definida por meio de uma gramática livre de contexto e as produções seguintes definam a forma das declarações de variáveis em seus programas.
D → TL; | TL;D T → int | real | char L → id | id,L
Considere os exemplos de sentenças I e II a seguir, com a indicação entre os delimitadores /*
e */
de diferentes tipos de erros.
int: a, b; /* dois pontos após a palavra int */
int a,b; real a; /* declaração dupla da variável a */
A partir dessas informações, assinale a opção correta:
Elimine a recursividade à esquerda, considerando a palavra vazia, das produções da gramática a seguir.
G = ({A, B, C, D}, {x, y, z, w}, P, A) P = {A → AxC | Byw | ACz B → Cyz | yBz | BAC C → xDy | Dw D → xDx | yDy | Dz | Dw}
Elimine a recursividade à esquerda, desconsiderando a palavra vazia, das produções da gramática a seguir.
G = ({A, B, C, D}, {x, y, z, w}, P, A) P = {A → AxC | Byw | ACz B → Cyz | yBz | BAC C → xDy | Dw D → xDx | yDy | Dz | Dw}
Apresente a tabela de Análise de Precedência de Operadores, com tratamento de erros, da gramática a seguir.
G = ({A, B, C, D}, {id, +, -, *, /, (, )}, P, A) P = {A → A+B | A-B | B B → B/C | C C → C*D | D D → (A) | id}
Apresente a Análise Preditiva Tabular da entrada (id + id) * (id + id) sobre a gramática a seguir.
G = ({A, B, C, D, E}, {id, +, *, (, )}, P, A) P = {A → CB B → +CB | ε C → ED D → *ED | ε E → (A) | id}
Analise as seguintes afirmativas sobre os parsers descendentes recursivos.
A análise permite concluir que: