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

org.jnario.spec.parser.CustomSpecParser Maven / Gradle / Ivy

The newest version!
package org.jnario.spec.parser;

import java.io.Reader;

import org.antlr.runtime.CharStream;
import org.antlr.runtime.TokenSource;
import org.eclipse.xtend.core.parser.ReaderCharStream;
import org.eclipse.xtend.core.parser.antlr.internal.FlexerFactory;
import org.eclipse.xtext.ParserRule;
import org.eclipse.xtext.RuleCall;
import org.eclipse.xtext.nodemodel.impl.NodeModelBuilder;
import org.eclipse.xtext.parser.IParseResult;
import org.jnario.spec.parser.antlr.SpecParser;

import com.google.inject.Inject;

public class CustomSpecParser extends SpecParser {


	@Inject
	private FlexerFactory flexerFactory;
	
	@Override
	protected TokenSource createLexer(CharStream stream) {
		if (stream instanceof ReaderCharStream) {
			Reader reader = ((ReaderCharStream) stream).getReader();
			return flexerFactory.createTokenSource(reader);
		}
		throw new IllegalArgumentException(stream.getClass().getName());
	}
	
	@Override
	public IParseResult parse(ParserRule rule, Reader reader) {
		IParseResult parseResult = parse(rule.getName(), new ReaderCharStream(reader));
		return parseResult;
	}
	
	@Override
	public IParseResult doParse(Reader reader) {
		return parse(getDefaultRuleName(), new ReaderCharStream(reader));
	}
	
	@Override
	public IParseResult parse(RuleCall ruleCall, Reader reader, int initialLookAhead) {
		NodeModelBuilder builder = createNodeModelBuilder();
		builder.setForcedFirstGrammarElement(ruleCall);
		IParseResult parseResult = doParse(ruleCall.getRule().getName(), new ReaderCharStream(reader), builder, initialLookAhead);
		return parseResult;
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy