@Override
	public Boolean visitExtensionGrammar(ExtensionGrammar bean)
	{
		currentGrammar = bean;
		boolean hasError = false;
		// Check that none of the grammar's required elements are missing.
		if(!bean.isComplete())
		{
			Set<String> whatIsMissing = bean.whatIsMissing();
			reportError(bean.getLocation(),"Extension grammar is missing the following required attributes: " + whatIsMissing);
			hasError = true;
		}
		else
		{
			hasError |= visitCompleteGrammarBean(bean,true);
			
			Hashtable<CopperElementName,CopperElementName> markingToLHS = new Hashtable<CopperElementName, CopperElementName>();
			
			for(CopperElementName p : bean.getBridgeProductions())
			{
				CopperElementName marking = bean.getBridgeProduction(p).getRhs().get(0).getName();
				if(markingToLHS.containsKey(marking) && !markingToLHS.equals(bean.getBridgeProduction(p).getLhs().getName()))
				{
					reportError(bean.getLocation(),"Marking terminal " + marking + " used on bridge productions with different left-hand sides");
				}
				else markingToLHS.put(marking, bean.getBridgeProduction(p).getLhs().getName());
			}
		}
		return hasError;
	}