Skip to content

Commit

Permalink
Remove unused ConcurrentEvaluator and NaiveEvaluator, refactor the ev…
Browse files Browse the repository at this point in the history
…aluation of expressions
  • Loading branch information
predatorray committed Jun 12, 2016
1 parent 43d953a commit b265028
Show file tree
Hide file tree
Showing 27 changed files with 106 additions and 482 deletions.
4 changes: 2 additions & 2 deletions src/main/java/me/predatorray/bud/lisp/BudInterpreter.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

import me.predatorray.bud.lisp.builtin.BuiltinsEnvironment;
import me.predatorray.bud.lisp.evaluator.Evaluator;
import me.predatorray.bud.lisp.evaluator.NaiveEvaluator;
import me.predatorray.bud.lisp.evaluator.TcoEvaluator;
import me.predatorray.bud.lisp.lang.BudObject;
import me.predatorray.bud.lisp.lang.Environment;
import me.predatorray.bud.lisp.lexer.Lexer;
Expand All @@ -46,7 +46,7 @@ public class BudInterpreter {
private final Environment initial;

public BudInterpreter() {
this(new NaiveEvaluator());
this(new TcoEvaluator());
}

public BudInterpreter(Evaluator evaluator) {
Expand Down
13 changes: 3 additions & 10 deletions src/main/java/me/predatorray/bud/lisp/BudRepl.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import me.predatorray.bud.lisp.builtin.BuiltinsEnvironment;
import me.predatorray.bud.lisp.evaluator.EvaluatingException;
import me.predatorray.bud.lisp.evaluator.Evaluator;
import me.predatorray.bud.lisp.evaluator.NaiveEvaluator;
import me.predatorray.bud.lisp.evaluator.TcoEvaluator;
import me.predatorray.bud.lisp.lang.BudObject;
import me.predatorray.bud.lisp.lang.Environment;
import me.predatorray.bud.lisp.lexer.Lexer;
Expand All @@ -36,14 +36,7 @@
import me.predatorray.bud.lisp.parser.Parser;
import me.predatorray.bud.lisp.parser.ParserException;

import java.io.BufferedReader;
import java.io.Console;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
Expand All @@ -60,7 +53,7 @@ public BudRepl() {
}

public BudRepl(boolean interactive) {
this.evaluator = new NaiveEvaluator();
this.evaluator = new TcoEvaluator();
this.initial = BuiltinsEnvironment.INSTANCE;
this.interactive = interactive;
}
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,22 @@
*/
package me.predatorray.bud.lisp.evaluator;

import me.predatorray.bud.lisp.lang.BudFuture;
import me.predatorray.bud.lisp.lang.BudObject;
import me.predatorray.bud.lisp.lang.Continuous;
import me.predatorray.bud.lisp.lang.Environment;
import me.predatorray.bud.lisp.parser.Expression;

public class TcoEvaluator implements Evaluator {

@Override
public BudObject evaluate(Expression expression, Environment environment) {
BudFuture nextCall = expression.evaluateAndGetBudFuture(environment, this);
Continuous nextCall = expression.evaluate(environment, this);
while (true) {
BudFuture tailCall = nextCall.getTailCall();
if (tailCall == null) {
Continuous successor = nextCall.getSuccessor();
if (successor == null) {
return nextCall.getResult();
}
nextCall = tailCall;
nextCall = successor;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
*/
package me.predatorray.bud.lisp.lang;

public interface BudFuture {
public interface Continuous {

BudObject getResult();

BudFuture getTailCall();
Continuous getSuccessor();
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ public BudObject apply(List<BudObject> arguments) {
}

@Override
public BudFuture applyAndGetBudFuture(List<BudObject> arguments) {
public Continuous applyAndGetBudFuture(List<BudObject> arguments) {
Environment enclosing = generateEnvForBody(arguments);
return new TailExpressionBudFuture(body, enclosing, evaluator);
return new TailExpression(body, enclosing, evaluator);
}

private Environment generateEnvForBody(List<BudObject> arguments) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@

import java.util.List;

public final class TailApplicationBudFuture implements BudFuture {
public final class TailApplication implements Continuous {

private final Function function;
private final List<BudObject> arguments;

public TailApplicationBudFuture(Function function, List<BudObject> arguments) {
public TailApplication(Function function, List<BudObject> arguments) {
this.function = Validation.notNull(function);
this.arguments = Validation.notNull(arguments);
}
Expand All @@ -43,12 +43,12 @@ public BudObject getResult() {
}

@Override
public BudFuture getTailCall() {
public Continuous getSuccessor() {
if (function instanceof TailCallFunction) {
TailCallFunction tailCallFunction = (TailCallFunction) this.function;
return tailCallFunction.applyAndGetBudFuture(arguments);
} else {
return new CompletedBudFuture(function.apply(arguments));
return new Terminal(function.apply(arguments));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@

public interface TailCallFunction extends Function {

BudFuture applyAndGetBudFuture(List<BudObject> arguments);
Continuous applyAndGetBudFuture(List<BudObject> arguments);
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@
import me.predatorray.bud.lisp.parser.Expression;
import me.predatorray.bud.lisp.util.Validation;

public final class TailExpressionBudFuture implements BudFuture {
public final class TailExpression implements Continuous {

private final Expression tailExpression;
private final Environment environment;
private final Evaluator evaluator;

public TailExpressionBudFuture(Expression tailExpression, Environment environment, Evaluator evaluator) {
public TailExpression(Expression tailExpression, Environment environment, Evaluator evaluator) {
this.tailExpression = Validation.notNull(tailExpression);
this.environment = Validation.notNull(environment);
this.evaluator = Validation.notNull(evaluator);
Expand All @@ -45,7 +45,7 @@ public BudObject getResult() {
}

@Override
public BudFuture getTailCall() {
return tailExpression.evaluateAndGetBudFuture(environment, evaluator);
public Continuous getSuccessor() {
return tailExpression.evaluate(environment, evaluator);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@
*/
package me.predatorray.bud.lisp.lang;

public final class CompletedBudFuture implements BudFuture {
public final class Terminal implements Continuous {

private final BudObject result;

public CompletedBudFuture(BudObject result) {
public Terminal(BudObject result) {
this.result = result;
}

Expand All @@ -37,7 +37,7 @@ public BudObject getResult() {
}

@Override
public BudFuture getTailCall() {
public Continuous getSuccessor() {
return null;
}
}

0 comments on commit b265028

Please sign in to comment.