@Override
	public Boolean visitExtensionGrammar(ExtensionGrammar bean)
	throws RuntimeException
	{
		boolean hasError = false;
		int beanId = symbolTable.get(bean);
		currentGrammar = bean;
		if(!metadataInitialized)
		{
			newSpec.grammars.set(beanId);
		}
		else
		{
			if(bean.getGrammarLayout() != null)
			{
				for(CopperElementReference ref : bean.getGrammarLayout())
				{
					newSpec.g.getLayouts(beanId).set(dereference(ref));
				}
			}
		}
		for(CopperElementName n : bean.getGrammarElements())
		{
			hasError |= bean.getGrammarElement(n).acceptVisitor(this);
		}
		for(CopperElementName n : bean.getMarkingTerminals())
		{
			newSpec.bridgeConstructs.set(symbolTable.get(bean.getMarkingTerminal(n)));
		}
		for(CopperElementName n : bean.getBridgeProductions())
		{
			newSpec.bridgeConstructs.set(symbolTable.get(bean.getBridgeProduction(n)));
		}
		currentGrammar = null;
		return hasError;			
	}