private static void Main(string[] args)
        {
            //Assembly node;
            //using (FileStream fs = new FileStream("sampleinput.txt", FileMode.Open, FileAccess.Read))
            //{
            //    Tokenizer tok = new Tokenizer();
            //    Parser parser = new Parser("sample", tok, fs);

            //    node = parser.parse();
            //    node.PrettyPrint(Console.Out);
            //}

            //string outFile = "sampleoutput.bc";

            Assembly node;
            try
            {
                using (Stream input = new FileStream("sampleinput.txt", FileMode.Open))
                {
                    Tokenizer tok = new Tokenizer();
                    Parser parser = new Parser("sample", tok, input);

                    node = parser.Parse();
                    //node.PrettyPrint(Console.Out);
                }

                string outFile = "sampleoutput.bc";
                CodeGenerator gen = new CodeGenerator(node, outFile);
                gen.Generate();

                Debug.WriteLine("running as JIT");
                gen.RunJit();

                return;
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error {0} parsing input file.", e.Message);
                return;
            }
        }
        private void RunTestExpectValue(string path, int expectedVal)
        {
            Assembly node;
            using (Stream input = new FileStream(path, FileMode.Open))
            {
                Tokenizer tok = new Tokenizer();
                Parser parser = new Parser("sample", tok, input);

                node = parser.Parse();
                //node.PrettyPrint(Console.Out);
            }

            string outFile = "sampleoutput.bc";
            CodeGenerator gen = new CodeGenerator(node, outFile);
            gen.Generate();

            Debug.WriteLine("running as JIT");
            int realVal = gen.RunJit();

            Assert.Equal(expectedVal, realVal);

            return;
        }
        private void TestStringTokenizesTo(string str, TokenType type, char insertAfter, bool skipStringCheck = false)
        {
            Tokenizer tokenizer = new Tokenizer();

            bool ready = false;
            foreach(char ch in str)
            {
                tokenizer.Insert(ch);

                if (tokenizer.Ready())
                {
                    ready = true;
                }
            }

            Assert.Equal(false, ready);
            
            tokenizer.Insert(insertAfter);

            Assert.Equal(true, tokenizer.Ready());

            Token tok = tokenizer.Dispense();

            if (!skipStringCheck)
            {
                Assert.Equal(str, tok.Text);
            }

            Assert.Equal(type, tok.Type);
        }
 public Parser(string name, Tokenizer tok, Stream input)
 {
     _name = name;
     _tokens = new TokenManager(tok, input);
 }