Вы находитесь на странице: 1из 4

Especificao da Linguagem Mongo

1. Introduo
A linguagem Mongo uma variao da linguagem Monga, um sub-conjunto reduzido da linguagem C.
A linguagem Mongo apresenta as seguintes caractersticas principais:
Tipos: char, int, float, e array;
Estruturas de controle: while, for, for each, e if-then-else;
Escopo das variveis: global e local;
Subrotinas: funes com parmetros e retorno de valor;
Comentrios: linha ou bloco. Os comentrios de bloco podem ser aninhados.
Esta uma linguagem experimental, ento esta especificao passvel de adaptaes. Em caso de
modificaes na especificao, estas sero notificadas via SIGAA.
2. Lxico
- Comentrios de bloco em Mongo so similares aos do C, delimitados por /* e */
- Comentrios de linha devem ser iniciados com um //
- Identificadores seguem as mesmas regras de formao da linguagem C
- Strings so escritas entre aspas duplas ("..."), e podem conter os escapes \t, e \"
- Caracteres so escritos com aspas simples. Exemplo: 'a', '\n'
- Nmeros inteiros podem ser escritos em decimal ou em hexadecimal (comeando com 0x)
- Nmeros reais podem ser escritos em decimal ou notao cientfica (com E ou e). Os valores em
decimal devem ser separados por ponto:
Exemplo: 5e-3 = 5*10^-3 = 0.005
A lista de palavras reservadas segue abaixo:
char
else
float
if
int
new
return
void
while
for
each

3. Sinttico
A gramtica abaixo foi escrita em uma verso de E-BNF seguindo as seguintes convenes:
1 - variveis da gramtica so escritas em letras minsculas sem aspas.
2 - tokens so escritos entre aspas simples
3 - smbolos escritos em letras maisculas representam o lexema de um token do tipo especificado.
4 - o smbolo | indica produes diferentes de uma mesma varivel.
5 - o operador [ ] indica uma estrutura sinttica opcional.
6 - o operador { } indica uma estrutura sinttica que repetida zero ou mais
vezes.
Programa : { declaracao }
declaracao : dec-variavel | dec-funcao
dec-variavel : tipo lista-nomes ';'
lista-nomes : ID { ',' ID }
tipo : tipo-base | tipo '[' ']'
tipo-base : 'int' | 'char' | 'float'
dec-funcao : tipo-retorno ID '(' parametros ')' bloco
tipo-retorno : tipo | 'void'
parametros : /* vazio */ | parametro { ',' parametro }
parametro : tipo ID
bloco : '{' { dec-variavel } { comando } '}'
atrib : var '=' exp
lista-atrib: atrib {, atrib }
comando : 'if' '(' exp ')' comando parte-else
| 'while' '(' exp ')' comando
| 'for' '(' lista-atrib ';' exp ';' lista-atrib ')' comando
| 'for each' '(' tipo-base ID ':' ID ')' comando
| atrib ';'
| 'return' [ exp ] ';'
| bloco
parte-else : /* vazio */ | 'else' comando
var : ID | exp '[' exp ']'
exp : NUMERAL | LITERAL
| var
| '(' exp ')'
| chamada
| 'new' tipo '[' exp ']'
| '-' exp
| exp '+' exp
| exp '-' exp
| exp '*' exp
| exp '/' exp
| exp '==' exp
| exp '<=' exp
| exp '>=' exp
| exp '<' exp
| exp '>' exp
| '!' exp
| exp '&&' exp
| exp '||' exp
chamada : ID '(' lista-exp ')'
lista-exp : /* vazio */ | exp { ',' exp }

4. Semntico:
- A execuo de um programa consiste na execuo de sua funo void main ().
- As expresses em if e while devem ter tipo inteiro; um valor 0 significa falso, e diferente de 0
verdadeiro.
- A expresso new tipo [exp] cria um novo array com um nmero exp de elementos do dado tipo. A
expresso deve ter tipo inteiro.
- Uma string, assim como na linguagem C, definida como um array de valores do tipo char.
- Operadores relacionais tm resultado do tipo int, 0 para falso e 1 para verdadeiro.
- '&&' e '||' devem usar "curto-circuito".
- A prioridade dos operadores igual a de C.
- Em qualquer expresso, uma varivel char tem seu valor automaticamente promovido para int.
- Em operaes entre os tipos int e float, os valores int devem ser convertidos para float.
- O for-each tem funcionamento similar ao comando Java com mesmo nome. Como exemplo, o
comando 'for each ( int elemento : vetor )' faz com que a cada iterao deste lao,
elemento receba um dos valores armazenados em vetor, do ndice 0 at o ndice tamanho-1.
- O tamanho deve ser definido para um array antes do seu uso em um for-each
5. Gerao de Cdigo
- O cdigo alvo do compilador Pascal
6. Desenvolvimento do Trabalho
Trabalhos devem ser desenvolvidos em dupla ou individualmente. Sero abertos fruns no SIGAA para
a discusso sobre as etapas. Em caso de dvida, verifique inicialmente no frum se ela j foi resolvida.
Se ela persiste, consulte o professor antes de assumir solues.
6.1. Ferramentas
- Submisso dos projetos via GIT no Bitbucket. Dar permisso de acesso ao seu projeto para a conta
beatriz.ufs@gmail.com.
- Implementao com SableCC.
6.2. Avaliao
- A avaliao ser feita com base nas etapas entregues e em entrevistas feitas com
as duplas.
- A aula que define o prazo de entrega de cada etapa est especificada no plano de curso da disciplina.
6.3. Etapas
Anlise Lxica (valor: 2.0)
Anlise Sinttica (valor: 2.0)
Sintaxe Abstrata (valor: 2.0)
Anlise Semntica (valor: 2.0)
Gerao de Cdigo (valor: 2.0)
A critrio do docente o valor das etapas pode ser modificado, desde que este novo clculo produza uma
nota no menor que a produzida pelo clculo original. Entregas aps o prazo sofrem penalidade de

meio ponto por dia de atraso.

Вам также может понравиться