ñêà÷àòü ðåôåðàòû
  RSS    

Ìåíþ

Áûñòðûé ïîèñê

ñêà÷àòü ðåôåðàòû

ñêà÷àòü ðåôåðàòûÊóðñîâàÿ ðàáîòà: Èíòåðàêòèâíûé èíòåðïðåòàòîð

                            int resval = (res as IntVar).Val;

                            resval++;

                            res = new IntVar(resval);

                            cn[m_counter_var] = res;

                            if (resval > m_end_res.Val)

                                      pos.GoTo(m_next_pos + 1);

                            else

                                      pos.GoTo(forpos + 1);

                   }

                   public void Execute(Subroutine.Moment pos) {

                            VarBase resb, rese;

                            resb = m_begin.Calculate();

                            if (!resb.IsInt())

                                      throw new CalcException("Ãðàíèöû èçìåíåíèÿ ñ÷åò÷èêà äîëæíû áûòü öåëûìè");

                            IntVar resbi = resb as IntVar;

                            Namespace cn = InterprEnvironment.Instance.CurrentNamespace;

                            cn[m_counter_var] = resb;

                            rese = m_end.Calculate();

                            if (!rese.IsInt())

                                      throw new CalcException("Ãðàíèöû èçìåíåíèÿ ñ÷åò÷èêà äîëæíû áûòü öåëûìè");

                            m_end_res = rese as IntVar;

                            if (resbi.Val > m_end_res.Val)

                                      pos.GoTo(m_next_pos + 1);

                            else

                                      pos.Next();

                   }

                   public OperatorKind GetKind() {

                            return OperatorKind.For;

                   }

         }

}

15. Êëàññ NextOperator

namespace interpr.logic.operators {

         public class NextOperator : IOperator {

                   private int m_for_pos = -1;

                   private ForOperator m_for_op = null;

                   public NextOperator() {}

                   public int ForPos {

                            get {

                                      if (m_for_pos < 0)

                                               throw new OtherException("Error in NextOperator.ForPos");

                                      return m_for_pos;

                            }

                            set { m_for_pos = value; }

                   }

                   public ForOperator ForOp {

                            get { return m_for_op; }

                            set { m_for_op = value; }

                   }

                   public void Execute(interpr.logic.Subroutine.Moment pos) {

                            m_for_op.Step(pos, m_for_pos);

                   }

                   public interpr.logic.operators.OperatorKind GetKind() {

                            return OperatorKind.Next;

                   }

         }

}

16. Êëàññ Subroutine.

using System;

using System.Collections;

using System.Threading;

using interpr.logic.vartypes;

using interpr.logic.operators;

namespace interpr.logic {

         public sealed class Subroutine  {

                   private void AnalyseHeader(string str) {

                            Parser header_p = new Parser(str);

                            if (!header_p.MoveNext())

                                      throw new SyntaxErrorException("Îøèáêà â çàãîëîâêå ôóíêöèè");

                            if ((header_p.Current as System.String) != m_name)

                                      throw new SyntaxErrorException("Èìÿ ôóíêöèè íå ñîâïàäàåò ñ èìåíåì ôàéëà");

                            if ((!header_p.MoveNext()) || ((header_p.Current as String) != "["))

                                      throw new SyntaxErrorException("Îøèáêà â çàãîëîâêå ôóíêöèè");

                            if ((!header_p.MoveNext()))

                                      throw new SyntaxErrorException("Îøèáêà â çàãîëîâêå ôóíêöèè");

                            if ((header_p.Current as System.String != "]")) {

                                      string readstr;

                                      while (true) {

                                               readstr = (header_p.Current as System.String);

                                               if (!Parser.IsID(readstr))

                                                        throw new SyntaxErrorException("Îøèáêà â çàãîëîâêå ôóíêöèè");

                                               m_args.Add(readstr);

                                               if (!header_p.MoveNext())

                                                        throw new SyntaxErrorException("Îøèáêà â çàãîëîâêå ôóíêöèè");

                                               readstr = (header_p.Current as System.String);

                                               if (readstr == ",") {

                                                        if (!header_p.MoveNext())

                                                                  throw new SyntaxErrorException("Îøèáêà â çàãîëîâêå ôóíêöèè");

                                               }

                                               else if (readstr == "]")

                                                        break;

                                               else

                                                        throw new SyntaxErrorException("Îøèáêà â çàãîëîâêå ôóíêöèè");

                                      }

                            }

                            if (header_p.MoveNext())

                                      throw new SyntaxErrorException("Îøèáêà â çàãîëîâêå ôóíêöèè");

                            if (m_args.IndexOf("result") >= 0)

                                      throw new SyntaxErrorException("Ïàðàìåòð ôóíêöèè íå ìîæåò èìåòü èìÿ \"result\"");

                   }

