Exercício 07.61

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 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 um das seguintes palavras reservadas da linguagem SIMPLE: rem, input, let, print, goto, if/goto ou end.

Comando Instrução de exemplo Descrição
rem 50 rem isto é comentário Qualquer texto depois do comando rem é apenas para fins de documentação e é ignorado pelo compilador.
input 30 input x Exibe um ponto de interrogação que pede ao usuário para digitar um inteiro. Lê esse inteiro do teclado e armazena o inteiro em x.
let 80 let u = 4 * (j - 56) Atribui a u o valor de 4 * (j - 56). Observe que uma expressão arbitrariamente complexa pode aparecer à direita do sinal de igual.
print 10 print w Exibe o valor de w.
goto 70 goto 45 Transfere o controle do programa para a linha 45.
if/goto 35 if i == z goto 80 Verifica se i e z são iguais e transfere o controle do programa para a linha 80 se a condição for verdadeira; caso contrário, continua a execução com a próxima instrução.
end 99 end Termina a execução do programa.

Todos os comandos, exceto end, podem ser utilizados repetidamente. A linguagem SIMPLE avalia apenas expressões inteiras que utilizam os operadores +, -, * e /. Esses operadores têm a mesma precedência que nas linguagens Java ou C/C++. Podem usar parênteses para alterar a ordem de avaliação de uma expressão.

A linguagem SIMPLE reconhece apenas letras minúsculas. Todos os caracteres em um arquivo SIMPLE devem estar em letras minúsculas (letras maiúsculas resultam em um erro de sintaxe, a menos que apareçam em uma instrução rem, caso em que são ignorados).

O nome de variável tem uma única letra. A linguagem SIMPLE não permite nomes de variáveis descritivos, portanto as variáveis devem ser explicadas em comentários para indicar sua finalidade em um programa.

A linguagem SIMPLE utiliza apenas variáveis inteiras. Não tem declarações de variáveis - a mera menção de um nome de variável em um programa faz com que a variável seja declarada e inicializada com zero.

A linguagem SIMPLE utiliza a instrução condicional if/goto e a instrução incondicional goto para alterar o fluxo de controle durante a execução do programa. Se a condição na instrução if/goto for verdadeira, o controle é transferido para uma linha especifica do programa. Os seguintes operadores relacionais e de igualdade são válidos em uma instrução if/goto: <, >, <=, >=, == ou !=. A precedência desses operadores é a mesma que em Java ou C/C++.

O programa a seguir lê dois inteiros do teclado, armazena os valores nas variáveis a e b e calcula e imprime sua soma (armazenada na variável c).

10 rem determina e imprime a soma de dois inteiros
15 rem
20 rem lê os dois inteiros
30 input a
40 input b
45 rem
50 rem soma os inteiros e armazena o resultado em c
60 let c = a + b
65 rem
70 rem imprime o resultado
80 print c
90 rem termina a execução do programa
99 end

Desenvolva um programa na linguagem de programação SIMPLE que leia uma série de inteiros e determine e imprima o maior. O primeiro inteiro lido indica quantos números devem ser processados (após ele).

Desenvolva uma Gramática Livre do Contexto (GLC) que reconheça a linguagem de programação SIMPLE.


Programa na linguagem de programação SIMPLE

10 input n
15 if n == 0 goto 45
20 let n = n - 1
25 input x
30 if x <= a goto 40
35 let a = x
40 goto 15
45 print a
50 end

Gramática Livre do Contexto (GLC) com recursividade à esquerda

G = ({PROGRAMA, COMANDO, INPUT, PRINT, REM, IF, LET, GOTO, END, EXPR, TERMO, FATOR, CONDICAO,
      ITEM, RELACAO, INTEIRO, SINAL, PALAVRA, LABEL, VARIAVEL, DIGITO, LETRA}, {0, 1, 2, 3, 4,
      5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y,
      z, (, ), =, !, <, >, +, -, *, /}, P, PROGRAMA)
