Some improvements
This commit is contained in:
parent
90f84950d2
commit
ecf43c0279
3 changed files with 15 additions and 21 deletions
parsley-grammar/src/main/java/com/albertoventurini/parsley/grammar
|
@ -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<ParseTree> 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<Character> whitespacePredicate;
|
||||
private boolean inComment;
|
||||
|
||||
GrammarContext(
|
||||
final String string,
|
||||
final Rule commentRule,
|
||||
final Predicate<Character> 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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue