Exemple #1
0
 public ScriptInterpreter(LanguageData language) {
   Language = language;
   Runtime = Language.Grammar.CreateRuntime(Language);
   Parser = new Parser(Language);
   EvaluationContext = new EvaluationContext(Runtime);
   Status = _internalStatus = InterpreterStatus.Ready;
 }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
 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;
         }
     }
 }
Exemple #4
0
 public void EvaluateAsync()
 {
     CheckNotBusy();
     Status       = _internalStatus = InterpreterStatus.Evaluating;
     WorkerThread = new Thread(AsyncThreadStart);
     WorkerThread.Start(null);
 }
Exemple #5
0
 public ScriptInterpreter(LanguageData language)
 {
     Language          = language;
     Runtime           = Language.Grammar.CreateRuntime(Language);
     Parser            = new Parser(Language);
     EvaluationContext = new EvaluationContext(Runtime);
     Status            = _internalStatus = InterpreterStatus.Ready;
 }
Exemple #6
0
 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;
 }
Exemple #7
0
 public void Evaluate() {
   try {
     _internalStatus = Status = InterpreterStatus.Evaluating;
     ParseAndEvaluate(); 
   } finally {
     Status = _internalStatus;
   }
 }
Exemple #8
0
 public void Evaluate()
 {
     try {
         _internalStatus = Status = InterpreterStatus.Evaluating;
         ParseAndEvaluate();
     } finally {
         Status = _internalStatus;
     }
 }
Exemple #9
0
 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;
 }
Exemple #10
0
        public override InterpreterStatus Execute(IContext c)
        {
            InterpreterStatus ret = _value.Execute(c);

            if (ret != InterpreterStatus.Ok)
            {
                return(ret);
            }

            _returnValue = _worker(_value.Value);
            return(ret);
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        public void Run()
        {
            while (true)
            {
                InterpreterStatus ret = Step();
                if (ret == InterpreterStatus.Run)
                {
                    Reset();
                    continue;
                }

                if (ret == InterpreterStatus.End)
                {
                    return;
                }
            }
        }
Exemple #14
0
        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);
        }
Exemple #15
0
 public void EvaluateAsync() {
   CheckNotBusy(); 
   Status = _internalStatus = InterpreterStatus.Evaluating;
   WorkerThread = new Thread(AsyncThreadStart);
   WorkerThread.Start(null);
 }
Exemple #16
0
 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();
       }
 }
Exemple #18
0
 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;
   }
 }