diff --git a/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxNilLiteralNode.java b/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxNilLiteralNode.java new file mode 100644 index 0000000..06f52f4 --- /dev/null +++ b/jlox/tlox/src/main/java/xyz/ctsk/lox/nodes/expr/LoxNilLiteralNode.java @@ -0,0 +1,11 @@ +package xyz.ctsk.lox.nodes.expr; + +import com.oracle.truffle.api.frame.VirtualFrame; +import xyz.ctsk.lox.nodes.LoxExpressionNode; + +public class LoxNilLiteralNode extends LoxExpressionNode { + @Override + public Object executeGeneric(VirtualFrame frame) { + return null; + } +} 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 afa975a..5537277 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 @@ -2,7 +2,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; import xyz.ctsk.lox.nodes.expr.*; @@ -22,6 +21,10 @@ public class LoxNodeFactory { return new LoxBooleanLiteralNode(value); } + public static LoxNilLiteralNode createNilLiteral() { + return new LoxNilLiteralNode(); + } + 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 907e0a4..a98c4c8 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 @@ -48,6 +48,7 @@ literal returns [LoxExpressionNode result] | STRING { $result = factory.createStringLiteral($STRING); } | TRUE { $result = factory.createBooleanLiteral($TRUE); } | FALSE { $result = factory.createBooleanLiteral($FALSE); } + | NIL { $result = factory.createNilLiteral(); } ; AND: 'and' ;