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

Ìåíþ

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

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

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

                                      return false;

                            return true;

                   }

         }

}

11. Êëàññ LineCompiler.

using System;

using interpr.logic.operators;

namespace interpr.logic {

         public class LineCompiler {

                   private LineCompiler() {}

                   public static Command CompileCommand(string str) {

                            Parser p = new Parser(str);

                            if (!p.HasMore()) {

                                      return new EmptyCommand();

                            }

                            String pstr = p.GetString();

                            int posa = pstr.IndexOf(":=");

                            if (posa >= 0) {

                                      int cq = 0;

                                      for (int iq = 0; iq < posa; iq++)

                                               if (pstr[iq] == '\"')

                                                        cq++;

                                      if (cq%2 == 0) {

                                               try {

                                                        if (posa == 0)

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

                                                        try {

                                                                  if (pstr[posa - 1] == '}') {

                                                                           int posob = pstr.IndexOf(' else {

                                                                           return new AssignCommand(pstr.Substring(0, posa),

                                                                                                    pstr.Substring(posa + 2));

                                                                  }

                                                        } catch {

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

                                                        }

                                               } catch (CalcException ex) {

                                                        throw new SyntaxErrorException(ex.Message);

                                               }

                                      }

                            }

                            p.MoveNext();

                            string firsttoken = (p.Current as String);

                            try {

                                      if (firsttoken == "clear") {

                                               if (!p.MoveNext())

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

                                               Command cc = new ClearCommand(p.Current as String);

                                               if (p.MoveNext())

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

                                               return cc;

                                      }

                                      if (firsttoken == "print") {

                                               Expression expr = new Expression(p);

                                               return new PrintCommand(expr);

                                      } else if (firsttoken == "println") {

                                               Expression expr = new Expression(p);

                                               return new PrintLnCommand(expr);

                                      } else if (firsttoken == "call") {

                                               Expression expr = new Expression(p);

                                               return new CallCommand(expr);

                                      } else {

                                               p.Reset();

                                               Expression expr1 = new Expression(p);

                                               return new PrintLnCommand(expr1);

                                      }

                            } catch (SyntaxErrorException ex) {

                                      throw ex;

                            } catch (Exception ex) {

                                      throw new SyntaxErrorException(ex.Message);

                            }

                   }

                   public static IOperator CompileOperator(string str) {

                            Parser p = new Parser(str);

                            if (!p.HasMore()) {

                                      return new EmptyCommand();

                            }

                            String pstr = p.GetString();

                            p.MoveNext();

                            string firsttoken = (p.Current as String);

                            if (firsttoken == "for") {

                                      try {

                                               return ParseForStatement(p.GetString());

                                      } catch (SyntaxErrorException ex) {

                                               throw ex;

                                      } catch (Exception ex) {

                                               throw new SyntaxErrorException(ex.Message);

                                      }

                            }

                            int posa = pstr.IndexOf(":=");

                            if (posa >= 0) {

                                      int cq = 0;

                                      for (int iq = 0; iq < posa; iq++)

                                               if (pstr[iq] == '\"')

                                                        cq++;

                                      if (cq%2 == 0) {

                                               try {

                                                        if (posa == 0)

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

                                                        try {

                                                                  if (pstr[posa - 1] == '}') {

                                                                           int posob = pstr.IndexOf(' else {

                                                                           return new AssignCommand(pstr.Substring(0, posa),

                                                                                                    pstr.Substring(posa + 2));

                                                                  }

                                                        } catch {

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

                                                        }

                                               } catch (CalcException ex) {

                                                        throw new SyntaxErrorException(ex.Message);

                                               }

                                      }

                            }

                            try {

                                      if (firsttoken == "clear") {

                                               if (!p.MoveNext())

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

                                               Command cc = new ClearCommand(p.Current as String);

                                               if (p.MoveNext())

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

                                               return cc;

                                      } else if (firsttoken == "next") {

                                               if (p.MoveNext())

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

                                               return new NextOperator();

                                      } else if (firsttoken == "else") {

                                               if (p.MoveNext())

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

                                               return new ElseOperator();

                                      } else if (firsttoken == "endif") {

                                               if (p.MoveNext())

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

                                               return new EndifOperator();

                                      } else if (firsttoken == "loop") {

                                               if (p.MoveNext())

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

                                               return new LoopOperator();

                                      } else if (firsttoken == "return") {

                                               if (p.MoveNext())

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

                                               return new ReturnOperator();

                                      } else if (firsttoken == "error") {

                                               if (p.MoveNext())

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

                                               return new ErrorOperator();

                                      }

                                      Expression expr = new Expression(p);

                                      if (firsttoken == "print")

                                               return new PrintCommand(expr);

                                      else if (firsttoken == "println")

                                               return new PrintLnCommand(expr);

                                      else if (firsttoken == "call")

                                               return new CallCommand(expr);

                                      else if (firsttoken == "while")

                                               return new WhileOperator(expr);

                                      else if (firsttoken == "if")

                                               return new IfOperator(expr);

                                      else if (firsttoken == "elseif")

                                               return new ElseifOperator(expr);

                                      else

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

                            } catch (SyntaxErrorException ex) {

                                      throw ex;

                            } catch (Exception ex) {

                                      throw new SyntaxErrorException(ex.Message);

                            }

                   }

                   private static IOperator ParseForStatement(string str) {

                            str = str.Substring(3);

                            int assignpos = str.IndexOf(":=");

                            if (assignpos < 0)

                                      throw new SyntaxErrorException("Íåïðàâèëüíûé ñèíòàêñèñ îïåðàòîðà for");

                            string countername = str.Substring(0, assignpos).Trim();

                            if (!Parser.IsID(countername))

                                      throw new SyntaxErrorException("Íåïðàâèëüíûé ñèíòàêñèñ îïåðàòîðà for");

                            str = str.Substring(assignpos + 2);

                            int colonpos = str.IndexOf(":");

                            if (colonpos < 0)

                                      throw new SyntaxErrorException("Íåïðàâèëüíûé ñèíòàêñèñ îïåðàòîðà for");

                            string expr1str = str.Substring(0, colonpos);

                            string expr2str = str.Substring(colonpos + 1);

                            Expression expr1 = new Expression(expr1str);

                            Expression expr2 = new Expression(expr2str);

                            return new ForOperator(countername, expr1, expr2);

                   }

         }

}

12. Èíòåðôåéñ IOperator.

namespace interpr.logic.operators {

