@Override
	public Boolean visitTerminal(Terminal bean)
	throws RuntimeException
	{
		int beanId = symbolTable.get(bean);
		if(!metadataInitialized)
		{
			newSpec.terminals.set(beanId);
		}
		else
		{
			newSpec.owners[beanId] = symbolTable.get(currentGrammar);

			newSpec.t.setRegex(beanId,bean.getRegex());
			for(CopperElementReference tc : bean.getTerminalClasses())
			{
				newSpec.t.getTerminalClasses(beanId).set(dereference(tc));
			}
			if(bean.getPrefix() == null) newSpec.t.setTransparentPrefix(beanId,-1);
			else newSpec.t.setTransparentPrefix(beanId,dereference(bean.getPrefix()));
			if(bean.getOperatorClass() == null) newSpec.t.setOperatorClass(beanId,-1);
			else newSpec.t.setOperatorClass(beanId,dereference(bean.getOperatorClass()));
			if(bean.getOperatorPrecedence() == null) newSpec.t.setOperatorPrecedence(beanId,-1);
			else newSpec.t.setOperatorPrecedence(beanId,bean.getOperatorPrecedence());
			if(bean.getOperatorAssociativity() == null) newSpec.t.setOperatorAssociativity(beanId,OperatorAssociativity.NONE);
			else newSpec.t.setOperatorAssociativity(beanId,bean.getOperatorAssociativity());
			
			for(CopperElementReference ref : bean.getSubmitList())
			{
				newSpec.t.precedences.addEdge(beanId,dereference(ref));
			}
			for(CopperElementReference ref : bean.getDominateList())
			{
				newSpec.t.precedences.addEdge(dereference(ref),beanId);
			}
		}
		return false;
	}