-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcompiler.a68
40 lines (32 loc) · 1.02 KB
/
compiler.a68
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PR include "parser.a68" PR
PR include "analysis.a68" PR
PR include "irgen.a68" PR
PR include "ir_x86.a68" PR
PR heap=1024M PR
PR handles=128M PR
PR stack=8M PR
PR frame=8M PR
PROC assemble = (STRING asm name, obj name)VOID:
external program (("/usr/bin/as", "--32", "-o"+obj name, asm name));
PROC link = (STRING obj name, bin name)VOID:
BEGIN
external program (("/usr/bin/ld", "-s", "-m", "elf_i386", "-o"+bin name, obj name));
external program (("/bin/chmod", "+x", bin name))
END;
BEGIN
STRING src name =
argv(4);
STRING base name =
IF INT i; last char in string (".", i, src name) THEN src name[1:i-1] ELSE src name FI;
DECLS ast := parse file(src name);
no complaints ("parsing");
semantic analysis (ast);
no complaints ("type checking");
open (asm, base name+".s", stand out channel);
transduce (ast);
no complaints ("compiling");
assemble (basename+".s", basename+".o");
no complaints ("assembling");
link (basename+".o", basename);
no complaints ("linking")
END