Esempio n. 1
0
        private static IEnumerable <Command> CompileArrayIdentifier(SubroutineCompilationUnit compilationUnit,
                                                                    ArrayIdentifier arrayIdentifier)
        {
            yield return(compilationUnit.PushSymbol(arrayIdentifier.Identifier.Value));

            foreach (var command in CompileExpression(compilationUnit, arrayIdentifier.Expression))
            {
                yield return(command);
            }

            yield return(Commands.Arithmetic.Add());

            yield return(Commands.Pop.Pointer(1));

            yield return(Commands.Push.That(0));
        }
Esempio n. 2
0
        public LetStatement(Tokenizer tokenizer)
        {
            tokenizer.CurrentIs(Keyword.Let).Move().CurrentIsIdentifier();

            if (tokenizer.Next.Equals(Symbol.OpenBracket))
            {
                Varible = new ArrayIdentifier(tokenizer.GetCurrentThenMove() as Identifier, tokenizer);
            }
            else
            {
                Varible = tokenizer.GetCurrentThenMove() as Identifier;
            }

            tokenizer.CurrentIs(Symbol.Equal).Move();

            Expression = new Expression(tokenizer);

            tokenizer.CurrentIs(Symbol.SemiColon).Move();
        }