/*
 * generated by Xtext 2.11.0
 */
package org.eclipse.osbp.xtext.strategy.parser.antlr;

import com.google.inject.Inject;
import org.eclipse.osbp.xtext.strategy.parser.antlr.internal.InternalStrategyDSLParser;
import org.eclipse.osbp.xtext.strategy.services.StrategyDSLGrammarAccess;
import org.eclipse.xtext.parser.antlr.AbstractAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;

public class StrategyDSLParser extends AbstractAntlrParser {

	@Inject
	private StrategyDSLGrammarAccess grammarAccess;

	@Override
	protected void setInitialHiddenTokens(XtextTokenStream tokenStream) {
		tokenStream.setInitialHiddenTokens("RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT");
	}
	

	@Override
	protected InternalStrategyDSLParser createParser(XtextTokenStream stream) {
		return new InternalStrategyDSLParser(stream, getGrammarAccess());
	}

	@Override 
	protected String getDefaultRuleName() {
		return "StrategyModel";
	}

	public StrategyDSLGrammarAccess getGrammarAccess() {
		return this.grammarAccess;
	}

	public void setGrammarAccess(StrategyDSLGrammarAccess grammarAccess) {
		this.grammarAccess = grammarAccess;
	}
}
