From 99f491698ed4954b38ec4226920ca767121fc14a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 5 Dec 2023 19:00:29 +0000 Subject: Convert Patio and Shid backends to behave as normal backends --- .../org/shedlang/compiler/backends/Backends.java | 12 ++++-- .../backends/GenerateInstructionsBackend.java | 37 ---------------- .../shedlang/compiler/backends/PatioBackend.java | 43 ------------------- .../compiler/backends/PatioTextBackend.java | 50 ++++++++++++++++++++++ .../compiler/backends/ShidTextBackend.java | 43 +++++++++++++++++++ .../java/org/shedlang/compiler/cli/ShedCli.java | 18 -------- 6 files changed, 101 insertions(+), 102 deletions(-) delete mode 100644 src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java delete mode 100644 src/main/java/org/shedlang/compiler/backends/PatioBackend.java create mode 100644 src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java create mode 100644 src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/Backends.java b/src/main/java/org/shedlang/compiler/backends/Backends.java index 7f64e392..6c596c6c 100644 --- a/src/main/java/org/shedlang/compiler/backends/Backends.java +++ b/src/main/java/org/shedlang/compiler/backends/Backends.java @@ -5,7 +5,6 @@ import org.shedlang.compiler.backends.llvm.LlvmBackend; import org.shedlang.compiler.backends.wasm.WasmBackend; import org.shedlang.compiler.util.PCollectors; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Stream; @@ -15,9 +14,14 @@ public class Backends { } private static final OrderedPMap BACKENDS = - Stream.of(LlvmBackend.INSTANCE, WasmBackend.INSTANCE) - .map(backend -> Map.entry(backend.targetName(), backend)) - .collect(PCollectors.toOrderedPMap()); + Stream.of( + LlvmBackend.INSTANCE, + PatioTextBackend.INSTANCE, + ShidTextBackend.INSTANCE, + WasmBackend.INSTANCE + ) + .map(backend -> Map.entry(backend.targetName(), backend)) + .collect(PCollectors.toOrderedPMap()); public static Set targetNames() { return BACKENDS.keySet(); diff --git a/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java b/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java deleted file mode 100644 index 4e80c8ae..00000000 --- a/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.shedlang.compiler.backends; - -import org.shedlang.compiler.config.ProjectConfig; -import org.shedlang.compiler.shid.ShidSerializer; -import org.shedlang.compiler.shid.ShidNamespace; -import org.shedlang.compiler.typechecker.TypeInfos; - -import java.nio.file.Path; -import java.util.List; - -public class GenerateInstructionsBackend implements Backend { - public void compile( - ProjectConfig config, - List namespaces, - TypeInfos typeInfos, - Path targetDir - ) { - for (var namespace : namespaces) { - var namespaceName = namespace.namespaceName(); - var instructions = namespace.instructions(); - - System.out.println(namespaceName); - - var builder = new StringBuilder(); - ShidSerializer.serializeInstructions(instructions, builder); - var instructionsString = builder.toString(); - - System.out.println(instructionsString); - System.out.println(); - } - } - - @Override - public String targetName() { - return "generate-instructions"; - } -} diff --git a/src/main/java/org/shedlang/compiler/backends/PatioBackend.java b/src/main/java/org/shedlang/compiler/backends/PatioBackend.java deleted file mode 100644 index 24c034b9..00000000 --- a/src/main/java/org/shedlang/compiler/backends/PatioBackend.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.shedlang.compiler.backends; - -import org.shedlang.compiler.config.ProjectConfig; -import org.shedlang.compiler.patio.PatioCodeGen; -import org.shedlang.compiler.patio.PatioCodeGenContext; -import org.shedlang.compiler.patio.ast.PatioSerializer; -import org.shedlang.compiler.shid.ShidNamespace; -import org.shedlang.compiler.typechecker.TypeInfos; - -import java.nio.file.Path; -import java.util.List; - -public class PatioBackend implements Backend { - public void compile( - ProjectConfig config, - List namespaces, - TypeInfos typeInfos, - Path targetDir - ) { - var context = PatioCodeGenContext.forTypeInfos(typeInfos); - - for (var namespace : namespaces) { - System.out.println(namespace.namespaceName()); - - var compilationUnit = PatioCodeGen.generateNamespace( - namespace, - context - ); - - var builder = new StringBuilder(); - PatioSerializer.serializeCompilationUnit(compilationUnit, builder); - var compilationUnitString = builder.toString(); - - System.out.println(compilationUnitString); - System.out.println(); - } - } - - @Override - public String targetName() { - return "patio"; - } -} diff --git a/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java b/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java new file mode 100644 index 00000000..8a52eae7 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java @@ -0,0 +1,50 @@ +package org.shedlang.compiler.backends; + +import org.shedlang.compiler.config.ProjectConfig; +import org.shedlang.compiler.patio.PatioCodeGen; +import org.shedlang.compiler.patio.PatioCodeGenContext; +import org.shedlang.compiler.patio.ast.PatioSerializer; +import org.shedlang.compiler.shid.ShidNamespace; +import org.shedlang.compiler.typechecker.TypeInfos; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +public class PatioTextBackend implements Backend { + public static final PatioTextBackend INSTANCE = new PatioTextBackend(); + + private PatioTextBackend() { + } + + public void compile( + ProjectConfig config, + List namespaces, + TypeInfos typeInfos, + Path targetDir + ) throws IOException { + var context = PatioCodeGenContext.forTypeInfos(typeInfos); + + for (var namespace : namespaces) { + var compilationUnit = PatioCodeGen.generateNamespace( + namespace, + context + ); + + var builder = new StringBuilder(); + PatioSerializer.serializeCompilationUnit(compilationUnit, builder); + var compilationUnitString = builder.toString(); + + var path = targetDir.resolve("namespaces") + .resolve(String.join("_", namespace.namespaceName().parts()) + ".patio-text"); + Files.createDirectories(path.getParent()); + Files.writeString(path, compilationUnitString); + } + } + + @Override + public String targetName() { + return "patio-text"; + } +} diff --git a/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java b/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java new file mode 100644 index 00000000..3a6962b0 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java @@ -0,0 +1,43 @@ +package org.shedlang.compiler.backends; + +import org.shedlang.compiler.config.ProjectConfig; +import org.shedlang.compiler.shid.ShidSerializer; +import org.shedlang.compiler.shid.ShidNamespace; +import org.shedlang.compiler.typechecker.TypeInfos; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +public class ShidTextBackend implements Backend { + public static final ShidTextBackend INSTANCE = new ShidTextBackend(); + + private ShidTextBackend() { + } + + public void compile( + ProjectConfig config, + List namespaces, + TypeInfos typeInfos, + Path targetDir + ) throws IOException { + for (var namespace : namespaces) { + var instructions = namespace.instructions(); + + var builder = new StringBuilder(); + ShidSerializer.serializeInstructions(instructions, builder); + var instructionsString = builder.toString(); + + var path = targetDir.resolve("namespaces") + .resolve(String.join("_", namespace.namespaceName().parts()) + ".shid-text"); + Files.createDirectories(path.getParent()); + Files.writeString(path, instructionsString); + } + } + + @Override + public String targetName() { + return "shid-text"; + } +} diff --git a/src/main/java/org/shedlang/compiler/cli/ShedCli.java b/src/main/java/org/shedlang/compiler/cli/ShedCli.java index abe457c3..ef643c75 100644 --- a/src/main/java/org/shedlang/compiler/cli/ShedCli.java +++ b/src/main/java/org/shedlang/compiler/cli/ShedCli.java @@ -5,8 +5,6 @@ import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.Namespace; import org.shedlang.compiler.ShedCompiler; import org.shedlang.compiler.backends.Backends; -import org.shedlang.compiler.backends.GenerateInstructionsBackend; -import org.shedlang.compiler.backends.PatioBackend; import org.shedlang.compiler.errors.CompilerError; import java.io.IOException; @@ -33,12 +31,6 @@ public class ShedCli { case COMPILE -> { compiler.compile(sourcePath, Backends.backendForTarget(args.getString("target"))); } - case GENERATE_INSTRUCTIONS -> { - compiler.compile(sourcePath, new GenerateInstructionsBackend()); - } - case PATIO -> { - compiler.compile(sourcePath, new PatioBackend()); - } } } @@ -53,14 +45,6 @@ public class ShedCli { compileSubParser.addArgument("source").required(true); compileSubParser.addArgument("--target").choices(Backends.targetNames()).required(true); - var generateInstructionsSubParser = subparsers.addParser("generate-instructions"); - generateInstructionsSubParser.setDefault("command", Command.GENERATE_INSTRUCTIONS); - generateInstructionsSubParser.addArgument("source").required(true); - - var patioSubParser = subparsers.addParser("patio"); - patioSubParser.setDefault("command", Command.PATIO); - patioSubParser.addArgument("source").required(true); - try { return parser.parseArgs(args); } catch (ArgumentParserException e) { @@ -72,7 +56,5 @@ public class ShedCli { private enum Command { COMPILE, - GENERATE_INSTRUCTIONS, - PATIO, } } -- cgit v1.2.3