2021-03-02 19:51:49 +00:00
|
|
|
/**
|
|
|
|
* Commands
|
|
|
|
*
|
|
|
|
* All command-line arguments and their impementations
|
|
|
|
*/
|
|
|
|
|
|
|
|
module commandline.commands;
|
|
|
|
|
|
|
|
import jcli;
|
|
|
|
import std.stdio;
|
2021-03-02 19:55:45 +00:00
|
|
|
import compiler.compiler : beginCompilation;
|
2022-01-20 08:54:21 +00:00
|
|
|
import std.exception : ErrnoException;
|
|
|
|
import compiler.lexer : Lexer;
|
2021-03-02 19:51:49 +00:00
|
|
|
|
2022-08-23 15:33:49 +01:00
|
|
|
// import jcli.cli;
|
|
|
|
|
2021-03-02 19:51:49 +00:00
|
|
|
@Command("help", "Shows the help screen")
|
|
|
|
struct helpCommand
|
|
|
|
{
|
2022-01-20 08:54:21 +00:00
|
|
|
/* TODO: Add missing implementation for this */
|
2021-03-02 19:51:49 +00:00
|
|
|
void onExecute()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-20 08:54:21 +00:00
|
|
|
/**
|
|
|
|
* Compile the given source file from start to finish
|
|
|
|
*/
|
2021-03-02 19:51:49 +00:00
|
|
|
@Command("compile", "Compiles the given file(s)")
|
|
|
|
struct compileCommand
|
|
|
|
{
|
2022-08-23 15:33:49 +01:00
|
|
|
@ArgPositional("source file", "The source file to compile")
|
2021-03-02 19:51:49 +00:00
|
|
|
string sourceFile;
|
|
|
|
|
|
|
|
// @CommandRawListArg
|
|
|
|
// string[] d;
|
|
|
|
// TODO: Get array
|
|
|
|
|
|
|
|
void onExecute()
|
|
|
|
{
|
|
|
|
writeln("Compiling source file: "~sourceFile);
|
2021-03-02 19:55:45 +00:00
|
|
|
|
|
|
|
/* TODO: Read file */
|
|
|
|
string sourceCode = "";
|
|
|
|
|
|
|
|
|
|
|
|
beginCompilation([sourceFile]);
|
2021-03-02 19:51:49 +00:00
|
|
|
}
|
2022-01-20 08:54:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Only perform tokenization of the given source files
|
|
|
|
*/
|
|
|
|
@Command("lex", "Performs tokenization of the given file(s)")
|
|
|
|
struct lexCommand
|
|
|
|
{
|
2022-08-23 15:33:49 +01:00
|
|
|
@ArgPositional("source file", "The source file to compile")
|
2022-01-20 08:54:21 +00:00
|
|
|
string sourceFile;
|
|
|
|
|
|
|
|
void onExecute()
|
|
|
|
{
|
|
|
|
writeln("Performing tokenization on file: "~sourceFile);
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
/* Read the source file's data */
|
|
|
|
File file;
|
|
|
|
file.open(sourceFile, "r");
|
|
|
|
ulong fSize = file.size();
|
|
|
|
byte[] data;
|
|
|
|
data.length = fSize;
|
|
|
|
data = file.rawRead(data);
|
|
|
|
string sourceText = cast(string)data;
|
|
|
|
|
|
|
|
/* Begin lexing process */
|
|
|
|
Lexer lexer = new Lexer(sourceText);
|
|
|
|
if(lexer.performLex())
|
|
|
|
{
|
|
|
|
writeln("=== Tokens ===\n");
|
|
|
|
writeln(lexer.getTokens());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* TODO: Is the lexer.performLex() return value used? */
|
|
|
|
writeln("There was an error whilst performing tokenization");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch(ErrnoException e)
|
|
|
|
{
|
|
|
|
/* TODO: Use gogga error */
|
|
|
|
writeln("Could not open source file "~sourceFile);
|
|
|
|
}
|
|
|
|
}
|
2021-03-02 19:51:49 +00:00
|
|
|
}
|