From ecf43c0279310a8aa1a37a5f025df772f338104c Mon Sep 17 00:00:00 2001 From: Alberto Venturini Date: Sun, 11 Jul 2021 21:38:27 +0200 Subject: [PATCH] Some improvements --- .../albertoventurini/parsley/grammar/Grammar.java | 13 +++++++++++-- .../parsley/grammar/GrammarContext.java | 15 +++------------ .../parsley/grammar/ParseContext.java | 8 +------- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/Grammar.java b/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/Grammar.java index cbfe525..051fa6a 100644 --- a/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/Grammar.java +++ b/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/Grammar.java @@ -10,13 +10,22 @@ public abstract class Grammar { protected abstract Rule commentRule(); + /** + * Default whitespace predicate for grammars. + * @param c a character + * @return true if c is whitespace, false otherwise + */ protected boolean whitespace(final char c) { return Character.isWhitespace(c); } public Optional parse(final String text) { - final var ctx = new GrammarContext(text, commentRule(), this::whitespace); + final var ctx = new GrammarContext(text, commentRule()) { + @Override + protected boolean isWhitespace(final char c) { + return whitespace(c); + } + }; return startRule().apply(ctx); } - } diff --git a/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/GrammarContext.java b/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/GrammarContext.java index 63283c1..16e5220 100644 --- a/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/GrammarContext.java +++ b/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/GrammarContext.java @@ -2,20 +2,15 @@ package com.albertoventurini.parsley.grammar; import com.albertoventurini.parsley.grammar.rules.Rule; -import java.util.function.Predicate; - -public class GrammarContext extends ParseContext { +public abstract class GrammarContext extends ParseContext { private final Rule commentRule; - private final Predicate whitespacePredicate; private boolean inComment; GrammarContext( final String string, - final Rule commentRule, - final Predicate whitespacePredicate) { + final Rule commentRule) { super(string); this.commentRule = commentRule; - this.whitespacePredicate = whitespacePredicate; } public void advanceToNextToken() { @@ -63,9 +58,5 @@ public class GrammarContext extends ParseContext { } } - private boolean isWhitespace(final char c) { - return whitespacePredicate.test(c); -// return Character.isWhitespace(c) || c == '\n'; -// return c != '\n' && Character.isWhitespace(c); - } + protected abstract boolean isWhitespace(final char c); } diff --git a/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/ParseContext.java b/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/ParseContext.java index 82fdbd0..1ded164 100644 --- a/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/ParseContext.java +++ b/parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar/ParseContext.java @@ -1,7 +1,5 @@ package com.albertoventurini.parsley.grammar; -import java.util.Arrays; - class ParseContext { private final char[] charArr; private int cursor; @@ -51,17 +49,13 @@ class ParseContext { } public String substring(final int start, final int end) { - return String.valueOf(Arrays.copyOfRange(charArr, start, end)); + return new String(charArr, start, end-start); } public String substring(final int start) { return substring(start, cursor); } - public String substring() { - return String.valueOf(Arrays.copyOfRange(charArr, cursor, charArr.length)); - } - public boolean matches(final String s) { if (cursor + s.length() > charArr.length) { return false;