diff --git a/jlox/tlox/src/main/java/xyz/ctsk/lox/Main.java b/jlox/tlox/src/main/java/xyz/ctsk/lox/Main.java index 96f26af..34cb2da 100644 --- a/jlox/tlox/src/main/java/xyz/ctsk/lox/Main.java +++ b/jlox/tlox/src/main/java/xyz/ctsk/lox/Main.java @@ -1,6 +1,5 @@ package xyz.ctsk.lox; -import com.oracle.truffle.api.Truffle; import xyz.ctsk.lox.nodes.LoxRootNode; import xyz.ctsk.lox.parser.LoxParser; diff --git a/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxBooleanLiteralNode.java b/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxBooleanLiteralNode.java new file mode 100644 index 0000000..71fcb5d --- /dev/null +++ b/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxBooleanLiteralNode.java @@ -0,0 +1,17 @@ +package xyz.ctsk.lox.nodes.expr; + +import com.oracle.truffle.api.frame.VirtualFrame; +import xyz.ctsk.lox.nodes.LoxExpressionNode; + +public class LoxBooleanLiteralNode extends LoxExpressionNode { + private final boolean value; + + public LoxBooleanLiteralNode(boolean value) { + this.value = value; + } + + @Override + public Object executeGeneric(VirtualFrame frame) { + return value; + } +} diff --git a/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxStringLiteralNode.java b/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxStringLiteralNode.java new file mode 100644 index 0000000..bca7adc --- /dev/null +++ b/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxStringLiteralNode.java @@ -0,0 +1,18 @@ +package xyz.ctsk.lox.nodes.expr; + +import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.strings.TruffleString; +import xyz.ctsk.lox.nodes.LoxExpressionNode; + +public class LoxStringLiteralNode extends LoxExpressionNode { + private final TruffleString value; + + public LoxStringLiteralNode(TruffleString value) { + this.value = value; + } + + @Override + public Object executeGeneric(VirtualFrame frame) { + return value; + } +} diff --git a/jlox/tlox/src/main/java/xyz/ctsk/lox/parser/LoxNodeFactory.java b/jlox/tlox/src/main/java/xyz/ctsk/lox/parser/LoxNodeFactory.java index 7568d6b..afa975a 100644 --- a/jlox/tlox/src/main/java/xyz/ctsk/lox/parser/LoxNodeFactory.java +++ b/jlox/tlox/src/main/java/xyz/ctsk/lox/parser/LoxNodeFactory.java @@ -1,5 +1,6 @@ package xyz.ctsk.lox.parser; +import com.oracle.truffle.api.strings.TruffleString; import org.antlr.v4.runtime.Token; import xyz.ctsk.lox.LoxException; import xyz.ctsk.lox.nodes.LoxExpressionNode; @@ -11,6 +12,16 @@ public class LoxNodeFactory { return new LoxNumberLiteralNode(value); } + public static LoxStringLiteralNode createStringLiteral(Token literalToken) { + var value = TruffleString.fromJavaStringUncached(literalToken.getText(), TruffleString.Encoding.UTF_16); + return new LoxStringLiteralNode(value); + } + + public static LoxBooleanLiteralNode createBooleanLiteral(Token literalToken) { + var value = Boolean.parseBoolean(literalToken.getText()); + return new LoxBooleanLiteralNode(value); + } + public static LoxExpressionNode createUnary(Token op, LoxExpressionNode value) { return switch (op.getText()) { case "-" -> LoxNegNodeGen.create(value); diff --git a/jlox/tlox/src/main/resources/xyz/ctsk/lox/parser/Lox.g4 b/jlox/tlox/src/main/resources/xyz/ctsk/lox/parser/Lox.g4 index 1195f36..907e0a4 100644 --- a/jlox/tlox/src/main/resources/xyz/ctsk/lox/parser/Lox.g4 +++ b/jlox/tlox/src/main/resources/xyz/ctsk/lox/parser/Lox.g4 @@ -45,6 +45,9 @@ expression returns [LoxExpressionNode result] literal returns [LoxExpressionNode result] : NUMBER { $result = factory.createNumberLiteral($NUMBER); } + | STRING { $result = factory.createStringLiteral($STRING); } + | TRUE { $result = factory.createBooleanLiteral($TRUE); } + | FALSE { $result = factory.createBooleanLiteral($FALSE); } ; AND: 'and' ;