P = {< PROGRAMA >  ->  < PROGRAMA > < LABEL > < COMANDO >
                   |   < LABEL > < COMANDO >
     < COMANDO >   ->  < INPUT >
                   |   < PRINT >
                   |   < REM >
                   |   < IF >
                   |   < LET >
                   |   < GOTO >
                   |   < END >
     < INPUT >     ->  input < VARIAVEL >
     < PRINT >     ->  print < VARIAVEL >
     < REM >       ->  rem < PALAVRA >
     < IF >        ->  if < CONDICAO > goto < LABEL >
     < LET >       ->  let < VARIAVEL > = < EXPR >
     < GOTO >      ->  goto < LABEL >
     < END >       ->  end
     < EXPR >      ->  < EXPR > + < TERMO >
                   |   < EXPR > - < TERMO >
                   |   < TERMO >
     < TERMO >     ->  < TERMO > * < FATOR >
                   |   < TERMO > / < FATOR >
                   |   < FATOR >
     < FATOR >     ->  ( < EXPR > )
                   |   < ITEM >
     < CONDICAO >  ->  < ITEM > < RELACAO > < ITEM >
     < ITEM >      ->  < VARIAVEL >
                   |   < INTEIRO >
     < RELACAO >   ->  ==
                   |   !=
                   |   >
                   |   >=
                   |   <
                   |   <=                    
     < INTEIRO >   ->  < SINAL > < LABEL >
     < SINAL >     ->  -
                   |   +
                   |   ε
     < PALAVRA >   ->  < PALAVRA > < DIGITO >
                   |   < PALAVRA > < LETRA >
                   |   < DIGITO >
                   |   < LETRA >
     < LABEL >     ->  < LABEL > < DIGITO >
                   |   < DIGITO >
     < VARIAVEL >  ->  < LETRA >
     < DIGITO >    ->  0
                   |   1
                   |   2
                   |   3
                   |   4
                   |   5
                   |   6
                   |   7
                   |   8
                   |   9
     < LETRA >     ->  a
                   |   b
                   |   c
                   |   d
                   |   e
                   |   f
                   |   g
                   |   h
                   |   i
                   |   j
                   |   k
                   |   l
                   |   m
                   |   n
                   |   o
                   |   p
                   |   q
                   |   r
                   |   s
                   |   t
                   |   u
                   |   v
                   |   w
                   |   x
                   |   y
                   |   z  }

Gramática Livre do Contexto (GLC) com recursividade à direita

G = ({PROGRAMA, COMANDO, INPUT, PRINT, REM, IF, LET, GOTO, END, EXPR, TERMO, FATOR, CONDICAO,
      ITEM, RELACAO, INTEIRO, SINAL, PALAVRA, LABEL, VARIAVEL, DIGITO, LETRA}, {0, 1, 2, 3, 4,
      5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y,
      z, (, ), =, !, <, >, +, -, *, /}, P, PROGRAMA)
P = {< PROGRAMA >  ->  < LABEL > < COMANDO > < PROGRAMA >
                   |   < LABEL > < COMANDO >
     < COMANDO >   ->  < INPUT >
                   |   < PRINT >
                   |   < REM >
                   |   < IF >
                   |   < LET >
                   |   < GOTO >
                   |   < END >
     < INPUT >     ->  input < VARIAVEL >
     < PRINT >     ->  print < VARIAVEL >
     < REM >       ->  rem < PALAVRA >
     < IF >        ->  if < CONDICAO > goto < LABEL >
     < LET >       ->  let < VARIAVEL > = < EXPR >
     < GOTO >      ->  goto < LABEL >
     < END >       ->  end
     < EXPR >      ->  < TERMO > + < EXPR >
                   |   < TERMO > - < EXPR >
                   |   < TERMO >
     < TERMO >     ->  < FATOR > * < TERMO >
                   |   < FATOR > / < TERMO >
                   |   < FATOR >
     < FATOR >     ->  ( < EXPR > )
                   |   < ITEM >
     < CONDICAO >  ->  < ITEM > < RELACAO > < ITEM >
     < ITEM >      ->  < VARIAVEL >
                   |   < INTEIRO >
     < RELACAO >   ->  ==
                   |   !=
                   |   >
                   |   >=
                   |   <
                   |   <=                    
     < INTEIRO >   ->  < SINAL > < LABEL >
     < SINAL >     ->  -
                   |   +
                   |   ε
     < PALAVRA >   ->  < DIGITO > < PALAVRA >
                   |   < LETRA > < PALAVRA >
                   |   < DIGITO >
                   |   < LETRA >
     < LABEL >     ->  < DIGITO > < LABEL >
                   |   < DIGITO >
     < VARIAVEL >  ->  < LETRA >
     < DIGITO >    ->  0
                   |   1
                   |   2
                   |   3
                   |   4
                   |   5
                   |   6
                   |   7
                   |   8
                   |   9
     < LETRA >     ->  a
                   |   b
                   |   c
                   |   d
                   |   e
                   |   f
                   |   g
                   |   h
                   |   i
                   |   j
                   |   k
                   |   l
                   |   m
                   |   n
                   |   o
                   |   p
                   |   q
                   |   r
                   |   s
                   |   t
                   |   u
                   |   v
                   |   w
                   |   x
                   |   y
                   |   z  }

Referências Bibliográficas

Deitel, H. M. (2003). Java, como programar. 4ª edição. Porto Alegre: Bookman. 1.386 páginas.


Recomendamos

Revista Tema Java Magazine Revista Segurança Digital