/*
* Svjatoslav Commons - shared library of common functionality.
- * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * Copyright ©2012-2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 3 of the GNU Lesser General Public License
import java.util.List;
import java.util.Stack;
+import static eu.svjatoslav.commons.string.tokenizer.Terminator.TerminationStrategy.DROP;
+
public class Tokenizer {
final Stack<Integer> tokenIndexes = new Stack<>();
private final List<Terminator> terminators = new ArrayList<>();
- private final String source;
+ private String source;
private int currentIndex = 0;
public Tokenizer(final String source) {
this.source = source;
}
- public void addTerminator(final String startSequence,
- final boolean ignoreTerminator) {
- terminators.add(new Terminator(startSequence, ignoreTerminator));
+ public Tokenizer(){}
+
+ public Tokenizer setSource(String source){
+ this.source = source;
+ currentIndex = 0;
+ return this;
+ }
+
+ public Tokenizer addTerminator(final String startSequence,
+ final Terminator.TerminationStrategy terminationStrategy) {
+ terminators.add(new Terminator(startSequence, terminationStrategy));
+ return this;
}
- public void addTerminator(final String startSequence,
- final String endSequence, final boolean ignoreTerminator) {
- terminators.add(new Terminator(startSequence, endSequence,
- ignoreTerminator));
+ public Tokenizer addTerminator(final String startSequence,
+ final String endSequence, final Terminator.TerminationStrategy terminationStrategy) {
+ terminators.add(new Terminator(startSequence, endSequence, terminationStrategy));
+ return this;
}
public void expectNextToken(final String value)
for (final Terminator terminator : terminators)
if (sequenceMatches(terminator.startSequence))
- if (terminator.ignoreTerminator) {
+ if (terminator.termination == DROP) {
currentIndex += terminator.startSequence.length();
if (terminator.endSequence != null)
}
- public boolean probeNextToken(final String token) {
+ public boolean consumeIfNextToken(final String token) {
if (token.equals(getNextToken().token))
return true;