Pl0.Cli API – Detaillierte Referenz
Überblick
Das Modul Pl0.Cli stellt die Kommandozeilen-Schnittstelle (CLI) von TinyPl0 bereit. Es verbindet den Compiler (Pl0.Core) und die virtuelle Maschine (Pl0.Vm) und bietet ein benutzerfreundliches Command-Line-Interface.
Die CLI unterstützt mehrere Kommandos:
compile– Kompiliert PL/0-Code zu P-Coderun– Kompiliert und führt PL/0-Code direkt ausrun-pcode– Führt vorkompilierten P-Code aus
Hauptkomponenten
CliCommand – Kommandodefinition
CliCommand definiert ein CLI-Kommando mit:
- Name: Der Kommando-Name (z.B. "compile")
- Beschreibung: Kurze Erklärung der Funktionalität
- Optionen: Kommando-spezifische Parameter
- Handler: Die Methode, die ausgeführt wird
CliOptionsParser – Optionen-Analyse
CliOptionsParser ist ein flexibler Parser für Kommandozeilen-Argumente. Er:
- Parst Pascal-kompatible Compiler-Switches (z.B.
/out,/list) - Unterstützt lange und kurze Optionen
- Generiert hilfreiche Fehlermeldungen bei ungültigen Optionen
Beispiel:
// Parsing von Kommandozeilen-Argumenten
var parser = new CliOptionsParser();
var result = parser.Parse(args);
if (result.HasErrors)
{
foreach (var error in result.Errors)
{
Console.WriteLine(error);
}
}
CompilerCliOptions – Optionen-Struktur
CompilerCliOptions speichert die geparsten Optionen für den compile-Kommando:
- SourceFile: Eingabe-Dateipath
- OutputFile: Ausgabe-P-Code-Datei (optional, mit
/out) - ListingFile: P-Code-Listing-Datei (optional, mit
/list) - Dialect: PL/0-Dialekt (Standard oder erweitert)
- EmitMode: Art der Ausgabe (Binary oder Text)
Nutzung:
var options = new CompilerCliOptions
{
SourceFile = "program.pl0",
OutputFile = "program.pcode",
ListingFile = "program.list"
};
CliHelpPrinter – Hilfssystem
CliHelpPrinter generiert hilfreiche Ausgaben:
- Allgemeine Hilfe (alle verfügbaren Kommandos)
- Kommando-spezifische Hilfe (Optionen eines Kommandos)
Beispiel:
var printer = new CliHelpPrinter();
printer.PrintGeneralHelp();
// oder
printer.PrintCommandHelp("compile");
CliParseResult – Parsing-Ergebnis
CliParseResult kapselt das Ergebnis des Kommandozeilen-Parsings:
- Command: Das erkannte Kommando
- Options: Die geparsten Optionen
- HasErrors: Fehlerflag
- Errors: Liste von Parsing-Fehlern
CompilationDiagnostics – Fehlerbehandlung
CompilationDiagnostics und CliDiagnostic verwalten Fehler- und Warnmeldungen für die Benutzerausgabe.
EmitMode – Ausgabe-Modi
EmitMode definiert, wie der P-Code ausgegeben wird:
- Binary: Binäres Format (kompakt, maschinenlesbar)
- Text: Textformat (menschenlesbar, mit Mnemonics)
Workflow-Beispiele
Beispiel 1: Kompilieren einer Datei
// CLI empfängt: compile program.pl0 /out program.pcode /list program.list
var options = new CompilerCliOptions
{
SourceFile = "program.pl0",
OutputFile = "program.pcode",
ListingFile = "program.list"
};
// Compiler nutzen
var compiler = new Pl0Compiler();
var result = compiler.Compile(File.ReadAllText(options.SourceFile));
// Ergebnis speichern
if (result.Success)
{
// P-Code serialisieren und speichern...
}
Beispiel 2: Direktes Ausführen von Code
// CLI empfängt: run program.pl0
var code = File.ReadAllText("program.pl0");
var compiler = new Pl0Compiler();
var compilationResult = compiler.Compile(code);
if (compilationResult.Success)
{
var vm = new VirtualMachine(compilationResult.Instructions);
var vmResult = vm.Execute();
// Ergebnis ausgeben...
}
Verbindung zu anderen Modulen
- ← Pl0.Core: Nutzt den
Pl0Compilerzur Kompilierung - ← Pl0.Vm: Nutzt die
VirtualMachinezur Ausführung von P-Code