public override CSResult BuildToCS(BuildEnvironment Env) { if (ToSay is VariableParseNode) { VariableParseNode vpn = ToSay as VariableParseNode; if (Env.CurrentContext.VariableExists(vpn.Name)) { BuildVariable variable = Env.CurrentContext.GetVariable(vpn.Name); return(new CSResult() { GeneratedCS = new CSLineList() { new CSLine("Console.Write(" + variable.Name + ");", T.LineNumber) } }); } return(new CSResult() { GeneratedCS = new CSLineList() { new CSLine("Console.Write(\"mysterious\");", T.LineNumber) } }); } else { throw new NotImplementedException(); } }
public override InterpreterResult Interpret(InterpreterEnvironment Env) { object value = null; if (ToSay is VariableParseNode) { VariableParseNode variableNode = ToSay as VariableParseNode; InterpreterVariable variable = null; if (variableNode.IsLast) { if (Env.CurrentContext.LastVariable != null) { variable = Env.CurrentContext.LastVariable; } else { throw new InterpreterException("Invalid use of " + variableNode.T.Value, variableNode.T); } } else if (Env.CurrentContext.VariableExists(variableNode.Name)) { variable = Env.CurrentContext.GetVariable(variableNode.Name); } else { Console.WriteLine("mysterious"); return(new InterpreterResult()); } if (variable.Type == InterpreterVariableType.Null) { Console.WriteLine("null"); return(new InterpreterResult()); } if (variable.Type == InterpreterVariableType.Undefined) { Console.WriteLine("mysterious"); return(new InterpreterResult()); } value = variable.Value; } else { InterpreterResult result = ToSay.Interpret(Env); if (result.Type == InterpreterVariableType.Null) { Console.WriteLine("null"); } else if (result.Type == InterpreterVariableType.Undefined) { Console.WriteLine("mysterious"); } else { value = result.Value; } } Console.WriteLine(value); return(new InterpreterResult()); }
public InputParseNode(Token T, VariableParseNode Variable) : base(T) { this.Variable = Variable; }
public IncDecParseNode(Token T, VariableParseNode Variable, bool Up) : base(T) { this.Variable = Variable; this.Up = Up; }
public StringLiteralAssignmentParseNode(Token T, VariableParseNode Variable, ParseNodeList Words) : base(T) { this.Variable = Variable; this.Words = Words; }
public PutIntoParseNode(Token T, VariableParseNode Variable, ParseNode Value) : base(T) { this.Value = Value; this.Variable = Variable; }
public AssignmentParseNode(Token T, ParseNode Value, VariableParseNode Variable) : base(T) { this.Value = Value; this.Variable = Variable; }