summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/examples/java/bjc/utils
diff options
context:
space:
mode:
authorstudent <student@192.168.1.186>2017-03-24 11:51:10 -0400
committerstudent <student@192.168.1.186>2017-03-24 11:51:10 -0400
commitb168fd38be0bb344d268bfd11d14df36bb9fd4f2 (patch)
treeeed830c512ffa54b7afc4972cba67c2c818b8740 /BJC-Utils2/src/examples/java/bjc/utils
parent33918524d7faab0146a0a92c13eaaef46cdbea8a (diff)
Update Pratt parser
Diffstat (limited to 'BJC-Utils2/src/examples/java/bjc/utils')
-rw-r--r--BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/PrattParserTest.java42
1 files changed, 29 insertions, 13 deletions
diff --git a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/PrattParserTest.java b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/PrattParserTest.java
index 8634641..b4d40b2 100644
--- a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/PrattParserTest.java
+++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/PrattParserTest.java
@@ -32,7 +32,7 @@ public class PrattParserTest {
* Main method.
*
* @param args
- * Unused CLI arguments.
+ * Unused CLI arguments.
*/
public static void main(String[] args) {
/*
@@ -41,8 +41,10 @@ public class PrattParserTest {
Set<String> ops = new LinkedHashSet<>();
ops.add(":=");
+ ops.addAll(Arrays.asList("||", "&&"));
ops.addAll(Arrays.asList("<=", ">="));
+ ops.add(".");
ops.addAll(Arrays.asList("=", "<", ">"));
ops.addAll(Arrays.asList("+", "-", "*", "/"));
ops.addAll(Arrays.asList("^", "!"));
@@ -53,9 +55,9 @@ public class PrattParserTest {
* Reserved words that represent themselves, not literals.
*/
Set<String> reserved = new LinkedHashSet<>();
- reserved.add("if");
- reserved.add("else");
-
+ reserved.addAll(Arrays.asList("if", "then", "else"));
+ reserved.addAll(Arrays.asList("and", "or"));
+
TokenSplitter split = new TokenSplitter();
ops.forEach(split::addDelimiter);
@@ -81,7 +83,7 @@ public class PrattParserTest {
*/
tokenStream.next();
- ITree<Token<String, String>> tree = parser.parseExpression(0, tokenStream, null);
+ ITree<Token<String, String>> tree = parser.parseExpression(0, tokenStream, null, true);
if (!tokenStream.current().getKey().equals("(end)")) {
System.out.println("Multipe expressions on line");
@@ -129,8 +131,8 @@ public class PrattParserTest {
/*
* Set of which relational operators chain with each other.
*/
- HashSet<String> chainSet = new HashSet<>();
- chainSet.addAll(Arrays.asList("=", "<", ">", "<=", ">="));
+ HashSet<String> relChain = new HashSet<>();
+ relChain.addAll(Arrays.asList("=", "<", ">", "<=", ">="));
/*
* Token for marking chains.
@@ -143,12 +145,18 @@ public class PrattParserTest {
parser.addNonInitialCommand(":=", infixNon(10));
- parser.addNonInitialCommand("=", chain(10, chainSet, chainToken));
- parser.addNonInitialCommand("<", chain(10, chainSet, chainToken));
- parser.addNonInitialCommand(">", chain(10, chainSet, chainToken));
- parser.addNonInitialCommand("<=", chain(10, chainSet, chainToken));
- parser.addNonInitialCommand(">=", chain(10, chainSet, chainToken));
-
+ parser.addNonInitialCommand("and", infixLeft(13));
+ parser.addNonInitialCommand("or", infixLeft(13));
+
+ parser.addNonInitialCommand("=", chain(15, relChain, chainToken));
+ parser.addNonInitialCommand("<", chain(15, relChain, chainToken));
+ parser.addNonInitialCommand(">", chain(15, relChain, chainToken));
+ parser.addNonInitialCommand("<=", chain(15, relChain, chainToken));
+ parser.addNonInitialCommand(">=", chain(15, relChain, chainToken));
+
+ parser.addNonInitialCommand("&&", infixRight(17));
+ parser.addNonInitialCommand("||", infixRight(17));
+
parser.addNonInitialCommand("+", infixLeft(20));
parser.addNonInitialCommand("-", infixLeft(20));
@@ -159,10 +167,18 @@ public class PrattParserTest {
parser.addNonInitialCommand("^", infixRight(50));
+ parser.addNonInitialCommand(".", infixLeft(60));
+
parser.addNonInitialCommand("[", postCircumfix(60, 0, "]", new StringToken("idx", "idx")));
+ parser.addInitialCommand("if", preTernary(0, 0, 0, "then", "else", new StringToken("ifelse", "ifelse")));
+
parser.addInitialCommand("(", grouping(0, ")", new StringToken("()", "()")));
+
+ parser.addInitialCommand("-", unary(30));
+
parser.addInitialCommand("(literal)", leaf());
+
return parser;
}
}