private static XpidlFile CreateXpidlFile(IEnumerable<SyntaxNode> rootSyntaxNodes)
		{
			if (rootSyntaxNodes == null)
			{
				throw new ArgumentNullException("rootSyntaxNodes");
			}

			var xpidlFile = new XpidlFile();
			foreach (SyntaxNode syntaxNode in rootSyntaxNodes)
			{
				BuildXpidlFile(xpidlFile, syntaxNode);
			}
			return xpidlFile;
		}
		private static void BuildXpidlFile(XpidlFile xpidlFile, SyntaxNode syntaxNode)
		{
			if (syntaxNode is CommentSyntaxNode)
			{
				var commentSyntaxNode = (CommentSyntaxNode) syntaxNode;
				if (commentSyntaxNode.IsInlineCHeader)
				{
					XpidlInlineCHeader xpidlInlineCHeader = CreateXpidlInlineCHeader(commentSyntaxNode);
					xpidlFile.AddNode(xpidlInlineCHeader);
				}
				else
				{
					XpidlComment xpidlComment = CreateXpidlComment(commentSyntaxNode);
					xpidlFile.AddNode(xpidlComment);
				}
			}
			else if (syntaxNode is ComplexSyntaxNode)
			{
				var complexSyntaxNode = (ComplexSyntaxNode) syntaxNode;
				switch ((RuleConstants) complexSyntaxNode.Rule.Index)
				{
					case RuleConstants.Xpidl:
					case RuleConstants.XpidlItems1:
					case RuleConstants.XpidlItems2:
					case RuleConstants.XpidlItem1:
					case RuleConstants.XpidlItem2:
					case RuleConstants.XpidlItem3:
					case RuleConstants.XpidlItem4:
					case RuleConstants.XpidlItem5:
						foreach (SyntaxNode node in complexSyntaxNode)
						{
							BuildXpidlFile(xpidlFile, node);
						}
						break;

					case RuleConstants.XpidlTypeDef:
						XpidlTypeDef xpidlTypeDef = CreateXpidlTypeDef(complexSyntaxNode);
						xpidlFile.AddNode(xpidlTypeDef);
						break;

					case RuleConstants.XpidlInclude:
						XpidlInclude xpidlInclude = CreateXpidlInclude(complexSyntaxNode);
						xpidlFile.AddNode(xpidlInclude);
						break;

					case RuleConstants.XpidlForwardDeclaration:
						XpidlForwardDeclaration xpidlForwardDeclaration = CreateXpidlForwardDeclaration(complexSyntaxNode);
						xpidlFile.AddNode(xpidlForwardDeclaration);
						break;

					case RuleConstants.XpidlNativeType1:
					case RuleConstants.XpidlNativeType2:
						XpidlNativeType xpidlNativeType = CreateXpidlNativeType(complexSyntaxNode);
						xpidlFile.AddNode(xpidlNativeType);
						break;

					case RuleConstants.XpidlInterface1:
					case RuleConstants.XpidlInterface2:
					case RuleConstants.XpidlInterface3:
					case RuleConstants.XpidlInterface4:
						XpidlInterface xpidlInterface = CreateXpidlInterface(complexSyntaxNode);
						xpidlFile.AddNode(xpidlInterface);
						break;

					default:
						throw new ArgumentException(mc_InvalidSyntaxNode, "syntaxNode");
				}
			}
			else // SimpleSyntaxNode
			{
				throw new ArgumentException(mc_InvalidSyntaxNode, "syntaxNode");
			}
		}