                   public Subroutine(string[] code, string name) {

                            m_name = name;

                            if (code.Length == 0)

                                      throw new SyntaxErrorException("Ôàéë ôóíêöèè ïóñò");

                            AnalyseHeader(code[0]);

                            int clen = code.Length;

                            int i = 0;

                            try {

                                      Stack stk = new Stack();

                                      m_operators.Add(new EmptyCommand()); //÷òîáû èíäåêñàöèÿ íà÷èíàëàñü ñ åäèíèöû

                                      for (i = 1; i < clen; i++) {

                                               IOperator op = LineCompiler.CompileOperator(code[i]);

                                               if (op == null)

                                                        throw new SyntaxErrorException("Ñèíòàêñè÷åñêàÿ îøèáêà");

                                               m_operators.Add(op);

                                               switch (op.GetKind()) {

                                                        case OperatorKind.If:

                                                        case OperatorKind.While:

                                                         case OperatorKind.For:

                                                                  {

                                                                           stk.Push(i);

                                                                           break;

                                                                  }

                                                        case OperatorKind.Elseif:

                                                                  {

                                                                           if (stk.Count == 0)

                                                                                     throw new SyntaxErrorException("Ëèøíåå elseif");

                                                                           int j = (int) stk.Pop();

                                                                           switch ((m_operators[j] as IOperator).GetKind()) {

                                                                                     case OperatorKind.If:

                                                                                              {

                                                                                                       (m_operators[j] as IfOperator).NextPos = i;

                                                                                                       break;

                                                                                              }

                                                                                     case OperatorKind.Elseif:

                                                                                              {

                                                                                                       (m_operators[j] as ElseifOperator).NextPos = i;

                                                                                                       break;

                                                                                              }

                                                                                     default:

                                                                                              throw new SyntaxErrorException("Ëèøíåå elseif");

                                                                           }

                                                                           stk.Push(i);

                                                                           break;

                                                                  }

                                                        case OperatorKind.Else:

                                                                  {

                                                                           if (stk.Count == 0)

                                                                                     throw new SyntaxErrorException("Ëèøíåå else");

                                                                           int j = (int) stk.Pop();

                                                                           stk.Push(i);

                                                                           switch ((m_operators[j] as IOperator).GetKind()) {

                                                                                     case OperatorKind.If:

                                                                                              {

                                                                                                       (m_operators[j] as IfOperator).NextPos = i;

                                                                                                       break;

                                                                                              }

                                                                                     case OperatorKind.Elseif:

                                                                                              {

                                                                                                       (m_operators[j] as ElseifOperator).NextPos = i;

                                                                                                       break;

                                                                                              }

                                                                                     default:

                                                                                              throw new SyntaxErrorException("Ëèøíåå else");

                                                                           }

                                                                           break;

                                                                  }

                                                        case OperatorKind.Endif:

                                                                  {

                                                                           if (stk.Count == 0)

                                                                                     throw new SyntaxErrorException("Ëèøíåå endif");

                                                                           int j = (int) stk.Pop();

                                                                           switch ((m_operators[j] as IOperator).GetKind()) {

                                                                                     case OperatorKind.If:

                                                                                              {

                                                                                                       (m_operators[j] as IfOperator).NextPos = i;

                                                                                                       break;

                                                                                              }

                                                                                     case OperatorKind.Elseif:

                                                                                              {

                                                                                                       (m_operators[j] as ElseifOperator).NextPos = i;

                                                                                                       break;

                                                                                              }

                                                                                     case OperatorKind.Else:

                                                                                              {

                                                                                                       (m_operators[j] as ElseOperator).NextPos = i;

                                                                                                       break;

                                                                                              }

                                                                                     default:

                                                                                              throw new SyntaxErrorException("Ëèøíåå endif");

                                                                           }

                                                                           break;

                                                                  }

                                                        case OperatorKind.Loop:

                                                                  {

                                                                           if (stk.Count == 0)

                                                                                     throw new SyntaxErrorException("Ëèøíåå loop");

                                                                           int j = (int) stk.Pop();

                                                                           if ((m_operators[j] as IOperator).GetKind() != OperatorKind.While)

                                                                                     throw new SyntaxErrorException("Ëèøíåå loop");

                                                                           (m_operators[i] as LoopOperator).WhilePos = j;

Ñòðàíèöû: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14


Íîâîñòè

Áûñòðûé ïîèñê

Ãðóïïà âÊîíòàêòå: íîâîñòè

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

  ñêà÷àòü ðåôåðàòû              ñêà÷àòü ðåôåðàòû

Íîâîñòè

ñêà÷àòü ðåôåðàòû

© 2010.