From 0b79409b36e0d14ce9c772a728c534dfb9c6f3be Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Wed, 5 Apr 2017 10:22:24 -0400 Subject: Tweak sample --- .../examples/java/bjc/pratt/examples/PrattParserTest.java | 12 +++++++++++- JPratt/src/examples/java/bjc/pratt/examples/Tokenizer.java | 4 +++- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'JPratt') diff --git a/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java b/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java index 4a9ae56..afb3e40 100644 --- a/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java +++ b/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java @@ -51,6 +51,7 @@ public class PrattParserTest { ops.addAll(Arrays.asList("||", "&&")); ops.addAll(Arrays.asList("<=", ">=")); + ops.addAll(Arrays.asList("±")); ops.addAll(Arrays.asList(".", ",", ";", ":")); ops.addAll(Arrays.asList("=", "<", ">")); ops.addAll(Arrays.asList("+", "-", "*", "/")); @@ -77,6 +78,7 @@ public class PrattParserTest { split.addCompoundDelim("||", "&&"); split.addCompoundDelim("<=", ">="); + split.addSimpleDelim("±"); split.addSimpleDelim(".", ",", ";", ":"); split.addSimpleDelim("=", "<", ">"); split.addSimpleDelim("+", "-", "*", "/"); @@ -210,6 +212,7 @@ public class PrattParserTest { NonInitialCommand addSub = infixLeft(20); parser.addNonInitialCommand("+", addSub); parser.addNonInitialCommand("-", addSub); + parser.addNonInitialCommand("±", addSub); NonInitialCommand mulDiv = infixLeft(30); parser.addNonInitialCommand("*", mulDiv); @@ -221,6 +224,9 @@ public class PrattParserTest { parser.addNonInitialCommand("^", expon); parser.addNonInitialCommand("root", expon); + NonInitialCommand superexpon = postfix(50); + parser.addNonInitialCommand("(superexp)", superexpon); + parser.addNonInitialCommand(".", infixLeft(60)); parser.addNonInitialCommand("[", postCircumfix(60, 0, "]", litToken("idx"))); @@ -240,6 +246,10 @@ public class PrattParserTest { parser.addInitialCommand("-", unary(30)); + InitialCommand root = unary(50); + parser.addInitialCommand("sqrt", root); + parser.addInitialCommand("cbrt", root); + InitialCommand leaf = leaf(); parser.addInitialCommand("(literal)", leaf); parser.addInitialCommand("(vref)", leaf); @@ -250,4 +260,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> { 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 +} -- cgit v1.2.3 From ee8ab3464bdfe423c8b09b3f9a403899127f1078 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Thu, 6 Apr 2017 05:46:27 -0400 Subject: Add unicode superscripts --- JPratt/.gitignore | 1 + JPratt/input.txt | 1 + JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java | 9 +++++++-- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 JPratt/input.txt (limited to 'JPratt') diff --git a/JPratt/.gitignore b/JPratt/.gitignore index 09e3bc9..3f4e69e 100644 --- a/JPratt/.gitignore +++ b/JPratt/.gitignore @@ -1,2 +1,3 @@ /bin/ /target/ +HTML/ diff --git a/JPratt/input.txt b/JPratt/input.txt new file mode 100644 index 0000000..f51ea5e --- /dev/null +++ b/JPratt/input.txt @@ -0,0 +1 @@ +x := -b ± (sqrt b^2 - 4*a*c) / 2*a diff --git a/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java b/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java index afb3e40..7e94326 100644 --- a/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java +++ b/JPratt/src/examples/java/bjc/pratt/examples/PrattParserTest.java @@ -46,7 +46,9 @@ public class PrattParserTest { */ Set ops = new LinkedHashSet<>(); - ops.addAll(Arrays.asList("->")); + ops.add("!!!"); + + ops.addAll(Arrays.asList("->", "=>")); ops.add(":="); ops.addAll(Arrays.asList("||", "&&")); ops.addAll(Arrays.asList("<=", ">=")); @@ -73,7 +75,7 @@ public class PrattParserTest { TwoLevelSplitter split = new TwoLevelSplitter(); - split.addCompoundDelim("->"); + split.addCompoundDelim("->", "=>"); split.addCompoundDelim(":="); split.addCompoundDelim("||", "&&"); split.addCompoundDelim("<=", ">="); @@ -84,6 +86,7 @@ public class PrattParserTest { split.addSimpleDelim("+", "-", "*", "/"); split.addSimpleDelim("^", "!"); + split.addSimpleMulti("!"); split.addSimpleMulti("\\(", "\\)"); split.addSimpleMulti("\\[", "\\]"); split.addSimpleMulti("\\{", "\\}"); @@ -186,6 +189,8 @@ public class PrattParserTest { PrattParser parser = new PrattParser<>(); + parser.addNonInitialCommand("!!!", postfix(0)); + parser.addNonInitialCommand(":", infixNon(3)); parser.addNonInitialCommand("if", ternary(5, 0, "else", litToken("cond"), false)); -- cgit v1.2.3