public ScriptInterpreter(LanguageData language) { Language = language; Runtime = Language.Grammar.CreateRuntime(Language); Parser = new Parser(Language); EvaluationContext = new EvaluationContext(Runtime); Status = _internalStatus = InterpreterStatus.Ready; }
private bool CheckParseStatus() { if (ParsedScript == null) { return(false); } if (ParsedScript.HasErrors()) { _internalStatus = InterpreterStatus.SyntaxError; if (PrintParseErrors) { foreach (var err in ParsedScript.ParserMessages) { var msg = string.Format(Resources.ErrOutErrorPrintFormat, err.Location.ToUiString(), err.Message); this.EvaluationContext.OutputBuffer.AppendLine(msg); } //foreach } //if return(false); } switch (ParsedScript.Status) { case ParseTreeStatus.Error: _internalStatus = InterpreterStatus.SyntaxError; return(false); case ParseTreeStatus.Partial: _internalStatus = InterpreterStatus.WaitingMoreInput; return(false); default: _internalStatus = InterpreterStatus.Evaluating; return(true); } }
private void ParseAndEvaluate() { EvaluationContext.EvaluationTime = 0; try { LastException = null; if (ParsedScript == null) { //don't evaluate empty strings, just return if (Script == null || Script.Trim() == string.Empty && Status == InterpreterStatus.Ready) { return; } ParsedScript = this.Parser.Parse(Script, "source"); CheckParseStatus(); if (_internalStatus != InterpreterStatus.Evaluating) { return; } } if (ParsedScript == null) { return; } EvaluateParsedScript(); _internalStatus = InterpreterStatus.Ready; } catch (Exception ex) { LastException = ex; _internalStatus = InterpreterStatus.RuntimeError; if (LastException != null && RethrowExceptions) { throw; } } }
public void EvaluateAsync() { CheckNotBusy(); Status = _internalStatus = InterpreterStatus.Evaluating; WorkerThread = new Thread(AsyncThreadStart); WorkerThread.Start(null); }
public TryInterpretReturnValue(Span span, int dataIndex, int subDataIndex, InterpreterStatus status) { this.Span = span; this.Status = status; this.DataIndex = dataIndex; this.SubDataIndex = subDataIndex; this.SubData0 = this.SubData1 = 0; }
public void Evaluate() { try { _internalStatus = Status = InterpreterStatus.Evaluating; ParseAndEvaluate(); } finally { Status = _internalStatus; } }
public TryInterpretReturnValue(Caret start, int dataIndex, int subDataIndex, InterpreterStatus status) { this.Span = new Span { Start = start, Length = 0 }; this.Status = status; this.DataIndex = dataIndex; this.SubDataIndex = subDataIndex; SubData0 = SubData1 = 0; }
public override InterpreterStatus Execute(IContext c) { InterpreterStatus ret = _value.Execute(c); if (ret != InterpreterStatus.Ok) { return(ret); } _returnValue = _worker(_value.Value); return(ret); }
public override InterpreterStatus Execute(IContext c) { InterpreterStatus ret = _condition.Execute(c); if (ret != InterpreterStatus.Ok) { return(ret); } if (!_condition.Value) { Interpreter.PrepareGoto(Line, JumpPos); } return(InterpreterStatus.Ok); }
public override InterpreterStatus Execute(IContext c) { InterpreterStatus ret = _value.Execute(c); if (ret == InterpreterStatus.Ok) { if (_printLine) { c.PrintLine(_value.ValueAsString); } else { c.Print(_value.ValueAsString); } } return(ret); }
public void Run() { while (true) { InterpreterStatus ret = Step(); if (ret == InterpreterStatus.Run) { Reset(); continue; } if (ret == InterpreterStatus.End) { return; } } }
public override InterpreterStatus Execute(IContext c) { InterpreterStatus ret = _left.Execute(c); if (ret != InterpreterStatus.Ok) { return(ret); } ret = _right.Execute(c); if (ret != InterpreterStatus.Ok) { return(ret); } _value = _worker(_left, _right); return(InterpreterStatus.Ok); }
private bool CheckParseStatus() { if (ParsedScript == null) return false; if (ParsedScript.HasErrors()) { _internalStatus = InterpreterStatus.SyntaxError; if (PrintParseErrors) { foreach(var err in ParsedScript.ParserMessages) { var msg = string.Format(Resources.ErrOutErrorPrintFormat, err.Location.ToUiString(), err.Message); this.EvaluationContext.OutputBuffer.AppendLine(msg); }//foreach }//if return false; } switch (ParsedScript.Status) { case ParseTreeStatus.Error: _internalStatus = InterpreterStatus.SyntaxError; return false; case ParseTreeStatus.Partial: _internalStatus = InterpreterStatus.WaitingMoreInput; return false; default: _internalStatus = InterpreterStatus.Evaluating; return true; } }
public void Evaluate() { try { _waitHandle.Reset(); _internalStatus = Status = InterpreterStatus.Evaluating; ParseAndEvaluate(); } finally { Status = _internalStatus; _waitHandle.Set(); } }
private void ParseAndEvaluate() { EvaluationContext.EvaluationTime = 0; try { LastException = null; if(ParsedScript == null) { //don't evaluate empty strings, just return if (Script == null || Script.Trim() == string.Empty && Status == InterpreterStatus.Ready) return; ParsedScript = this.Parser.Parse(Script, "source"); CheckParseStatus(); if(_internalStatus != InterpreterStatus.Evaluating) return; } if(ParsedScript == null) return; EvaluateParsedScript(); _internalStatus = InterpreterStatus.Ready; } catch (Exception ex) { LastException = ex; _internalStatus = InterpreterStatus.RuntimeError; if (LastException != null && RethrowExceptions) throw; } }