A Linguagem Monga 99


A linguagem Monga 99 é uma linguagem bastante simples (como o nome implica). Seus tipos se resumem a strings, inteiros, e arrays. Como em C, em Monga variáveis do tipo array são na verdade referências (ponteiros) para arrays; diferentemente de C, em Monga arrays devem ser explicitamente criados, com uma expressão new (como em Java). Uma atribuição de arrays a = b (assim como passagem de parâmetros e retornos) implica que a passa a ser referência para o mesmo array que b. Comentários em Monga começam com // e vão até o final da linha.

Palavras Reservadas

   and     do      else    float   if      string  new
   nil     not     or      return  then    void    while

Sintaxe

   programa : {declaracao}

obs: a execução de um programa consiste na execução de sua função void main( ).

   declaracao : dec-variavel | dec-funcao
   dec-variavel : tipo lista-de-nomes ';'
   lista-de-nomes : nome { ',' nome }
   tipo : tipo-base | tipo '[' ']'

obs: 'x[ ]' é um array de x (ou, mais precisamente, uma referência para um array).

   tipo-base : 'int' | 'string'
   dec-funcao : tipo-retorno nome '(' parametros ')' bloco
   tipo-retorno : tipo | 'void'
   parametros : /* vazio */ | parametro { ',' parametro }
   parametro : tipo nome
   bloco : '{' { dec-variavel } { comando } '}'
   comando : 'if' exp 'then' comando parte-else
           | 'while' exp 'do' comando
           | var '=' exp ';'
           | 'return' [ exp ] ';'
           | chamada ';'
	    | bloco

obs: as expressões em if e while devem ter tipo inteiro; um valor 0 significa falso, e diferente de 0 verdadeiro.

   parte-else : /* vazio */ | 'else' comando
   var : nome | var '[' exp ']'
   exp : numeral | literal
	| 'nil'
	| 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
	| 'not' exp
	| exp 'and' exp
	| exp 'or' exp
   chamada : nome '(' lista-exp ')'

obs: a passagem de parâmetros é como em C, sempre por valor.

   lista-exp : /* vazio */ | exp { ',' exp }

A linguagem Monga 99 inclui também as seguintes funções pré-definidas:

Tipagem

A tipagem de Monga é bastante simples: