コード例 #1
0
        public void Execute(List <Expression> instruction)
        {
            //Eliminar keyword de tipo IExecutable. No lo necesito para compilar.
            instruction.RemoveAt(0);

            if (SyntacticAnalysis(instruction))
            {
                string nameVariable = instruction[0].ToString();

                //Solo trabajar con las expresiones de la derecha del =
                instruction.RemoveAt(0); instruction.RemoveAt(0);

                //Si es un tipo Text y del operador =, y no hay mas tokens
                if (instruction.Count == 1 && (instruction[0] is Text))
                {
                    Memory.ChangeText(nameVariable, (instruction[0] as Text).Value);
                }

                //Es un tipo number
                else
                {
                    FunctionArithmetic ecuation = ConvertToConditionalFunction.FetchFunction(instruction);
                    //Guardar variable en la memoria
                    if (ecuation != null)
                    {
                        Memory.ChangeVariable(nameVariable, ecuation.Evaluate(0));
                    }
                }
            }
        }
コード例 #2
0
ファイル: LocalFunction.cs プロジェクト: ivangalbans/MSharp
        /// <summary>
        /// Constructor de funcion local
        /// </summary>
        /// <param name="name">Representa el nombre de la funcion</param>
        /// <param name="fparam">Representa la funcion en la que se desea evaluar dicha funcion</param>
        public LocalFunction(string name, FunctionArithmetic fparam)
        {
            _existFunction = true;
            _name          = name;
            _function      = fparam;

            if (!Memory.DataFunction.ContainsKey(name))
            {
                _existFunction = false;
                MSharpErrors.OnError(string.Format("La funcion {0} no ha sido declarada", _name));
            }
        }
コード例 #3
0
        internal static void SaveFunction(string name, FunctionArithmetic function)
        {
            if (AnalizeFunction(name, function) == false)
            {
                return;
            }

            if (ExistName(name))
            {
                MSharpErrors.OnError(string.Format("Existe ya otro tipo con el nombre {0}", name));
                return;
            }

            Memory.DataFunction.Add(name, function);
        }
コード例 #4
0
 private static bool AnalizeFunction(string name, FunctionArithmetic function)
 {
     if (name == null || function == null)
     {
         if (name == null)
         {
             MSharpErrors.OnError(string.Format("Compilation Error. Nombre de variable no puede ser null", name));
         }
         else
         {
             MSharpErrors.OnError(string.Format("Compilation Error. La funcion {0} no puede ser null", name));
         }
         return(false);
     }
     return(true);
 }
コード例 #5
0
        public void Execute(List <Expression> instruction)
        {
            //Eliminar keyword de tipo IExecutable. No lo necesito para compilar.
            instruction.RemoveAt(0);

            if (SyntacticAnalysis(instruction))
            {
                FunctionArithmetic tempFunction = ConvertToConditionalFunction.FetchFunction(instruction);

                if (tempFunction != null)
                {
                    //Guardar la funcion
                    Memory.SaveFunction(name, ConvertToConditionalFunction.FetchFunction(instruction));
                }
            }
        }
コード例 #6
0
ファイル: Print.cs プロジェクト: ivangalbans/MSharp
        public void Execute(List <Expression> instruction)
        {
            //Eliminar keyword de tipo IExecutable. No lo necesito para compilar.
            instruction.RemoveAt(0);

            if (SyntacticAnalysis(instruction))
            {
                if (instruction.Count == 1 && (instruction[0] is Text))
                {
                    if ((instruction[0] as Text).isOnlyText)
                    {
                        Display._output.Text += string.Format("{0}\n", (instruction[0] as Text).Value);
                    }
                    else
                    {
                        Display._output.Text += string.Format("{0}\n", Memory.GetText((instruction[0] as Text).Name));
                    }
                }

                else
                {
                    FunctionArithmetic ecuation = ConvertToConditionalFunction.FetchFunction(instruction);

                    float toShow = 0;
                    if (ecuation != null)
                    {
                        toShow = ecuation.Evaluate(0);
                    }

                    if (!Compiler._haveError)
                    {
                        Display._output.Text += string.Format("{0}\n", toShow);
                    }
                }
            }
        }
コード例 #7
0
 /// <summary>
 /// Constructor de Funcion
 /// </summary>
 /// <param name="body">Cuerpo de la funcion</param>
 /// <param name="proposition">Proposicion a evaluar</param>
 /// <param name="ptrElse">Puntero a otra funcion condicional</param>
 public ConditionalFunction(FunctionArithmetic body, FunctionBoolean proposition, ConditionalFunction ptrElse)
 {
     this.body        = body;
     this.proposition = proposition;
     this.ptrElse     = ptrElse;
 }
