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

Ìåíþ

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

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

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

                                                                           (m_operators[j] as WhileOperator).LoopPos = i;

                                                                           break;

                                                                  }

                                                        case OperatorKind.Next:

                                                                  {

                                                                           if (stk.Count == 0)

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

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

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

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

                                                                           (m_operators[i] as NextOperator).ForPos = j;

                                                                           (m_operators[i] as NextOperator).ForOp = (m_operators[j] as ForOperator);

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

                                                                           break;

                                                                  }

                                               }

                                      }

                                      if (stk.Count != 0)

                                               throw new SyntaxErrorException("Íå çàêðûòûé áëîê");

                            }

                            catch (SyntaxErrorException ex) {

                                      throw new LineSyntaxException(ex.Message, m_name, i + 1);

                            }

                            m_count = m_operators.Count;

                   }

                   private string m_name;

                   private ArrayList m_args = new ArrayList();

                   private ArrayList m_operators = new ArrayList();

                   private int m_count;

                   public int ReqCount {

                            get { return m_args.Count; }

                   }

                   public VarBase Perform(ArgList al) {

                            Namespace ns = new Namespace(InterprEnvironment.Instance.CurrentNamespace);

                            ns["result"] = new IntVar(0);

                            int argc = m_args.Count;

                            if (al.Count != argc)

                                      throw new CalcException("Íåâåðíîå ÷èñëî ïàðàìåòðîâ");

                            al.Reset();

                            for (int i = 0; i < argc; i++) {

                                      ns[m_args[i] as System.String] = al.Get();

                            }

                            InterprEnvironment.Instance.CurrentNamespace = ns;

                            Moment moment = new Moment(this);

                            if (m_count > 1) {

                                      try {

                                               moment.Run();

                                      }

                                      catch (SyntaxErrorException ex) {

                                               throw ex;

                                      }

                                      catch (CalcException ex) {

                                               throw new CalcException("Îøèáêà â ôóíêöèè " + m_name + "[] â ñòðîêå " + (moment.Pos + 1) + " : " + ex.Message);

                                      }

                            }

                            VarBase res = ns["result"];

                            InterprEnvironment.Instance.CurrentNamespace = ns.PreviousNamespace;

                            if (res == null)

                                      throw new CalcException("Îøèáêà â ôóíêöèè " + m_name + "[] : ïåðåìåííàÿ result íå îïðåäåëåíà íà ìîìåíò âûõîäà");

                            return res;

                   }

                   public class Moment {

                            private Subroutine m_sub;

                            private int m_pos;

                            private static int s_break = 0;

                            public static void Break() {

                                      Interlocked.Exchange(ref s_break, 1);

                            }

                            public int Pos {

                                      get { return m_pos; }

                            }

                            public Moment(Subroutine sub) {

                                      m_sub = sub;

                                      m_pos = 1;

                                      s_break = 0;

                            }

                            public void GoTo(int to) {

                                      m_pos = to;

                            }

                            public void Next() {

                                      m_pos++;

                            }

                            public void Run() {

                                      while (m_pos < m_sub.m_count) {

                                               if (s_break == 1)

                                                        throw new CalcException("Ïðåðâàíî ïîëüçîâàòåëåì");

                                               (m_sub.m_operators[m_pos] as IOperator).Execute(this);

                                      }

                            }

                            public void Return() {

                                      m_pos = m_sub.m_count;

                            }

                            public IOperator Current {

                                      get { return m_sub.m_operators[m_pos] as IOperator; }

                            }

                   }

         }

}

17. Êëàññ Facade.

using System.Threading;

using interpr.logic;

using interpr.logic.operators;

namespace interpr {

         public class Facade {

                   private static Facade s_instance = null;

                   public static void Create(IConsole console) {

                            if (s_instance == null)

                                      s_instance = new Facade(console);

                   }

                   public static Facade Instance {

                            get { return s_instance; }

                   }

                   private IConsole m_console;

                   private InterprEnvironment m_env;

                   private string m_cmd;

                   private bool m_doing = false;

                   private Facade(IConsole console) {

                            m_console = console;

                            m_env = InterprEnvironment.Instance;

                            m_env.CurrentConsole = m_console;

                   }

                   public delegate void CommandDoneHandler();

                   public event CommandDoneHandler Done;

                   private void ThrStart() {

                            m_doing = true;

                            Command cmd;

                            do {

                                      try {

                                               cmd = LineCompiler.CompileCommand(m_cmd);

                                      }

                                      catch (SyntaxErrorException ex) {

                                               m_env.CurrentConsole.PrintLn("Îøèáêà : " + ex.Message);

                                               break;

                                      }

                                      try {

                                               cmd.Execute();

                                      }

                                      catch (CalcException ex) {

                                               m_env.CurrentConsole.PrintLn("Îøèáêà : " + ex.Message);

                                               m_env.CurrentNamespace = m_env.ConsoleNamespace;

                                               break;

                                      }

                            } while (false);

                            Done();

                            m_doing = false;

                   }

