public int run_compilation(String filein, String fileout)
			throws IOException, RecognitionException {
		LineArrayListWriter writer = new LineArrayListWriter();
		ParsingEnvironment env = new ParsingEnvironment(writer);
		try {
			final SleighCompilePreprocessorDefinitionsAdapater definitionsAdapter =
				new SleighCompilePreprocessorDefinitionsAdapater(this);
			final File inputFile = new File(filein);
			FileResolutionResult result = FileUtilities.existsAndIsCaseDependent(inputFile);
			if (!result.isOk()) {
				throw new BailoutException("input file \"" + inputFile +
					"\" is not properly case dependent: " + result.getMessage());
			}
			SleighPreprocessor sp = new SleighPreprocessor(definitionsAdapter, inputFile);
			sp.process(writer);

			CharStream input = new ANTLRStringStream(writer.toString());
			SleighLexer lex = new SleighLexer(input);
			lex.setEnv(env);
			UnbufferedTokenStream tokens = new UnbufferedTokenStream(lex);
			SleighParser parser = new SleighParser(tokens);
			parser.setEnv(env);
			parser.setLexer(lex);
			SleighParser.spec_return parserRoot = parser.spec();
			/*ANTLRUtil.debugTree(root.getTree(),
				new PrintStream(new FileOutputStream("blargh.tree")));*/
			CommonTreeNodeStream nodes = new CommonTreeNodeStream(parserRoot.getTree());
			nodes.setTokenStream(tokens);
			// ANTLRUtil.debugNodeStream(nodes, System.out);
			SleighCompiler walker = new SleighCompiler(nodes);

			int parseres = -1;
			try {
				parseres = walker.root(env, this); // Try to parse
			}
			catch (SleighError e) {
				reportError(e.location, e.getMessage());
			}
			if (parseres == 0) {
				process(); // Do all the post-processing
			}
			if ((parseres == 0) && (numErrors() == 0)) {
				// If no errors
				ResourceFile resourceFile = new ResourceFile(fileout);
				if (debugoutput) {
					// If the debug output format was requested, use XML encoder
					XmlEncode encoder = new XmlEncode();
					encode(encoder);
					OutputStream stream = resourceFile.getOutputStream();
					encoder.writeTo(stream);
					stream.close();
				}
				else {
					// Use the standard .sla format encoder
					PackedEncode encoder = SlaFormat.buildEncoder(resourceFile);
					encode(encoder);		// Dump compiler output
					encoder.getOutputStream().close();
				}
			}
			else {
				Msg.error(SleighCompile.class, "No output produced");
				return 2;
			}
		}
		catch (BailoutException e) {
			Msg.error(SleighCompile.class, "Unrecoverable error(s), halting compilation", e);
			return 3;
		}
		catch (NullPointerException e) {
			Msg.error(SleighCompile.class, "Unrecoverable error(s), halting compilation", e);
			return 4;
		}
		catch (PreprocessorException e) {
			Msg.error(SleighCompile.class, e.getMessage());
			Msg.error(SleighCompile.class, "Errors during preprocessing, halting compilation");
			return 5;
		}
		return 0;
	}
Sets whether or not to print out warning info about
{@link Constructor}s which reference varnodes in the
unique space larger than {@link SleighBase#MAX_UNIQUE_SIZE}.
@param val whether to print info about contructors using large varnodes
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slgh_compile/SleighCompile.java