Buscar

Compiladores - Sintaxe de linguagens de programação - Exercício

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Compiladores - Sintaxe de linguagens de programação
Exercícios
1. A utilização de expressões regulares pode facilitar a validação de dados, a
procura por palavras em determinado texto, o desenvolvimento de analisadores
sintáticos, etc. Além disso, as expressões regulares aumentam a produtividade e
reduzem o tempo de busca em função dos padrões estabelecidos. Em relação ao
conceito e às características das expressões regulares, analise as afirmações a
seguir:
I. As expressões regulares foram desenvolvidas para auxiliarem a comunicação
somente de desenvolvedores e usuários quanto aos padrões definidos.
II. Um lexema pode ser definido como um conjunto de símbolos sequenciais cujo
padrão é aceito por uma linguagem de programação.
III. Uma expressão regular, baseada em um conjunto de caracteres, consegue
identificar diferentes padrões em um texto, como um número de IP (10.49.1.1) e o e-
mail de um usuário (xxx@xxx.com.br).
IV. Uma linguagem baseada em expressões regulares não pode conter somente a
palavra vazia.
Agora, assinale a alternativa que apresenta a resposta correta.
Você acertou!
B. Apenas as afirmativas II e III estão corretas.
Apenas as afirmativas II e III estão corretas. A afirmativa I está incorreta, pois as
expressões   regulares   auxiliam   na   comunicação   entre   os   usuários,
desenvolvedores e as máquinas. A afirmativa II está correta, pois a sequência de
caracteres reconhecidos por um padrão é chamada de "lexema". A afirmativa III
está correta, pois, dada uma string, uma expressão regular consegue reconhecer,
encontrar ou validar um padrão em um texto, como data, horário, número de IP,
nome, RG e CPF de uma pessoa, declaração de uma função(), dados que estão
entre   <tags></tags>,   endereço   de e-mail,   um   nome   de   usuário   ou   senha
específicos,   entre   outros   padrões.   A   afirmativa   IV   está   incorreta,   pois   uma
linguagem L(r), sendo r uma expressão regular, pode ser definida a partir de uma
linguagem que contém somente a palavra vazia – {Ɛ}.
2. A linguagem de programação C# utiliza as expressões regulares e as gramáticas
livres de contexto para validar expressões e a gramática da linguagem escrita no
arquivo .c.
Assinale a alternativa correta que apresenta a biblioteca de expressões regulares, a
unidade de compilação e o que a gramática gera ao ser compilada em uma
linguagem C#.
Você acertou!
A. System.Text.RegularExpression, compilation_unit e árvore sintática.
A   biblioteca   de   expressões   regulares   consiste   em
(System.Text.RegularExpression), a unidade de compilação é (compilation_unit), e
o   que   a   gramática   gera   ao   ser   compilada   é   a   árvore   sintática   da   linguagem
C#. System. SyntaxNode não é uma biblioteca de expressões regulares, e sim a
representação   de   nós   da   árvore   sintática. System.SyntaxTrivia não   é   uma
biblioteca   de   expressões   regulares,   e   sim   a   representação   de   trivialidades   da
linguagem de programação. SyntaxToken_unit não é uma unidade de compilação,
e   sim   os tokens da   sintaxe,   e Regex não   é   o   que   a   gramática   gera   ao   ser
compilada, e sim uma classe da linguagem C#. System.SyntaxTrivia não é uma
biblioteca   de   expressões   regulares,   e   sim   a   representação   de   trivialidades   da
linguagem   de   programação;   e Regex não   é   o   que   a   gramática   gera   ao   ser
compilada, e sim um classe da linguagem C#. Por fim, SyntaxToken_unit não é
uma unidade de compilação, e sim os tokens da sintaxe.
3. Uma gramática pode ser especificada com base em símbolos terminais e não
terminais em sua convenção. Com relação à classificação de símbolos de uma
gramática, avalie as questões a seguir e associe as colunas de acordo com as
representações adotadas para símbolos terminais e não terminais.
Assinale a alternativa que apresenta a associação correta entre as colunas.
Você acertou!
A. I - 1; II - 2; III- 2; IV - 2; V – 1.
A associação correta é: I - 1; II - 2; III- 2; IV - 2; V - 1. Operadores - +, -, *, /, por
exemplo, são usados como símbolos terminais da gramática. Letras maiúsculas,
como E e F, são usadas como símbolos não terminais da gramática. Nomes em
itálico   formados   com   letras   minúsculas,   como   cmd   ou   expr,   são   usados   como
símbolos não terminais da gramática. A letra S representa o símbolo de partida de
uma   gramática,   sendo   representado   por   símbolos   não   terminais.   Letras
minúsculas do início do alfabeto, como a e c, são usadas como símbolos terminais
da gramática.
4. Uma gramática pode produzir a mesma cadeia de caracteres de diferentes
formas, gerando uma ambiguidade. Considerando o contexto apresentado, avalie
as seguintes asserções sobre a ambiguidade da gramática livre de contexto:
I. A ambiguidade é gerada em uma gramática livre de contexto quando uma cadeia
de caracteres admite mais de um caminho ou mais de uma árvore sintática.
PORQUE
II. É interessante utilizar uma gramática sem ambiguidade em grande parte das
aplicações. Porém, em certas situações, é conveniente utilizar a ambiguidade
levando em consideração uma escolha criteriosa dessa ambiguidade.
A respeito dessas asserções, assinale a opção correta.
Resposta correta.
B. As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa
da I. A asserção I é verdadeira, pois uma gramática é considerada ambígua se
existe   uma   mesma   sentença   com   duas   ou   mais   derivações   à   direita   ou   à
esquerda.  A  asserção   II   é   verdadeira,   uma   vez   que   em   certas   aplicações   é
interessante haver ambiguidade, porém ela deve ser escolhida de forma criteriosa.
5. 
As gramáticas livres de contexto (GLC) auxiliam nas construções das gramáticas
atuais das linguagens de programação e de compiladores.Seja L uma linguagem
livre de contexto, com G = ({S, T, B, C}, {b, c}, S, P}), em que:
S --> BT | TC
T --> bTc | Ɛ
B --> bB | b
C --> cC | c
e a cadeia bbbc. Assinale a alternativa que contém a derivação correta da
linguagem livre de contexto:
Você acertou!
A. S --> BT  --> bBT --> bbT --> bbbTc --> bbbc.
Realizando as substituições com base na gramática, a derivação final é S --> BT --
> bBT --> bbT --> bbbTc --> bbbc. Nas derivações (S --> TC --> TCc --> bTCc -->
bbTCb --> bbbc) não existe a regra de produção C --> Cc. Nas derivações (S -->
TC --> bTC --> bTCc --> bbTCc --> bbbc) não existe a regra de produção C --> Cc.
Nas derivações (S --> BTC --> bTC --> bTCc --> bcTCc --> bbbc) não existe a
regra de produção S --> BTC. Nas derivações (S --> BT --> cBT --> bcT --> bcBc --
> bbbc) não existe a regra de produção B --> cB.
	Compiladores - Sintaxe de linguagens de programação
	Exercícios

Continue navegando