A linguagem Monga é uma linguagem procedural simples.
Ela oferece os tipos int, float, arrays e records (structs);
estruturas de controle while e if-then-else;
variáveis globais e locais;
e funções com parâmetros e retorno de valores.
Além disso, ela gera código objeto compatível com C,
o que permite que programas Monga possam chamar funções das
bibliotecas padrão de C.
Comentários em Monga começam com # e terminam no final da linha.
Identificadores são como em C.
Numerais, tanto inteiros como ponto flutuante,
podem ser escritos em decimal ou em hexa
(começando com 0x).
A lista de palavras reservadas segue abaixo:
as else function if new return type var while
{ X } significa
uma lista de zero ou mais ocorrências de X
e [ X ] significa
um X opcional.
Itens entre aspas simples ou em maiúsculas
denotam terminais (tokens),
outros nomes denotam não-terminais.
program : { definition }
definition : def-variable | def-function | def-type
def-variable : VAR ID ':' type ';'
type : ID
def-type : TYPE ID '=' typedesc ;
typedesc : ID | '[' typedesc ']' | '{' { field } '}'
field : ID ':' type ';' ;
def-function : FUNCTION ID '(' parameters ')' [':' type] block
parameters : [ parameter { ',' parameter } ]
parameter : ID ':' type
block : '{' { def-variable } { statement } '}'
statement : IF cond block [ ELSE block ]
| WHILE cond block
| var '=' exp ';'
| RETURN [ exp ] ';'
| call ';'
| '@' exp ';'
| block
var : ID | exp '[' exp ']' | exp '.' ID
exp : NUMERAL
| var
| '(' exp ')'
| call
| exp AS type
| NEW type [ '[' exp ']' ]
| '-' exp
| exp '+' exp
| exp '-' exp
| exp '*' exp
| exp '/' exp
| cond '?' exp ':' exp
cond : '(' cond ')'
| exp '==' exp
| exp '~=' exp
| exp '<=' exp
| exp '>=' exp
| exp '<' exp
| exp '>' exp
| '!' cond
| cond '&&' cond
| cond '||' cond
call : ID '(' explist ')'
explist : [ exp { ',' exp } ]
Observações:
main.
int e float.
new tipo [exp] cria um novo array com
um número exp de elementos do dado tipo;
a expressão exp deve ter tipo inteiro.
A expressão new tipo (sem dimensão) cria
um novo record do dado tipo.
e as t converte
o valor da expressão e para o tipo t.
'&&' e '||' devem usar "curto-circuito".
int e float,
os valores int devem ser convertidos para float.
@ exp; imprime o valor da expressão
exp.
Qualquer dúvida sobre a linguagem, consulte o professor.