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

import com.google.inject.Inject;
import org.eclipse.osbp.xtext.menu.parser.antlr.internal.InternalMenuDslParser;
import org.eclipse.osbp.xtext.menu.services.MenuDslGrammarAccess;
import org.eclipse.xtext.parser.antlr.AbstractAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;

public class MenuDslParser extends AbstractAntlrParser {

	@Inject
	private MenuDslGrammarAccess grammarAccess;

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

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

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

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

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