-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathMilCompiler.cpp
More file actions
64 lines (55 loc) · 1.94 KB
/
MilCompiler.cpp
File metadata and controls
64 lines (55 loc) · 1.94 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
* Copyright 2025 Rochus Keller <mailto:me@rochus-keller.ch>
*
* This file is part of the Micron language project.
*
* The following is the license that applies to this copy of the
* file. For a license to use the file under conditions
* other than those described here, please email to me@rochus-keller.ch.
*
* GNU General Public License Usage
* This file may be used under the terms of the GNU General Public
* License (GPL) versions 2.0 or 3.0 as published by the Free Software
* Foundation and appearing in the file LICENSE.GPL included in
* the packaging of this file. Please review the following information
* to ensure GNU General Public Licensing requirements will be met:
* http://www.fsf.org/licensing/licenses/info/GPLv2.html and
* http://www.gnu.org/copyleft/gpl.html.
*/
#include <QCoreApplication>
#include <QFileInfo>
#include "MilProject.h"
#include <QCommandLineParser>
#include <QtDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QCommandLineParser cp;
cp.setApplicationDescription("Micron Intermediate Language (MIL) compiler");
cp.addHelpOption();
cp.addVersionOption();
cp.addPositionalArgument("file", "a single mil file, or the directory searched for *.mil files");
QCommandLineOption cgen("cgen", "generate C code");
cp.addOption(cgen);
QCommandLineOption run("run", "interpret the code");
cp.addOption(run);
QCommandLineOption dump("d", "dump MIL");
cp.addOption(dump);
cp.process(a);
const QStringList args = cp.positionalArguments();
if( args.isEmpty() )
return -1;
Mil::AstModel mdl;
Mil::Project pro(&mdl);
QFileInfo info(args.first());
if( info.isDir() )
pro.collectFilesFrom(info.filePath());
else
pro.setFiles(QStringList() << info.filePath());
const bool result = pro.parse();
if( result && cp.isSet(cgen) )
pro.generateC();
if( result && cp.isSet(run) )
pro.interpret();
return 0;
}