@Override
	public ParserBean parseSpec(SpecParserParameters args)
	throws IOException,UnsupportedOperationException
	{
		ParserBean spec;
		CompilerLogger logger;
		logger = AuxiliaryMethods.getOrMakeLogger(args);
		ArrayList< Pair<String,Object> > inputs = args.getInputs(); 

		ArrayList< Pair<String,Reader> > files = new ArrayList< Pair<String,Reader> >(); 

		boolean failed = false;
		
		for(Pair<String,Object> i : inputs)
		{
			Reader second = null;
			if(i.second() instanceof Reader) second = (Reader) i.second();
			else
			{
				try
				{
					second = new FileReader(i.second().toString());
				}
				catch(FileNotFoundException ex)
				{
					logger.log(new InterfaceErrorMessage("Grammar file not found: '" + i.second() + "'"));
					failed = true;
				}
			}
			files.add(Pair.cons(i.first(),second));
		}
		if(failed) return null;

		try
		{
			spec = new XMLSkinParser(files,logger).parse();
		}
		catch(CopperException ex)
		{
			if(logger.isLoggable(CompilerLevel.VERY_VERBOSE)) ex.printStackTrace(System.err);
			return null;
		}
		if(args.getPackageName() != null) spec.setPackageDecl(args.getPackageName());
		if(args.getParserName() != null && !args.getParserName().equals("")) spec.setClassName(args.getParserName());
		
		return spec;
	}