All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unlaxer.parser.elementary.AbstractTokenParser Maven / Gradle / Ivy

package org.unlaxer.parser.elementary;

import java.util.function.Consumer;

import org.unlaxer.CodePointLength;
import org.unlaxer.Name;
import org.unlaxer.Parsed;
import org.unlaxer.Token;
import org.unlaxer.TokenKind;
import org.unlaxer.context.ParseContext;
import org.unlaxer.parser.Parser;
import org.unlaxer.parser.combinator.NoneChildParser;


public abstract class AbstractTokenParser extends NoneChildParser {
	
	private static final long serialVersionUID = -1754533020946090748L;
	
	public AbstractTokenParser() {
		super();
	}

	public AbstractTokenParser(Name name) {
		super(name);
	}

	@Override
	public Parsed parse(ParseContext parseContext,TokenKind tokenKind,boolean invertMatch){

		
		Token token = getToken(parseContext,tokenKind,invertMatch);
		
		if(token.source.isPresent()){
			
			parseContext.getCurrent().addToken(token,tokenKind);
		}
		
		
		Consumer positionIncrement = tokenKind.isConsumed() ? 
				parseContext::consume : parseContext::matchOnly;
		
		positionIncrement.accept(token.source.codePointLength());
		return token.source.isPresent() ?
				new Parsed(token):
				Parsed.FAILED;
	}
	
	public abstract Token getToken(ParseContext parseContext,TokenKind tokenKind , boolean invertMatch);

	@Override
	public Parser getParser() {
		return this;
	}

	@Override
	public Parser createParser() {
		return this;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy