summaryrefslogtreecommitdiff
path: root/JPratt/src/examples/java/bjc/pratt
diff options
context:
space:
mode:
authorbjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu>2017-04-10 10:34:25 -0400
committerbjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu>2017-04-10 10:34:25 -0400
commitc99e1e03069b9d145d7ba3089351f5a1e53f582a (patch)
tree1694866550ec45bf8c23fc78c588ce8b855eabc2 /JPratt/src/examples/java/bjc/pratt
parent497a638ac9b907473835eb2ec985c2cac7d4de4e (diff)
parentee8ab3464bdfe423c8b09b3f9a403899127f1078 (diff)
Merge branch 'master' of https://github.com/bculkin2442/JPratt.git
Conflicts: JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java
Diffstat (limited to 'JPratt/src/examples/java/bjc/pratt')
-rw-r--r--JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java29
-rw-r--r--JPratt/src/examples/java/bjc/pratt/examples/Tokenizer.java4
2 files changed, 25 insertions, 8 deletions
diff --git a/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java b/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java
index 6e7170b..ebf0cc8 100644
--- a/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java
+++ b/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java
@@ -48,11 +48,14 @@ public class PrattParserTest {
*/
Set<String> ops = new LinkedHashSet<>();
- ops.addAll(Arrays.asList("->"));
+ ops.add("!!!");
+
+ ops.addAll(Arrays.asList("->", "=>"));
ops.add(":=");
ops.addAll(Arrays.asList("||", "&&"));
ops.addAll(Arrays.asList("<=", ">="));
+ ops.addAll(Arrays.asList("±"));
ops.addAll(Arrays.asList(".", ",", ";", ":"));
ops.addAll(Arrays.asList("=", "<", ">"));
ops.addAll(Arrays.asList("+", "-", "*", "/"));
@@ -82,15 +85,17 @@ public class PrattParserTest {
hi.addSimpleDelimiters("||", "&&");
hi.addSimpleDelimiters("<=", ">=");
+ lo.addSimpleDelimiters("±");
lo.addSimpleDelimiters(".", ",", ";", ":");
lo.addSimpleDelimiters("=", "<", ">");
lo.addSimpleDelimiters("+", "-", "*", "/");
- lo.addSimpleDelimiters("^", "!");
-
- lo.addMultiDelimiters("\\(", "\\)");
- lo.addMultiDelimiters("\\[", "\\]");
- lo.addMultiDelimiters("\\{", "\\}");
+ lo.addSimpleDelimiters("^");
+ lo.addMultiDelimiters("!");
+ lo.addMultiDelimiters("(", ")");
+ lo.addMultiDelimiters("[", "]");
+ lo.addMultiDelimiters("{", "}");
+
hi.compile();
lo.compile();
@@ -196,6 +201,8 @@ public class PrattParserTest {
PrattParser<String, String, TestContext> parser = new PrattParser<>();
+ parser.addNonInitialCommand("!!!", postfix(0));
+
parser.addNonInitialCommand(":", infixNon(3));
parser.addNonInitialCommand("if", ternary(5, 0, "else", litToken("cond"), false));
@@ -222,6 +229,7 @@ public class PrattParserTest {
NonInitialCommand<String, String, TestContext> addSub = infixLeft(20);
parser.addNonInitialCommand("+", addSub);
parser.addNonInitialCommand("-", addSub);
+ parser.addNonInitialCommand("±", addSub);
NonInitialCommand<String, String, TestContext> mulDiv = infixLeft(30);
parser.addNonInitialCommand("*", mulDiv);
@@ -233,6 +241,9 @@ public class PrattParserTest {
parser.addNonInitialCommand("^", expon);
parser.addNonInitialCommand("root", expon);
+ NonInitialCommand<String, String, TestContext> superexpon = postfix(50);
+ parser.addNonInitialCommand("(superexp)", superexpon);
+
parser.addNonInitialCommand(".", infixLeft(60));
parser.addNonInitialCommand("[", postCircumfix(60, 0, "]", litToken("idx")));
@@ -252,6 +263,10 @@ public class PrattParserTest {
parser.addInitialCommand("-", unary(30));
+ InitialCommand<String, String, TestContext> root = unary(50);
+ parser.addInitialCommand("sqrt", root);
+ parser.addInitialCommand("cbrt", root);
+
InitialCommand<String, String, TestContext> leaf = leaf();
parser.addInitialCommand("(literal)", leaf);
parser.addInitialCommand("(vref)", leaf);
@@ -262,4 +277,4 @@ public class PrattParserTest {
return parser;
}
-} \ No newline at end of file
+}
diff --git a/JPratt/src/examples/java/bjc/pratt/examples/Tokenizer.java b/JPratt/src/examples/java/bjc/pratt/examples/Tokenizer.java
index 563b578..f6ecf98 100644
--- a/JPratt/src/examples/java/bjc/pratt/examples/Tokenizer.java
+++ b/JPratt/src/examples/java/bjc/pratt/examples/Tokenizer.java
@@ -25,8 +25,10 @@ final class Tokenizer implements Function<String, Token<String, String>> {
return litToken(strang);
} else if (ctx.scopes.top().containsKey(strang)) {
return new StringToken("(vref)", strang);
+ } else if(strang.matches("(?:[\\u00B2\\u00B3\\u00B9\\u2070]|[\\u2074-\\u2079])+")) {
+ return new StringToken("(superexp)", strang);
} else {
return new StringToken("(literal)", strang);
}
}
-} \ No newline at end of file
+}