summaryrefslogtreecommitdiff
path: root/JPratt/src/examples
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2017-04-11 23:12:34 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2017-04-11 23:12:34 -0400
commit6b881e8833596d669fdee9525e064aea0c8946dc (patch)
treef631a0fbb3c10e325ba17cc80343eb47577acc90 /JPratt/src/examples
parent2a7f4dd88c0b1095748252eb2fe48c8c52a840c7 (diff)
Add exceptions to sample lang.
Diffstat (limited to 'JPratt/src/examples')
-rw-r--r--JPratt/src/examples/java/bjc/pratt/examples/lang/PrattParserTest.java22
-rw-r--r--JPratt/src/examples/java/bjc/pratt/examples/lang/Tokenizer.java26
2 files changed, 27 insertions, 21 deletions
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 20450a1..3686a84 100644
--- a/JPratt/src/examples/java/bjc/pratt/examples/lang/PrattParserTest.java
+++ b/JPratt/src/examples/java/bjc/pratt/examples/lang/PrattParserTest.java
@@ -33,10 +33,12 @@ import bjc.pratt.tokens.StringToken;
import bjc.pratt.tokens.StringTokenStream;
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;
import bjc.utils.parserutils.splitter.TokenSplitter;
/**
@@ -83,6 +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.add("var");
final ChainTokenSplitter nsplit = new ChainTokenSplitter();
@@ -115,6 +118,8 @@ public class PrattParserTest {
excluder.addLiteralExclusions(reserved.toArray(new String[0]));
+ final FilteredTokenSplitter filtered = new FilteredTokenSplitter(excluder, (tok) -> !tok.equals(""));
+
final PrattParser<String, String, TestContext> parser = createParser();
final TestContext ctx = new TestContext();
@@ -125,7 +130,7 @@ public class PrattParserTest {
String ln = scn.nextLine();
while (!ln.trim().equals("")) {
- final Iterator<Token<String, String>> tokens = preprocessInput(ops, excluder, ln, reserved,
+ final Iterator<Token<String, String>> tokens = preprocessInput(ops, filtered, ln, reserved,
ctx);
try {
@@ -165,6 +170,8 @@ public class PrattParserTest {
final List<String> splitTokens = new LinkedList<>();
for (final String raw : rawTokens) {
+ if (raw.equals("")) continue;
+
boolean doSplit = false;
for (final String op : ops) {
@@ -175,9 +182,10 @@ public class PrattParserTest {
}
if (doSplit) {
- final String[] strangs = split.split(raw).toArray(new String[0]);
+ IList<String> splitStrangs = split.split(raw);
+ splitStrangs.removeMatching("");
- splitTokens.addAll(Arrays.asList(strangs));
+ splitStrangs.forEach(splitTokens::add);
} else {
splitTokens.add(raw);
}
@@ -217,7 +225,11 @@ public class PrattParserTest {
parser.addNonInitialCommand(":", infixNon(3));
- final NonInitialCommand<String, String, TestContext> ifElse = ternary(5, 0, "else", litToken("cond"),
+ parser.addNonInitialCommand("finally", infixLeft(4));
+
+ parser.addNonInitialCommand("catch", infixLeft(5));
+
+ final NonInitialCommand<String, String, TestContext> ifElse = ternary(6, 0, "else", litToken("cond"),
false);
parser.addNonInitialCommand("if", ifElse);
@@ -283,6 +295,8 @@ public class PrattParserTest {
idfun, idfun, idfun, false);
parser.addInitialCommand("{", jsonLiteral);
+ parser.addInitialCommand("try", unary(3));
+
parser.addInitialCommand("case", unary(5));
parser.addInitialCommand("-", unary(30));
diff --git a/JPratt/src/examples/java/bjc/pratt/examples/lang/Tokenizer.java b/JPratt/src/examples/java/bjc/pratt/examples/lang/Tokenizer.java
index ea162be..800a4ec 100644
--- a/JPratt/src/examples/java/bjc/pratt/examples/lang/Tokenizer.java
+++ b/JPratt/src/examples/java/bjc/pratt/examples/lang/Tokenizer.java
@@ -25,22 +25,14 @@ final class Tokenizer implements Function<String, Token<String, String>> {
public Token<String, String> apply(final String strang) {
if (ops.contains(strang) || reserved.contains(strang))
return litToken(strang);
- else if (strang.matches("(?:[\\u00B2\\u00B3\\u00B9\\u2070]|[\\u2074-\\u2079])+")) /*
- * This
- * regular
- * expression
- * matches
- * series
- * of
- * unicode
- * super
- * -
- * scripts
- * 1
- * -
- * 9.
- */
- return new StringToken("(superexp)", strang);
- else return new StringToken("(literal)", strang);
+ else if (strang.matches("(?:[\\u00B2\\u00B3\\u00B9\\u2070]|[\\u2074-\\u2079])+")) {
+ /*
+ * This regular expression matches series of unicode
+ * super - scripts 1 - 9.
+ */
+ String subscript = strang;
+
+ return new StringToken("(superexp)", subscript);
+ } else return new StringToken("(literal)", strang);
}
}