Prof. José
de
Faça o
analisador léxico, sintático e a geração de código em C para uma pequena
linguagem de programação chamada MSI (Mais Simples Impossível). Nesta
linguagem, todas as palavras-chave possuem apenas uma única letra, que é sempre
maiúscula. Há comandos de atribuição, impressão, leitura do teclado, decisão e
repetição, além do comando composto. As variáveis são todas as letras
minúsculas, automaticamente declaradas como inteiros, que
é o único tipo. Uma atribuição é feita como
a = 5
que
atribui 5 à variável “a”. O comando de impressão é P e
P 1
imprime 1
no vídeo. O comando “R v” lê um número do teclado (que pode ter mais de um
dígito) e o coloca na variável v. O comando “if” é
feito com a letra I, toma um valor (variável ou número) e um comando como
parâmetros e executa o comando se o valor é diferente de zero. Por exemplo,
I a P 1
imprime 1
se a variável “a” é diferente de zero. Um comando composto em MSI é delimitado
por [ e ]. Por exemplo,
I a
[ a = 1 P a ]
inicia
“a” com 1 e imprime “a” se “a” é diferente de zero. O comando N incrementa o
valor de uma variável de 1. Não se preocupe com
conferências semânticas, como conferir se N é utilizado com um número. O
comando D decrementa o valor de uma variável de 1:
N a
D b
O valor de
“a” é incrementado e o de “b”, decrementado de 1.
O comando “W v C” executa o comando C enquanto o
valor da variável “v” é diferente de zero.
Um exemplo
de programa em MSI é
R a
i = 1
W a [ P
a P i
D a N i ]
R b
I b [
P 0 P 0 P 0 P b]
A gramática
de MSI é dada abaixo.
Program ::= Command {
Command }
Command ::= AssignCommand | ReadCommand | IncCommand |
DecCommand |PrintCommand | IfCommand |
WhileCommand | CompositeCommand
AssignCommand ::=
VARIABLE “=” Value
PrintCommand ::=
“P” Value
ReadCommand ::=
“R” VARIABLE
IncCommand ::=
“N” VARIABLE
DecCommand ::=
“D” VARIABLE
IfCommand ::=
“I” Value Command
WhileCommand ::=
“W” Value Command
CompositeCommand ::= “[” Command { Command } “]”
Value
::= VARIABLE | NUMBER
VARIABLE é
qualquer letra minúscula. NUMBER é um número de um único dígito. Note que, em
execução, as variáveis podem conter números de mais de um dígito.
O
a) O analisador
b) O analisador