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.
and do else float if string new nil not or return then void while
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
'new x (exp)'
cria um array com tipo x
, e com
exp
elementos (exp
deve ser uma expressão de tipo
inteiro).
+
pode ser usado sobre strings, para fazer a
concatenação de strings.
int
, 0 para
falso e 1 para verdadeiro.
'and'
e 'or'
devem usar "curto-circuito".
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:
string tostring( int i )
- converte inteiro para string.
int toint( string s )
- converte string para inteiro.
void print( string s )
- imprime uma string.
string read( )
- lê uma string. A tipagem de Monga é bastante simples:
int
, literais têm tipo
string
.
nil
é a única expressão polimórfica: seu tipo é
X[ ]
para qualquer X
.
int
ou string
).
var[ exp ]
, var
tem que ser
um array de X
, exp
tem que ter tipo inteiro, e o
tipo final da expressão é X
.
new X (exp)
tem tipo X
; esse tipo
deve ser um array, e o tipo de exp
deve ser int
.
int
, que também é o tipo das expressões de
controle de if
's e while
's.
void
; o valor de
retorno é simplesmente descartado.