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)); }
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(); }