#!../astl-calc-step1/astl-ulmcalc-free
/*
Copyright (C) 2019-2020 Andreas Franz Borchert
Michael Christian Lehn
----------------------------------------------------------------------------
Astl-ULMasm is free software; you can redistribute it
and/or modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either version
2 of the License, or (at your option) any later version.
Astl-ULMasm is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
library "../lib";
import eval_step1;
import ops;
import printer;
sub join(units) {
var ops = [];
while (len(units) > 0) {
var unit = pop(units);
foreach op in (unit) {
push(ops, op);
}
}
return <("compilation_unit" { ops }...)>;
}
sub usage {
var msg = "Usage: " & cmdname & " [-o outfile] [infile...]";
println(stderr, msg);
exit(1);
}
sub main(argv) {
var unit = root;
var units = [];
if (len(argv) == 0) {
var input = open(stdin);
var res = parse(stdin);
if (type(res) == "string") {
println(stderr, res); exit(1);
}
push(units, res);
} else {
while (len(argv) > 0) {
var input_file = pop(argv);
// parse input file
var input = open(input_file);
if (!input) {
println(stderr, input_file, ": cannot open for reading"); exit(1);
}
var res = parse(input);
if (type(res) == "string") {
println(stderr, res); exit(1);
}
push(units, res);
}
}
if (len(units) == 1) {
root = units[0];
} else {
root = join(units);
}
run_attribution_rules(root);
}