From 42990231fee502552b769b9af4c04ac0dcaeb195 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Sat, 25 Mar 2017 19:13:42 -0400 Subject: Update Pratt parser --- .../pratt/commands/InitialCommands.java | 26 +++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'BJC-Utils2/src/main/java/bjc/utils/parserutils/pratt/commands/InitialCommands.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/pratt/commands/InitialCommands.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/pratt/commands/InitialCommands.java index d9e7f90..bad5964 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/pratt/commands/InitialCommands.java +++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/pratt/commands/InitialCommands.java @@ -2,7 +2,11 @@ package bjc.utils.parserutils.pratt.commands; import bjc.utils.data.ITree; import bjc.utils.parserutils.pratt.InitialCommand; +import bjc.utils.parserutils.pratt.ParseBlock; import bjc.utils.parserutils.pratt.Token; +import bjc.utils.parserutils.pratt.blocks.RepeatingParseBlock; +import bjc.utils.parserutils.pratt.blocks.SimpleParseBlock; +import bjc.utils.parserutils.pratt.blocks.TriggeredParseBlock; import java.util.function.UnaryOperator; @@ -41,7 +45,9 @@ public class InitialCommands { * @return A command implementing the operator. */ public static InitialCommand grouping(int precedence, K term, Token mark) { - return new GroupingCommand<>(precedence, term, mark); + ParseBlock innerBlock = new SimpleParseBlock<>(precedence, term, null); + + return new GroupingCommand<>(innerBlock, mark); } /** @@ -78,7 +84,11 @@ public class InitialCommands { */ public static InitialCommand preTernary(int cond1, int block1, int block2, K mark1, K mark2, Token term) { - return new PreTernaryCommand<>(cond1, block1, block2, mark1, mark2, term); + ParseBlock condBlock = new SimpleParseBlock<>(cond1, mark1, null); + ParseBlock opblock1 = new SimpleParseBlock<>(block1, mark2, null); + ParseBlock opblock2 = new SimpleParseBlock<>(block2, null, null); + + return new PreTernaryCommand<>(condBlock, opblock1, opblock2, term); } /** @@ -129,6 +139,16 @@ public class InitialCommands { public static InitialCommand delimited(int inner, K delim, K mark, Token term, UnaryOperator onEnter, UnaryOperator onDelim, UnaryOperator onExit, boolean statement) { - return new DelimitedCommand<>(inner, delim, mark, term, onEnter, onDelim, onExit, statement); + ParseBlock innerBlock = new SimpleParseBlock<>(inner, null, null); + ParseBlock delimsBlock = new RepeatingParseBlock<>(innerBlock, delim, mark, term, onDelim); + ParseBlock scopedBlock = new TriggeredParseBlock<>(onEnter, onExit, delimsBlock); + + GroupingCommand command = new GroupingCommand<>(scopedBlock, term); + + /* + * Remove the wrapper layer from grouping-command on top of + * RepeatingParseBlock. + */ + return new TransformingInitialCommand<>(command, (tree) -> tree.getChild(0)); } } -- cgit v1.2.3