Baixe o app para aproveitar ainda mais
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
Compartilhar