public static MineDefineExecutable Compile(Stream input) { Console.WriteLine("Lexing"); var tokens = new MineDefineLexer(input).Lex(); Console.WriteLine("\nTokens:"); Console.WriteLine(string.Join(", ", new MineDefineLexer(input).Lex())); Console.WriteLine("\nParsing"); var ast = new MineDefineParser(tokens).Parse(); Console.WriteLine("\nAST:"); Console.WriteLine(ast.ToString()); Console.WriteLine("\nLowering"); ast = new StandaloneTransformSugar().Transform(ast); Console.WriteLine("Planning"); var layout = new MineDefineLayout().Layout(ast); return new MineDefineExecutable(ast,layout); }
public void ItConvertsNoBlockTransformsToRestOfParent() { var ast = new MineDefineAST(new IStatement[] { new BuildByIdentifier(BuildShape.Box, new Dimension(), new Location(), "wood"), new OriginTransformStatement(new AbsoluteTransformInstructions(AbsoluteOriginTransform.Down, 1), null), new BuildByIdentifier(BuildShape.Box, new Dimension(), new Location(), "stone"), }); var sugar = new StandaloneTransformSugar(); var done = sugar.Transform(ast); Assert.AreEqual(2, done.Statements.Count); Assert.IsInstanceOf<BuildByIdentifier>(done.Statements[0]); Assert.AreEqual("wood", ((BuildByIdentifier)done.Statements[0]).Identifier); var trans = (OriginTransformStatement) done.Statements[1]; Assert.AreEqual(1, trans.Statements.Count); Assert.IsInstanceOf<BuildByIdentifier>(trans.Statements[0]); Assert.AreEqual("stone", ((BuildByIdentifier)trans.Statements[0]).Identifier); }