A linguagem de programação SIMPLE é uma linguagem simples, mas ainda poderosa e de alto nível, semelhante às versões iniciais da conhecida linguagem de programação BASIC. Cada instrução da linguagem de programação SIMPLE consiste em um número de linha e um comando da linguagem. Os números de linha devem aparecer em ordem crescente. Cada comando inicia com uma das seguintes palavras reservadas da linguagem de programação SIMPLE: rem, input, let, print, goto, if/goto ou end. Desenvolva um programa na linguagem de programação SIMPLE, que apresente o menor número de três números fornecidos pelo usuário. Por exemplo, caso os números fornecidos pelo usuário sejam 5, 7 e 4, o programa deverá apresentar como resposta o valor 4, que é o menor número entre os três números fornecidos pelo usuário.
(POSCOMP, 2015) Em um texto fonte de linguagem de programação, o compilador realiza a identificação da função gramatical das palavras, a verificação da estrutura gramatical dos comandos e dos seus significados. Os componentes arquiteturais de um compilador que realizam essas atividades são, respectivamente:
a. analisador léxico, analisador semântico, otimizador de código intermediário.
b. analisador léxico, analisador sintático, analisador semântico.
c. analisador sintático, gerador de código, analisador semântico.
d. analisador semântico, gerador de código intermediário, otimizador de código intermediário.
e. analisador sintático, analisador semântico, gerador de código.
(POSCOMP, 2016) Durante a análise sintática, erros podem ser detectados na sintaxe do programa fonte. Nesse caso, alguns compiladores podem reportar o erro e interromper a análise. Outros reportam o erro, mas, também, realizam uma recuperação do erro e tentam continuar a fase de análise, entretanto, a fase de síntese é desativada. Nesse sentido, analise as assertivas a seguir:
Quais das assertivas apresentadas estão corretas?
a. apenas as assertivas I e II.
b. apenas as assertivas I e III.
c. apenas as assertivas II e III.
d. apenas as assertivas II e IV.
e. apenas as assertivas III e IV.
O escopo de uma variável é a faixa de comandos em que a mesma é visível, ou seja, onde a variável pode ser referenciada por aquele comando. No escopo estático (ou léxico) o escopo de uma variável é determinado através da estrutura textual do programa, enquanto que no escopo dinâmico, o escopo de uma variável é determinado através da linha de execução do programa, sendo dependente portanto da ordem de execução das rotinas. Considerando o programa abaixo, elaborado na sintaxe da linguagem de programação Java, analise as assertivas a seguir:
public class Test {
private int x = 10, y = 15;
public void sub1() {
int x = 20;
sub4();
}
public void sub2() {
int y = 35;
sub3();
}
public void sub3() {
int x = 40;
sub1();
}
public void sub4() {
System.out.println(x + ":" + y);
}
public static void main(String[] args) {
int y = 55;
Test test = new Test();
test.sub2();
}
}
Quais das assertivas apresentadas estão corretas?
a. apenas as assertivas I e II.
b. apenas as assertivas I e III.
c. apenas as assertivas II e III.
d. apenas as assertivas II e IV.
e. apenas as assertivas III e IV.
A construção de analisadores descendentes é auxiliada por duas funções, denominadas FIRST e FOLLOW, associadas a uma gramática G. Durante a análise descendente, as funções FIRST e FOLLOW permitem escolher qual produção deverá ser aplicada, com base no próximo símbolo de entrada. Considerando a gramática livre de contexto G5, analise as assertivas a seguir:
G5 = ({A, B, C, D, E, F, G}, {x, y, z}, P5, A)
P5 = {A → xB
B → DC
C → xC | yC | zC | ε
D → yE
E → GF
F → xF | yF | zF | ε
G → z}
Quais das assertivas apresentadas estão corretas?
a. apenas as assertivas I e II.
b. apenas as assertivas I e III.
c. apenas as assertivas II e III.
d. apenas as assertivas II e IV.
e. apenas as assertivas III e IV.
Os analisadores sintáticos preditivos, ou seja, os analisadores de descida recursiva que não precisam de retrocesso, podem ser construídos para uma classe de gramáticas chamada LL(1). O primeiro L em LL(1) significa que a cadeia de entrada é lida da esquerda para a direita, o segundo L representa uma derivação mais à esquerda e o 1 pelo uso de um símbolo à frente na entrada utilizado em cada passo para tomar as decisões quanto à ação de análise. Apresente a tabela M de análise para a gramática livre de contexto G5, reapresentada a seguir:
G5 = ({A, B, C, D, E, F, G}, {x, y, z}, P5, A)
P5 = {A → xB
B → DC
C → xC | yC | zC | ε
D → yE
E → GF
F → xF | yF | zF | ε
G → z}
x | y | z | $ | |
---|---|---|---|---|
A | A → xB | |||
B | B → DC | |||
C | C → xC | C → yC | C → zC | C → ε |
D | D → yE | |||
E | E → GF | |||
F | F → xF | F → yF | F → zF | F → ε |
G | G → z |
Um analisador sintático preditivo sem recursão pode ser construído mantendo uma pilha explicitamente, em vez de implicitamente, via chamadas recursivas. O analisador é dirigido por um programa que considera X, o símbolo no topo da pilha, e a, o símbolo corrente da entrada. Se X é um não-terminal, o analisador escolhe uma produção-X consultando a entrada M[X, a] da tabela M de análise. Por outro lado, ele tenta fazer um casamento entre o terminal X no topo da pilha e o símbolo corrente a da entrada. Apresente a sequência de movimentos da entrada x y z y x, considerando a tabela M obtida na Questão 06.
Pilha | Entrada | Derivação |
---|---|---|
$ A | x y z y x $ | A → xB |
$ B x | x y z y x $ | |
$ B | y z y x $ | B → DC |
$ C D | y z y x $ | D → yE |
$ C E y | y z y x $ | |
$ C E | z y x $ | E → GF |
$ C F G | z y x $ | G → z |
$ C F z | z y x $ | |
$ C F | y x $ | F → yF |
$ C F y | y x $ | |
$ C F | x $ | F → xF |
$ C F x | x $ | |
$ C F | $ | F → ε |
$ C | $ | C → ε |
$ | $ | aceita |
A estratégia de análise sintática por deslocamento e redução é baseada na técnica de reconhecimento de sentenças por construção ascendente. Nessa estratégia, símbolos terminais da sentenças são lidos um a um; a cada símbolo lido, o analisador decide se prossegue com a leitura (desloca) ou se é possível aplicar uma produção aos símbolos previamente lidos para substituí-los por um símbolo não-terminal da gramática (reduz). O procedimento conclui com sucesso se toda a sentença foi lida e apenas o símbolo sentencial resulta da aplicação de todas as reduções. Nesse sentido, analise as assertivas a seguir sobre analisadores de precedência de operadores, uma classe de analisadores baseados na análise redutiva:
G8 = ({A, B}, {x, +, -, (, )}, P8, A)
P8 = {A → ABA | (A) | x
B → + | -}
Quais das assertivas apresentadas estão corretas?
a. apenas as assertivas I e II.
b. apenas as assertivas I e III.
c. apenas as assertivas II e III.
d. apenas as assertivas II e IV.
e. apenas as assertivas III e IV.