O Artigo Texto
Por: GuilhermeP.Chita • 10/3/2019 • Monografia • 4.538 Palavras (19 Páginas) • 759 Visualizações
No processo de compilação, as partes que compõem a análise do código fonte são: análise léxica, análise sintática e análise semântica.
No contexto dos compiladores, os scanners são responsáveis por executar aanálise léxica.
No que diz respeito a interpretadores e compiladores, pode-se afirmar que: a interpretação executa instrução a instrução, sem gerar um programa-objeto.
O projeto de um compilador apoia-se na teoria e formalismos oriundos da teoria da computação. Tendo em mente as relações entre tais elementos e as tarefas de compilação, assinale a afirmativa incorreta. A classe das linguagens irregulares é reconhecida por autômatos finitos, desta forma é possível projetar um analisador léxico para qualquer linguagem desta categoria.
Os diferentes lexemas presentes em uma linguagem de programação podem ser descritos através de um conjunto de expressões regulares, uma vez que apresentam as características associadas à categoria das linguagens regulares. Assim, podemos entender que as ferramentas geradoras de analisadores (como o Lex, por exemplo) constroem seus analisadores léxicos a partir da integração de diferentes autômatos finitos determinísticos obtidos a partir das expressões regulares que descrevem cada grupo de lexemas. Neste contexto é correto afirmar que: Tanto as palavras reservadas quanto os identificadores apresentam o mesmo padrão, sendo distinguidos apenas durante a classificação do token após concluída a sua composição. A classificação de cada token é obtida de acordo com o estado final corrente.
Observe a seguinte gramática: Follow(DECL) = Follow(IF) = Follow(ELSE) = {$, else}
Obtenha o esboço de um reconhecedor, através do método recursivo descendente, para a linguagem definida pela expressão: (+|-|e)(d+(e|.|.d*)|.d+)(e(+|-|e)d+|e) São exemplos de sentenças pertencentes à essa linguagem: 123, -45.312, +.76, 5.44e2, +0.88e-35.
Resp.: Um reconhecedor recursivo transcreve a regra de produção como uma sub-rotina responsável por consumir dada um de seus tokens na ordem em que são dados. Sempre que encontrarmos um símbolo que pode ou não ocorrer na sentença, devemos ter o cuidado para não reportar um erro indevidamente. Assim para a expressão dada poderíamos ter o seguinte código
void parseNumero() {
if s=="+" takeIt();
else if s=="-" takeIt();
if s=="d" {
takeIt();
while s=="d" takeIt();
if s=="." {
takeIt();
while s=="d" takeIt();
}
}
else if s=="." {
takeIt();take("d");
while s=="d" takeIt();
}
else ERRO();
if s=="e" {
takeIt();
if s=="+" takeIt()
else if s=="-" takeIt();
take("d");
while s=="d" takeIt();
}
Tradutores de linguagem são programas que traduzem os programas-fonte escritos em linguagem de alto nível para código de máquina. Com relação a tradutores, assinale a opção correta. Compiladores são projetados para um tipo específico de hardware e de sistema operacional.
Uma DLL é uma biblioteca que contém código e dados que podem ser usados por mais de um programa ao mesmo tempo. Por exemplo, em algumas versões de sistemas operacionais Windows, a DLL Comdlg32 executa funções relacionadas à caixa de diálogo, e programas podem usar a funcionalidade contida nessa DLL para implementar uma caixa de diálogo, ajudando a promover a reutilização de código e uso de memória eficiente. Sobre essas bibliotecas, é INCORRETO afirmar: Quando uma DLL é criada, é obrigatório especificar uma função de ponto de entrada (DllMain)
Um programa completo, compilado em linguagem de máquina, pronto para ser carregado para a memória e, na seqüência, executado, trata-se de um módulo de carga
Um analista está responsável pelo projeto de um compilador para uma nova linguagem que sua empresa está desenvolvendo. Este compilador deverá receber como entrada o código fonte do programa e gerar como saída o código de linguagem de máquina para um determinado processador e sistema operacional. O analista sabe que um processo de compilação é dividido em fases e que seu compilador deverá possuir todas as fases de um típico processo de compilação mesmo que elas NÃO sejam obrigatórias em outros compiladores. A fase que não faz parte de um processo de compilação e que, portanto, não seria necessária no projeto do analista é aligação dos módulos.
Um programa em linguagem de máquina é um programasob a forma de instrução de máquina, mesmo que tenha sido escrito em linguagem de alto nível.
Um compilador detecta: erros de sintaxe do programa.
Suponha a seguinte gramática, em que os símbolos terminais são dados entre aspas:
Program → Statement ";" Program
Program → ε
Statement → "if" Expression "then" Statement "else" Statement
Statement → "identifier" "=" Expression
Expression → "identifier"
Expression → "number"
Expression → "identifier" "+" Expression
Expression → "number" "+" Expression
Sobre ela podemos afirmar que: Ela não é ambígua
Sobre as técnicas para recuperação de erros sintáticos, analise as assertivas a seguir: As três afirmativas estão corretas.
Seja a seguinte linguagem, onde ε representa a string vazia e $ representa um marcador de fim de entrada: o conjunto FOLLOW(B) = {c, $}.
Seja a seguinte linguagem, onde ε representa a sentença vazia: {a, b, f, c, g}
Supondo o programa C dado abaixo,
1 int main (void)
2 {
3 /* if I do this then do you get it wrong? */
4 "if I do this then do you get it wrong?";
5
6 if (I_do_this)
7 /*then*/ do_you(get+it-wrong)?or:not;
8 else this(is_1.load,of->old*whatsit);
9 }
...