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;
}
}