summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstudent <student@192.168.1.186>2017-04-17 11:47:12 -0400
committerstudent <student@192.168.1.186>2017-04-17 11:47:12 -0400
commita08c605bb2b60bf8bcfd0049c23dc0c38696a7d3 (patch)
tree7a63d1219d728d8e007bd04932325507e1ba7b08
parent4139b7c3d7b6439dc86a72e2aabf07d762cda729 (diff)
Start work on evaluation of lang.
-rw-r--r--JPratt/src/examples/java/bjc/pratt/examples/lang/LangEvaluator.java32
-rw-r--r--JPratt/src/examples/java/bjc/pratt/examples/lang/PrattParserTest.java16
-rw-r--r--JPratt/src/examples/java/bjc/pratt/examples/lang/tokens/LangToken.java17
3 files changed, 60 insertions, 5 deletions
diff --git a/JPratt/src/examples/java/bjc/pratt/examples/lang/LangEvaluator.java b/JPratt/src/examples/java/bjc/pratt/examples/lang/LangEvaluator.java
new file mode 100644
index 0000000..bf4c8d0
--- /dev/null
+++ b/JPratt/src/examples/java/bjc/pratt/examples/lang/LangEvaluator.java
@@ -0,0 +1,32 @@
+package bjc.pratt.examples.lang;
+
+import bjc.pratt.examples.lang.tokens.LangToken;
+import bjc.utils.data.ITree;
+
+public class LangEvaluator {
+ public static class EvaluatorException extends RuntimeException {
+ private static final long serialVersionUID = -8610585421069729811L;
+
+ public EvaluatorException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public EvaluatorException(String message) {
+ super(message);
+ }
+ }
+
+ public static class LangResult {
+
+ }
+
+ public LangResult evaluate(ITree<LangToken> ast) {
+ ITree<LangToken> evaluatedTree = ast.topDownTransform(LangToken::getEvaluationStrategy, this::evaluateNode);
+
+ return evaluatedTree.getHead().toResult();
+ }
+
+ private ITree<LangToken> evaluateNode(ITree<LangToken> node) {
+ return node;
+ }
+} \ No newline at end of file
diff --git a/JPratt/src/examples/java/bjc/pratt/examples/lang/PrattParserTest.java b/JPratt/src/examples/java/bjc/pratt/examples/lang/PrattParserTest.java
index a4def27..6702ca5 100644
--- a/JPratt/src/examples/java/bjc/pratt/examples/lang/PrattParserTest.java
+++ b/JPratt/src/examples/java/bjc/pratt/examples/lang/PrattParserTest.java
@@ -28,6 +28,7 @@ import java.util.function.UnaryOperator;
import bjc.pratt.PrattParser;
import bjc.pratt.commands.InitialCommand;
import bjc.pratt.commands.NonInitialCommand;
+import bjc.pratt.examples.lang.tokens.LangToken;
import bjc.pratt.tokens.StringToken;
import bjc.pratt.tokens.StringTokenStream;
import bjc.pratt.tokens.Token;
@@ -35,7 +36,6 @@ import bjc.utils.data.ITree;
import bjc.utils.data.TransformIterator;
import bjc.utils.funcdata.IList;
import bjc.utils.parserutils.ParserException;
-import bjc.utils.parserutils.splitter.ChainTokenSplitter;
import bjc.utils.parserutils.splitter.ConfigurableTokenSplitter;
import bjc.utils.parserutils.splitter.ExcludingTokenSplitter;
import bjc.utils.parserutils.splitter.FilteredTokenSplitter;
@@ -85,7 +85,7 @@ public class PrattParserTest {
reserved.addAll(Arrays.asList("begin", "end"));
reserved.addAll(Arrays.asList("switch", "case"));
reserved.addAll(Arrays.asList("sqrt", "cbrt", "root"));
- reserved.addAll(Arrays.asList("try", "catch", "finally"));
+ reserved.addAll(Arrays.asList("try", "throw", "catch", "finally"));
reserved.add("var");
final ConfigurableTokenSplitter lo = new ConfigurableTokenSplitter(true);
@@ -134,13 +134,17 @@ public class PrattParserTest {
*/
tokenStream.next();
- final ITree<Token<String, String>> tree = parser.parseExpression(0, tokenStream, ctx, true);
+ final ITree<Token<String, String>> rawTree = parser.parseExpression(0, tokenStream, ctx, true);
if (!tokenStream.headIs("(end)")) {
System.out.println("\nMultiple expressions on line");
}
- System.out.println("\nParsed expression:\n" + tree);
+ System.out.printf("\nParsed expression:\n%s", rawTree);
+
+ final ITree<LangToken> tokenTree = rawTree.rebuildTree(LangToken::fromToken, LangToken::fromToken);
+
+ System.out.printf("\nAST-ized expression:\n%s", tokenTree);
} catch (final ParserException pex) {
pex.printStackTrace();
}
@@ -150,7 +154,7 @@ public class PrattParserTest {
}
System.out.println();
- System.out.println("\nContext is: " + ctx);
+ System.out.printf("\nContext is: %s\n", ctx);
scn.close();
}
@@ -290,6 +294,8 @@ public class PrattParserTest {
parser.addInitialCommand("case", unary(5));
+ parser.addInitialCommand("throw", unary(10));
+
parser.addInitialCommand("-", unary(30));
final InitialCommand<String, String, TestContext> root = unary(50);
diff --git a/JPratt/src/examples/java/bjc/pratt/examples/lang/tokens/LangToken.java b/JPratt/src/examples/java/bjc/pratt/examples/lang/tokens/LangToken.java
new file mode 100644
index 0000000..1230430
--- /dev/null
+++ b/JPratt/src/examples/java/bjc/pratt/examples/lang/tokens/LangToken.java
@@ -0,0 +1,17 @@
+package bjc.pratt.examples.lang.tokens;
+
+import bjc.pratt.examples.lang.LangEvaluator.LangResult;
+import bjc.pratt.tokens.Token;
+import bjc.utils.data.TopDownTransformResult;
+
+public interface LangToken {
+ LangResult toResult();
+
+ static LangToken fromToken(Token<String, String> token) {
+ return null;
+ }
+
+ default TopDownTransformResult getEvaluationStrategy() {
+ return TopDownTransformResult.PUSHDOWN;
+ }
+} \ No newline at end of file