Compiler for the AGUDA programming language implemented in Rust for the Compilation Techniques course.
AGUDA is an imperative language where programs consist solely of expressions.
Each program is a sequence of declarations, introduced by the let
keyword.
- Variable:
id
- Literals:
...
,-1
,0
,1
,...
,true
,false
,null
,"string"
- Binary operators:
;
,+
,-
,*
,/
,%
,^
,==
,!=
,<
,<=
,>
,>=
,!
,||
,&&
- Unary operators:
-
,!
- Function call:
id(exp1,...,expn)
(n >= 1) - Assignment:
set lhs = exp
- Variable declarations:
let id : type = exp
- Conditionals:
if exp1 then exp2 else exp3
,if exp1 then exp2
- While loop:
while exp1 do exp2
- Array creation:
new type [ exp1 | exp2 ]
- Array access:
exp1[exp2]
- Parenthetical expression:
(exp)
- Variables:
let id : type = exp
- Functions:
let id (id1, ..., idn) : type = exp
(n >= 1)
- Basic:
Int
,Bool
,Unit
,String
- Arrays:
type []
- Functions:
type -> type
or(type1, ..., type) -> type
(n >= 1)
Here's a simple AGUDA program that creates a 2x2 identity matrix and prints it:
let printMatrix (a) : Int[][] -> Unit =
let i : Int = 0;
while i < length(a) do (
let j : Int = 0;
while j < length(a[0]) do (
print(a[i][j]); print(" ");
set j = j + 1
);
print("\n");
set i = i + 1
)
let main(_): Unit -> Unit =
let a : Int[][] = new Int[][2 | new Int[2 | 0]];
set a[0][0] = 1;
set a[1][1] = 1;
printMatrix(a)