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.