コード例 #8
0
ファイル: Relational.cs プロジェクト: ivangalbans/MSharp
 public Relational(FunctionArithmetic left, FunctionArithmetic right)
 {
     this.left  = left;
     this.right = right;
 }
コード例 #9
0
ファイル: LessOrEqual.cs プロジェクト: ivangalbans/MSharp
 public LessOrEqual(FunctionArithmetic left, FunctionArithmetic right) : base(left, right)
 {
 }
コード例 #10
0
ファイル: Elemental.cs プロジェクト: ivangalbans/MSharp
 public Elemental(FunctionArithmetic term) : base(term)
 {
 }
コード例 #11
0
 public RelationalComposite(FunctionArithmetic left, FunctionArithmetic right) : base(left, right)
 {
 }
コード例 #12
0
ファイル: Exp.cs プロジェクト: ivangalbans/MSharp
 public Exp(FunctionArithmetic function) : base(function)
 {
 }
コード例 #13
0
 public Atan(FunctionArithmetic function) : base(function)
 {
 }
コード例 #14
0
ファイル: Sum.cs プロジェクト: ivangalbans/MSharp
 public Sum(FunctionArithmetic left, FunctionArithmetic rigth) : base(left, rigth)
 {
 }
コード例 #15
0
 public Power(FunctionArithmetic left, FunctionArithmetic rigth) : base(left, rigth)
 {
 }
コード例 #16
0
ファイル: Average.cs プロジェクト: ivangalbans/MSharp
 /// <summary>
 /// Constructor de la funcion Promedio. Recibe tres tipos de funciones aritmeticas las cuales sera promediadas
 /// </summary>
 /// <param name="first">Primera FunctionAritmetic</param>
 /// <param name="second">Segunda FunctionAritmetic</param>
 /// <param name="third">Tercera FunctionAritmetic</param>
 public Average(FunctionArithmetic first, FunctionArithmetic second, FunctionArithmetic third)
 {
     this._first = first; this._second = second; this._third = third;
 }
コード例 #17
0
ファイル: Arccos.cs プロジェクト: ivangalbans/MSharp
 public Arccos(FunctionArithmetic function) : base(function)
 {
 }
コード例 #18
0
 /// <summary>
 /// Representa una Funcion Binaria
 /// </summary>
 /// <param name="left">El primer operando de tipo FunctionArithmeti</param>
 /// <param name="right">El segundo operando de tipo FunctionArithmeti</param>
 public BinaryFunction(FunctionArithmetic left, FunctionArithmetic right)
 {
     this.left  = left;
     this.right = right;
 }
コード例 #19
0
 public Different(FunctionArithmetic left, FunctionArithmetic right) : base(left, right)
 {
 }
コード例 #20
0
 public LogNep(FunctionArithmetic function) : base(function)
 {
 }
コード例 #21
0
ファイル: Arcsin.cs プロジェクト: ivangalbans/MSharp
 public Arcsin(FunctionArithmetic function) : base(function)
 {
 }
コード例 #22
0
 public Cot(FunctionArithmetic function) : base(function)
 {
 }
コード例 #23
0
ファイル: UnaryFunction.cs プロジェクト: ivangalbans/MSharp
 public UnaryFunction(FunctionArithmetic function)
 {
     this._function = function;
 }
コード例 #24
0
 public Negative(FunctionArithmetic function) : base(function)
 {
 }
コード例 #25
0
 public Division(FunctionArithmetic left, FunctionArithmetic rigth) : base(left, rigth)
 {
 }
コード例 #26
0
 public Trigonometric(FunctionArithmetic term) : base(term)
 {
 }
コード例 #27
0
 public RelationalSimple(FunctionArithmetic left, FunctionArithmetic right) : base(left, right)
 {
 }
コード例 #28
0
 public Derivate(FunctionArithmetic function) : base(function)
 {
 }
コード例 #29
0
ファイル: GreaterOrEqual.cs プロジェクト: ivangalbans/MSharp
 public GreaterOrEqual(FunctionArithmetic left, FunctionArithmetic right) : base(left, right)
 {
 }
コード例 #30
0
 public Multiplication(FunctionArithmetic left, FunctionArithmetic rigth) : base(left, rigth)
 {
 }