[tlox] Add string and boolean literals
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
package xyz.ctsk.lox;
|
package xyz.ctsk.lox;
|
||||||
|
|
||||||
import com.oracle.truffle.api.Truffle;
|
|
||||||
import xyz.ctsk.lox.nodes.LoxRootNode;
|
import xyz.ctsk.lox.nodes.LoxRootNode;
|
||||||
import xyz.ctsk.lox.parser.LoxParser;
|
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;
|
package xyz.ctsk.lox.parser;
|
||||||
|
|
||||||
|
import com.oracle.truffle.api.strings.TruffleString;
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
import xyz.ctsk.lox.LoxException;
|
import xyz.ctsk.lox.LoxException;
|
||||||
import xyz.ctsk.lox.nodes.LoxExpressionNode;
|
import xyz.ctsk.lox.nodes.LoxExpressionNode;
|
||||||
@@ -11,6 +12,16 @@ public class LoxNodeFactory {
|
|||||||
return new LoxNumberLiteralNode(value);
|
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) {
|
public static LoxExpressionNode createUnary(Token op, LoxExpressionNode value) {
|
||||||
return switch (op.getText()) {
|
return switch (op.getText()) {
|
||||||
case "-" -> LoxNegNodeGen.create(value);
|
case "-" -> LoxNegNodeGen.create(value);
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ expression returns [LoxExpressionNode result]
|
|||||||
|
|
||||||
literal returns [LoxExpressionNode result]
|
literal returns [LoxExpressionNode result]
|
||||||
: NUMBER { $result = factory.createNumberLiteral($NUMBER); }
|
: NUMBER { $result = factory.createNumberLiteral($NUMBER); }
|
||||||
|
| STRING { $result = factory.createStringLiteral($STRING); }
|
||||||
|
| TRUE { $result = factory.createBooleanLiteral($TRUE); }
|
||||||
|
| FALSE { $result = factory.createBooleanLiteral($FALSE); }
|
||||||
;
|
;
|
||||||
|
|
||||||
AND: 'and' ;
|
AND: 'and' ;
|
||||||
|
|||||||
Reference in New Issue
Block a user