[tlox] Add string and boolean literals
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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' ;
|
||||
|
||||
Reference in New Issue
Block a user