diff options
| author | student <student@192.168.1.186> | 2017-04-17 11:47:12 -0400 |
|---|---|---|
| committer | student <student@192.168.1.186> | 2017-04-17 11:47:12 -0400 |
| commit | a08c605bb2b60bf8bcfd0049c23dc0c38696a7d3 (patch) | |
| tree | 7a63d1219d728d8e007bd04932325507e1ba7b08 | |
| parent | 4139b7c3d7b6439dc86a72e2aabf07d762cda729 (diff) | |
Start work on evaluation of lang.
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 |
