org.unlaxer.parser.combinator.ContainerParser Maven / Gradle / Ivy
package org.unlaxer.parser.combinator;
import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.stream.Collectors;
import org.unlaxer.CursorRange;
import org.unlaxer.Name;
import org.unlaxer.Parsed;
import org.unlaxer.RangedContent;
import org.unlaxer.Token;
import org.unlaxer.TokenKind;
import org.unlaxer.context.ParseContext;
public abstract class ContainerParser extends NoneChildParser {
private static final long serialVersionUID = 358784075416463053L;
public ContainerParser() {
super();
}
public ContainerParser(Name name) {
super(name);
}
@Override
public Parsed parse(ParseContext parseContext, TokenKind tokenKind, boolean invertMatch) {
Token token = Token.empty(
tokenKind,
parseContext.getCursor(TokenKind.consumed),
this);
parseContext.getCurrent().addToken(token);
return new Parsed(token);
}
public abstract T get();
public abstract RangedContent get(CursorRange position);
@SuppressWarnings("unchecked")
public static List> getRangedContents(Token rootToken ){
return getRangedContents(
rootToken,
(Class>) MethodHandles.lookup().lookupClass());
}
public static List> getRangedContents(Token rootToken ,
Class extends ContainerParser> targetContainerParserClass){
return rootToken.flatten().stream()
.filter(token-> targetContainerParserClass.isInstance(token.parser))
.map(token->targetContainerParserClass.cast(token.parser).get(token.getSource().cursorRange()))
.collect(Collectors.toList());
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy