public LetStatement ParseStatement(List <Token> lTokens)
        {
            TokensStack sTokens = new TokensStack();

            for (int i = lTokens.Count - 1; i >= 0; i--)
            {
                sTokens.Push(lTokens[i]);
            }
            LetStatement s = new LetStatement();

            s.Parse(sTokens);
            return(s);
        }
Example #2
0
        public List <string> Compile(string sInputFile)
        {
            List <string> lCodeLines = ReadFile(sInputFile);
            List <Token>  lTokens    = Tokenize(lCodeLines);
            TokensStack   sTokens    = new TokensStack();

            for (int i = lTokens.Count - 1; i >= 0; i--)
            {
                sTokens.Push(lTokens[i]);
            }
            JackProgram program = Parse(sTokens);

            return(null);
        }
        public List <LetStatement> ParseAssignments(List <string> lLines)
        {
            List <LetStatement> lParsed = new List <LetStatement>();
            List <Token>        lTokens = Tokenize(lLines);
            TokensStack         sTokens = new TokensStack();

            for (int i = lTokens.Count - 1; i >= 0; i--)
            {
                sTokens.Push(lTokens[i]);
            }
            while (sTokens.Count > 0)
            {
                LetStatement ls = new LetStatement();
                ls.Parse(sTokens);
                lParsed.Add(ls);
            }
            return(lParsed);
        }
Example #4
0
        private static bool TestParse()
        {
            try
            {
                Compiler      sc      = new Compiler();
                List <string> lLines  = sc.ReadFile(@"Program.Jack");
                List <Token>  lTokens = sc.Tokenize(lLines);
                TokensStack   sTokens = new TokensStack();
                for (int i = lTokens.Count - 1; i >= 0; i--)
                {
                    sTokens.Push(lTokens[i]);
                }
                JackProgram prog = new JackProgram();
                prog.Parse(sTokens);
                string sAfterParsing = prog.ToString();
                sAfterParsing = sAfterParsing.Replace(" ", "");
                sAfterParsing = sAfterParsing.Replace("\t", "");
                sAfterParsing = sAfterParsing.Replace("\n", "");
                sAfterParsing = sAfterParsing.ToLower();

                string sAllTokens = "";
                foreach (Token t in lTokens)
                {
                    sAllTokens += GetName(t).ToLower();
                }


                for (int i = 0; i < sAllTokens.Length; i++)
                {
                    if (sAllTokens[i] != sAfterParsing[i])
                    {
                        return(false);
                    }
                }
                return(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(false);
        }
Example #5
0
        static void TestSimplifyLetStatement()
        {
            List <VarDeclaration> varDecs = new List <VarDeclaration>();

            char chr = 'a';

            while (chr <= 'g')
            {
                VarDeclaration varDec = new VarDeclaration(null, "" + chr);
                varDecs.Add(varDec);
                chr++;
            }
            VarDeclaration x = new VarDeclaration(null, "x");

            varDecs.Add(x);
            string strExpression = "(((a + b) - (c - d)) + (e - (f + g)))";

            Compiler     c          = new Compiler();
            List <Token> tokensList = c.Tokenize(strExpression, 0);
            TokensStack  tokens     = new TokensStack();

            for (int i = tokensList.Count - 1; i >= 0; i--)
            {
                tokens.Push(tokensList[i]);
            }
            LetStatement example    = new LetStatement();
            Expression   expression = Expression.Create(tokens);

            expression.Parse(tokens);
            LetStatement let = new LetStatement();

            let.Variable = "x";
            let.Value    = expression;
            List <LetStatement> letStatements = c.SimplifyExpressions(let, varDecs);

            for (int i = 0; i < letStatements.Count; i++)
            {
                Console.WriteLine(letStatements[i]);
            }

            Console.WriteLine("Simplifying Expressions completetd");
        }