public void Handler(TmCodeGenerator generator) { generator.Stack.Push(generator.Token); generator.MoveNextToken(); generator.MoveNextToken(); var reg = generator.VarDictionary[generator.Token]; var line = generator.InstructionLine; generator.RepeatBackpack.Push(new RepeatBackpack(line, reg)); generator.GeneratorState = TinyCodeGeneratorState.Initial; }
public void Handler(TmCodeGenerator generator) { switch (generator.Token) { case ReadToken token: generator.GeneratorState = TinyCodeGeneratorState.Read; break; case WriteToken token: generator.GeneratorState = TinyCodeGeneratorState.Write; break; case IfToken token: generator.GeneratorState = TinyCodeGeneratorState.If; //generator.TokenStack.Push(generator.Token); break; case WhileToken token: generator.GeneratorState = TinyCodeGeneratorState.While; //generator.TokenStack.Push(generator.Token); break; case AttributionToken token: generator.GeneratorState = TinyCodeGeneratorState.Attribution; break; case EndToken token: generator.GeneratorState = TinyCodeGeneratorState.End; break; case IdentifierToken token: generator.MoveNextToken(); //if (generator.Token is AttributionToken) //{ // generator.AttributionTokenStack.Push(token); // generator.GeneratorState = TinyCodeGeneratorState.Attribution; //} break; case RepeatToken token: generator.GeneratorState = TinyCodeGeneratorState.Repeat; break; case UntilToken token: generator.GeneratorState = TinyCodeGeneratorState.Until; break; default: generator.MoveNextToken(); break; } }
public void Handler(TmCodeGenerator generator) { generator.Stack.Push(generator.Token); generator.RemoveParentheses <OpenParenthesesToken>(); var reg = generator.VarDictionary[generator.Token]; var line = generator.InstructionLine; generator.MoveNextToken(); switch (generator.Token) { case GreatToken token: var item = InstructionFactory.JLT(line, reg); generator.Instructions.Add(item); generator.IfBackpack.Push(new IfBackpackItem(line, item)); break; case GreatOrEqualToken token: break; case LessToken token: break; case LessOrEqualToken token: break; case EqualToken token: break; case NotEqualToken token: break; } generator.RemoveParentheses <CloseParenthesesToken>(); generator.GeneratorState = TinyCodeGeneratorState.Initial; }
public void Handler(TmCodeGenerator generator) { if (generator.Stack.Any()) { var pop = generator.Stack.Pop(); switch (pop) { case IfToken token: var ins = generator.Instructions.ToArray(); var ifBackpackItem = generator.IfBackpack.Pop(); ins[ifBackpackItem.Line] = ifBackpackItem.Command.Replace("lineJmp", generator.InstructionLine.ToString()); generator.Instructions = ins.ToList(); break; //case WhileToken token: // generator.AddCode(generator.StartWhileCodeReference.Pop()); // generator.JFCodeReferenceStack.Pop().Reference.ValueDecimal = generator.CodesLengh; // break; } } generator.MoveNextToken(); generator.GeneratorState = TinyCodeGeneratorState.Initial; }
public void Handler(TmCodeGenerator generator) { generator.MoveNextToken(); //throw new NotImplementedException(); }