Skip to content

Commit

Permalink
Book done
Browse files Browse the repository at this point in the history
  • Loading branch information
madsravn committed Nov 11, 2023
1 parent abb2562 commit b3bc4c8
Show file tree
Hide file tree
Showing 19 changed files with 897 additions and 28 deletions.
46 changes: 46 additions & 0 deletions src/main/java/dk/madsravn/interpreter/ast/ArrayLiteral.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package dk.madsravn.interpreter.ast;

import dk.madsravn.interpreter.tokens.Token;

import java.lang.reflect.Array;
import java.util.List;
import java.util.stream.Collectors;

public class ArrayLiteral implements IExpression {
private Token token;
private List<IExpression> elements;

public ArrayLiteral(Token token, List<IExpression> elements) {
this.token = token;
this.elements = elements;
}

public int getElementsLength() {
return elements.size();
}

public List<IExpression> getElements() {
return elements;
}

@Override
public void expressionNode() {}

@Override
public String tokenLiteral() {
return token.getLiteral();
}

@Override
public String string() {

String elementsString = elements.stream().map(p -> p.string()).collect(Collectors.joining(", "));
StringBuilder sb = new StringBuilder();
sb.append("[");
sb.append(elementsString);
sb.append("]");

return sb.toString();
}

}
44 changes: 44 additions & 0 deletions src/main/java/dk/madsravn/interpreter/ast/HashLiteral.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package dk.madsravn.interpreter.ast;

import dk.madsravn.interpreter.tokens.Token;

import java.util.Map;
import java.util.stream.Collectors;

public class HashLiteral implements IExpression {

private Token token;
private Map<IExpression, IExpression> pairs;

public HashLiteral(Token token, Map<IExpression, IExpression> pairs) {
this.token = token;
this.pairs = pairs;
}

public Map<IExpression, IExpression> getPairs() {
return pairs;
}

public int getPairsLength() {
return pairs.size();
}

@Override
public void expressionNode() { }

@Override
public String tokenLiteral() {
return token.getLiteral();
}

@Override
public String string() {
StringBuilder sb = new StringBuilder();
String content = pairs.entrySet().stream().map(e -> e.getKey().string() + ": " + e.getValue().string()).collect(Collectors.joining(", "));
sb.append("{");
sb.append(content);
sb.append("}");

return sb.toString();
}
}
43 changes: 43 additions & 0 deletions src/main/java/dk/madsravn/interpreter/ast/IndexExpression.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package dk.madsravn.interpreter.ast;

import dk.madsravn.interpreter.tokens.Token;

public class IndexExpression implements IExpression {
private Token token;
private IExpression left;
private IExpression index;

public IndexExpression(Token token, IExpression left, IExpression index) {
this.token = token;
this.left = left;
this.index = index;
}

public IExpression getLeft() {
return left;
}

public IExpression getIndex() {
return index;
}

@Override
public void expressionNode() { }

@Override
public String tokenLiteral() {
return token.getLiteral();
}

@Override
public String string() {
StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append(left.string());
sb.append("[");
sb.append(index.string());
sb.append("])");

return sb.toString();
}
}
Loading

0 comments on commit b3bc4c8

Please sign in to comment.