public static IntermediateNode visitStartNode(Node n,String inheritance,CompilerLogger logger)
	throws CopperException
	{
		if(!n.getParentNode().getNodeName().equals("copperspec"))
		{
			formalError(logger,n,"missing","copperspec","parent");
			return null;
		}
		
		int nontermNodeCount = 0;
		IntermediateNode ntName = null;
		LinkedList<String> layoutList = new LinkedList<String>();
		for(int i = 0;i < n.getChildNodes().getLength();i++)
		{
			if(n.getChildNodes().item(i).getNodeName().equals("nonterm"))
			{
				ntName = visitDOMNode(n.getChildNodes().item(i),null,logger);
				nontermNodeCount++;
			}
			else if(n.getChildNodes().item(i).getNodeName().equals("layout"))
			{
				LinkedList<String> layoutListPart = visitTermListNode(n.getChildNodes().item(i),null,logger);
				if(layoutListPart != null) layoutList.addAll(visitTermListNode(n.getChildNodes().item(i),null,logger));
			}
		}
		if(nontermNodeCount == 0)
		{
			formalError(logger,n,"missing","nonterm","child");
			return null;
		}
		else if(nontermNodeCount > 1)
		{
			formalError(logger,n,"has more than one","nonterm","child");
			return null;
		}
		
		if(layoutList != null) ((IntermediateSymbolNode) ntName).attributes.put("startLayout",Pair.cons(getPos(),(Object) layoutList));
		((IntermediateSymbolNode) ntName).attributes.put("isStart",Pair.cons(getPos(),(Object) true));
		return ntName;
	}