diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-20 13:06:48 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-20 13:06:48 -0500 |
| commit | 066f03d698601584e053b4f56350a04eec03d88f (patch) | |
| tree | b586722c622ccada6569c109958bbad74abe2bff /dice-lang/src/bjc/dicelang/v2/Define.java | |
| parent | e03b3f477bcc160b72af4ab09cd8d12081017d2c (diff) | |
Error & dice handling
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/Define.java')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/Define.java | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/Define.java b/dice-lang/src/bjc/dicelang/v2/Define.java index 2ecbc69..3ee2f37 100644 --- a/dice-lang/src/bjc/dicelang/v2/Define.java +++ b/dice-lang/src/bjc/dicelang/v2/Define.java @@ -4,15 +4,21 @@ import bjc.utils.data.CircularIterator; import java.util.Iterator; import java.util.function.UnaryOperator; -import java.util.regex.Pattern; import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import static bjc.dicelang.v2.Errors.ErrorKey.*; public class Define implements UnaryOperator<String> { public static enum Type { LINE, TOKEN } + public static final int MAX_RECURS = 10; + public final int priority; + public final boolean inError; private boolean doRecur; private boolean subType; @@ -31,9 +37,26 @@ public class Define implements UnaryOperator<String> { subType = isSub; if(predicte != null) { - predicate = Pattern.compile(predicte); + try { + predicate = Pattern.compile(predicte); + } catch (PatternSyntaxException psex) { + Errors.inst.printError(EK_DFN_PREDSYN, psex.getMessage()); + inError = true; + + return; + } + } + + try { + searcher = Pattern.compile(searchr); + } catch (PatternSyntaxException psex) { + Errors.inst.printError(EK_DFN_SRCSYN, psex.getMessage()); + inError = true; + + return; } - searcher = Pattern.compile(searchr); + + inError = false; if(subType) { if(replacrs.iterator().hasNext()) { @@ -50,6 +73,8 @@ public class Define implements UnaryOperator<String> { } public String apply(String tok) { + if(inError) return tok; + if(predicate != null) { if(!predicate.matcher(tok).matches()) { return tok; @@ -59,6 +84,8 @@ public class Define implements UnaryOperator<String> { String strang = doPass(tok); if(doRecur) { + int recurCount = 0; + if(strang.equals(tok)) { return strang; } else { @@ -66,7 +93,14 @@ public class Define implements UnaryOperator<String> { do { strang = doPass(tok); - } while(!strang.equals(oldStrang)); + + recurCount += 1; + } while(!strang.equals(oldStrang) && recurCount < MAX_RECURS); + + if(recurCount >= MAX_RECURS) { + Errors.inst.printError(EK_DFN_RECUR, Integer.toString(MAX_RECURS), tok, strang); + return strang; + } } } @@ -81,16 +115,10 @@ public class Define implements UnaryOperator<String> { while(searcherMatcher.find()) { if(replacers == null) { - System.out.println("\t\tTRACE: running null replacer on substring " - + tok.substring(searcherMatcher.start(), searcherMatcher.end())); - searcherMatcher.appendReplacement(sb,""); } else { String replac = replacers.next(); - System.out.println("\t\tTRACE: running replacer " + replac + " on substring " - + tok.substring(searcherMatcher.start(), searcherMatcher.end())); - searcherMatcher.appendReplacement(sb, replacers.next()); } } |
