diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 20:56:57 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 20:56:57 +0100 |
| commit | f623d56599a160d27c0f7e0b48e3b32cb2b3a471 (patch) | |
| tree | 38c713fcbb3b79943d81babf9bf70af729b13c27 /src/main/java/org/shedlang/compiler/ShedCompiler.java | |
| parent | 0cf3c519c2b834c1d5709e1e98be54cd98b90eb9 (diff) | |
Update CLI to print instructions
Diffstat (limited to 'src/main/java/org/shedlang/compiler/ShedCompiler.java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/ShedCompiler.java | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java index a7949d53..102d7c6f 100644 --- a/src/main/java/org/shedlang/compiler/ShedCompiler.java +++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java @@ -2,6 +2,14 @@ package org.shedlang.compiler; import org.shedlang.compiler.parser.Parser; import org.shedlang.compiler.sources.Sources; +import org.shedlang.compiler.stackir.InstructionSerializer; +import org.shedlang.compiler.stackir.StackCompiler; +import org.shedlang.compiler.typechecker.TypeChecker; +import org.shedlang.compiler.typechecker.TypeCheckerContext; +import org.shedlang.compiler.types.Effects; +import org.shedlang.compiler.types.FunctionType; +import org.shedlang.compiler.types.Types; +import org.shedlang.compiler.util.P; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -13,6 +21,7 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Map; import static org.shedlang.compiler.parser.Tokeniser.tokenise; @@ -27,10 +36,31 @@ public class ShedCompiler { var sourceContents = Files.readString(sourceFilePath, StandardCharsets.UTF_8); var source = Sources.file(sourceFilePath.toString(), sourceContents); + var tokens = tokenise(source); - var node = Parser.parseNamespace(tokens); - System.out.println(node); + var untypedNode = Parser.parseNamespace(tokens); + + var context = TypeCheckerContext.EMPTY + .enter(P.map( + Map.entry("Io", Types.effectType(Effects.IO)), + Map.entry("Unit", Types.metaType(Types.UNIT)), + + Map.entry("print", new FunctionType( + List.of(Types.STRING), + List.of(), + Types.UNIT + )) + )); + var typedNode = TypeChecker.typeCheckNamespace(untypedNode, context); + + var instructions = StackCompiler.compileNamespace(typedNode); + + var builder = new StringBuilder(); + InstructionSerializer.serializeInstructions(instructions, builder); + var instructionsString = builder.toString(); + + System.out.println(instructionsString); System.out.println(); } } |