                   public void ExecuteCommand(string cmd) {

                            if (m_doing)

                                      throw new OtherException("Error in Bridge.ExecuteCommand()");

                            m_cmd = cmd;

                            new Thread(new ThreadStart(ThrStart)).Start();

                   }

                   private void DoRestart() {

                            if (m_doing)

                                      Subroutine.Moment.Break();

                            while (m_doing) {}

                            InterprEnvironment.Reset();

                            m_env = InterprEnvironment.Instance;

                            m_env.CurrentConsole = m_console;

                            m_env.LoadSubs();

                   }

                   public void Restart() {

                            new Thread(new ThreadStart(DoRestart)).Start();

                   }

                   public bool Busy {

                            get { return m_doing; }

                   }

                   public void SaveVariables() {

                            m_env.SaveVars();

                   }

                   public void LoadSubs() {

                            m_env.LoadSubs();

                   }

                   public ConsoleNamespace.VariableReport[] GetVariables() {

                            return m_env.GetGlobalVarsList();

                   }

                   public string[] GetSubs() {

                            return m_env.LoadedSubs;

                   }

                   public void DeleteVariable(string name) {

                            m_env.ConsoleNamespace.Remove(name);

                   }

                   public bool LoadSub(string name) {

                            return m_env.LoadSub(name);

                  }

                   public void UnloadSub(string name) {

                            m_env.UnloadSub(name);

                   }

                   public bool NotRestored {

                            get {

                                      return m_env.NotRestored;

                            }

                   }

         }

}

18. Êëàññ SourceBox.

using System;

using System.ComponentModel;

using System.Drawing;

using System.Windows.Forms;

namespace interpr {

         public class SourceBox : UserControl {

                   private RichTextBox m_tb;

                   private TextBox m_tb_2;

                  

                   ....................................................................

                   private int m_curline = 0;//òåêóùàÿ ñòðîêà

                   private int m_lincount = 0;//îáùåå ÷èñëî ñòðîê

                   private HighlightParser m_hp = new HighlightParser();

                   private static Font s_nfont =

                            new Font("Lucida Console", 10, FontStyle.Regular);

                   private static Font s_cfont =

                            new Font("Lucida Console", 12, FontStyle.Bold);

                   private int GetCurrentLine() {

                            return m_tb.GetLineFromCharIndex(m_tb.SelectionStart);

                   }

                   private int GetLinesCount() {

                            return m_tb.Lines.Length;

                   }

                   private String GetLine(int index) {

                            return m_tb.Lines[index];

                   }

                   private void m_tb_KeyPress(object sender, KeyPressEventArgs e) {

                            if (e.KeyChar == '\r') {

                                      string txt = m_tb.Text;

                                      int i = m_tb.SelectionStart - 2;

                                      int j;

                                      while (i >= 0) {

                                               if (txt[i] == '\n')

                                                        return;

                                               else if (txt[i] == '\t') {

                                                        j = 0;

                                                        while ((i >= 0) && (txt[i] == '\t')) {

                                                                  j++;

                                                                  i--;

                                                        }

                                                        if ((i < 0) || (txt[i] == '\n')) {

                                                                  m_tb.SelectedText = new String('\t', j);

                                                                  return;

                                                        }

                                               }

                                               i--;

                                      }

                            }

                   }

                   private bool GetLinePos(int index, out int beg, out int len) {

                            if ((index < 0) || (index >= GetLinesCount())) {

                                      beg = len = 0;

                                      return false;

                            }

                            int i;

                            string[] ls = m_tb.Lines;

                            beg = 0;

                            for (i = 0; i < index; i++)

                                      beg += ls[i].Length + 1;

                            len = ls[index].Length;

                            return true;

                   }

                   private void SelectLine(int index) {

                            int beg, len;

                            if (!GetLinePos(index, out beg, out len))

                                      throw new IndexOutOfRangeException();

                            m_tb.SelectionStart = beg;

                            m_tb.SelectionLength = len;

                   }

                   private void HighlightLine(int index) {

                            int beg, len;

                            int curbeg = m_tb.SelectionStart;

                            int curlen = m_tb.SelectionLength;

                            GetLinePos(index, out beg, out len);

                            string str = m_tb.Lines[index];

                            m_hp.Reset(str);

                            while (m_hp.HasMore()) {

                                      int tbeg, tlen;

                                      HighlightParser.TokenType type;

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


Íîâîñòè

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

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

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

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

Íîâîñòè

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

© 2010.