
in.ashwanthkumar.utils.parser.Parsers Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of my-java-utils Show documentation
Show all versions of my-java-utils Show documentation
My personal set of utils that I take along with my java projects.
The newest version!
package in.ashwanthkumar.utils.parser;
import in.ashwanthkumar.utils.collections.Lists;
import in.ashwanthkumar.utils.func.Function;
import in.ashwanthkumar.utils.lang.StringUtils;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static in.ashwanthkumar.utils.lang.StringUtils.size;
public class Parsers {
public static Parser Literal(final String literal) {
return new Parser() {
@Override
public ParserResult parse(String input) {
if (StringUtils.startsWith(input, literal)) {
String substring = input.substring(size(literal));
return Success.of(literal, substring);
} else {
int size = Math.min(size(literal), size(input));
return Failure.of(String.format("expected '%s' but found '%s'", literal, input.substring(0, size)), input);
}
}
};
}
public static Parser Character(final char input) {
return Literal(String.valueOf(input));
}
public static Parser Integer(final Integer num) {
return Literal(String.valueOf(num)).map(new Function() {
@Override
public Integer apply(String input) {
return Integer.valueOf(input);
}
});
}
public static Parser Double(final Double num) {
return Literal(String.valueOf(num)).map(new Function() {
@Override
public Double apply(String input) {
return Double.valueOf(input);
}
});
}
public static Parser Regex(final Pattern regex) {
return new Parser() {
@Override
public ParserResult parse(String input) {
Matcher matcher = regex.matcher(input);
if (matcher.find()) {
return Success.of(matcher.group(), input.substring(matcher.end()));
} else {
return Failure.of(regex.pattern() + " did not match on the " + input, input);
}
}
};
}
/**
* Applies the parser repeatedly on the input
*/
public static Parser> Sequence(final Parser parser) {
return new Parser>() {
@Override
public ParserResult> parse(String input) {
List results = Lists.Nil();
ParserResult result = parser.parse(input);
while (result.successful()) {
results.add(result.get());
result = parser.parse(result.getRemainingInput());
}
return Success.of(results, result.getRemainingInput());
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy