[Fix] - Adding the remaining Expression node classes
This commit is contained in:
parent
178793a13c
commit
503d2a0ffd
@ -5,6 +5,10 @@ class AstPrinter implements Expr.Visitor<String> {
|
||||
return expr.accept(this);
|
||||
}
|
||||
@Override
|
||||
public String visitCallExpr(Expr.Call expr){
|
||||
return "TODO";
|
||||
}
|
||||
@Override
|
||||
public String visitLogicalExpr(Expr.Logical expr){
|
||||
//throw exception
|
||||
return "TODO";
|
||||
|
@ -6,6 +6,7 @@ abstract class Expr {
|
||||
interface Visitor<R> {
|
||||
R visitAssignExpr(Assign expr);
|
||||
R visitBinaryExpr(Binary expr);
|
||||
R visitCallExpr(Call expr);
|
||||
R visitGroupingExpr(Grouping expr);
|
||||
R visitLiteralExpr(Literal expr);
|
||||
R visitLogicalExpr(Logical expr);
|
||||
@ -42,6 +43,22 @@ abstract class Expr {
|
||||
final Token operator;
|
||||
final Expr right;
|
||||
}
|
||||
static class Call extends Expr {
|
||||
Call(Expr callee, Token paren, List<Expr> arguments) {
|
||||
this.callee = callee;
|
||||
this.paren = paren;
|
||||
this.arguments = arguments;
|
||||
}
|
||||
|
||||
@Override
|
||||
<R> R accept(Visitor<R> visitor) {
|
||||
return visitor.visitCallExpr(this);
|
||||
}
|
||||
|
||||
final Expr callee;
|
||||
final Token paren;
|
||||
final List<Expr> arguments;
|
||||
}
|
||||
static class Grouping extends Expr {
|
||||
Grouping(Expr expression) {
|
||||
this.expression = expression;
|
||||
|
@ -5,7 +5,6 @@ import java.util.List;
|
||||
class Interpreter implements Expr.Visitor<Object>,Stmt.Visitor<Void> {
|
||||
private Environment environment = new Environment();
|
||||
final Environment globals = new Environment();
|
||||
private Environment environment = globals;
|
||||
Interpreter() {
|
||||
globals.define("clock", new LoxCallable() {
|
||||
@Override
|
||||
|
@ -268,7 +268,7 @@ class Parser {
|
||||
while(match(COMMA));
|
||||
}
|
||||
Token paren = consume(RIGHT_PAREN,"Expect ')' after arguments");
|
||||
return new Expr.Call(calle,paren,arguments);
|
||||
return new Expr.Call(callee,paren,arguments);
|
||||
}
|
||||
private Expr call(){
|
||||
Expr expr = primary();
|
||||
|
@ -7,7 +7,9 @@ abstract class Stmt {
|
||||
R visitBlockStmt(Block stmt);
|
||||
R visitIfStmt(If stmt);
|
||||
R visitExpressionStmt(Expression stmt);
|
||||
R visitFunctionStmt(Function stmt);
|
||||
R visitPrintStmt(Print stmt);
|
||||
R visitReturnStmt(Return stmt);
|
||||
R visitVarStmt(Var stmt);
|
||||
R visitWhileStmt(While stmt);
|
||||
}
|
||||
@ -51,6 +53,22 @@ abstract class Stmt {
|
||||
|
||||
final Expr expression;
|
||||
}
|
||||
static class Function extends Stmt {
|
||||
Function(Token name, List<Token> params, List<Stmt> body) {
|
||||
this.name = name;
|
||||
this.params = params;
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
@Override
|
||||
<R> R accept(Visitor<R> visitor) {
|
||||
return visitor.visitFunctionStmt(this);
|
||||
}
|
||||
|
||||
final Token name;
|
||||
final List<Token> params;
|
||||
final List<Stmt> body;
|
||||
}
|
||||
static class Print extends Stmt {
|
||||
Print(Expr expression) {
|
||||
this.expression = expression;
|
||||
@ -63,6 +81,20 @@ abstract class Stmt {
|
||||
|
||||
final Expr expression;
|
||||
}
|
||||
static class Return extends Stmt {
|
||||
Return(Token keyword, Expr value) {
|
||||
this.keyword = keyword;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
<R> R accept(Visitor<R> visitor) {
|
||||
return visitor.visitReturnStmt(this);
|
||||
}
|
||||
|
||||
final Token keyword;
|
||||
final Expr value;
|
||||
}
|
||||
static class Var extends Stmt {
|
||||
Var(Token name, Expr initializer) {
|
||||
this.name = name;
|
||||
|
Loading…
Reference in New Issue
Block a user