         public enum OperatorKind {

                   Plain,

                   If,

                   Elseif,

                   Else,

                   Endif,

                   While,

                   Loop,

                   For,

                   Next,

                   Return

         }

         public interface IOperator {

                   void Execute(Subroutine.Moment pos);

                   OperatorKind GetKind();

         }

}

13. Êëàññ Command.

namespace interpr.logic.operators {

         public abstract class Command : IOperator {

                   public abstract void Execute();

                   public void Execute(Subroutine.Moment pos) {

                            Execute();

                            pos.Next();

                   }

                   public OperatorKind GetKind() {

                            return OperatorKind.Plain;

                   }

         }

}

14. Êëàññ ForOperator.

using interpr.logic.vartypes;

namespace interpr.logic.operators {

         public class ForOperator : IOperator {

                   private int m_next_pos = -1;

                   private string m_counter_var = null;

                   private Expression m_begin = null;

                   private Expression m_end = null;

                   private IntVar m_end_res = null;

                   public ForOperator(string counter, Expression beg, Expression end) {

                            m_counter_var = counter;

                            m_begin = beg;

                            m_end = end;

                   }

                   public int NextPos {

                            get {

                                      if (m_next_pos < 0)

                                               throw new OtherException("Error in LoopOperator.NextPos");

                                      return m_next_pos;

                            }

                            set { m_next_pos = value; }

                   }

                   public void Step(Subroutine.Moment pos, int forpos) {

                            Namespace cn = InterprEnvironment.Instance.CurrentNamespace;

                            VarBase res = cn[m_counter_var];

                            if (!res.IsInt())

                                      throw new CalcException("Òèï ïåðåìåííîé - ñ÷åò÷èêà öèêëà áûë èçìåíåí");

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


Íîâîñòè

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

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

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

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

Íîâîñòè

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

© 2010.