Exemplo n.º 1
0
            private void JsonObject(TerminalSet _TS, out BaseTerm t)
            {
                BaseTerm        e;
                List <BaseTerm> listItems = new List <BaseTerm>();

                GetSymbol(new TerminalSet(terminalCount, LCuBracket), true, true);
                GetSymbol(new TerminalSet(terminalCount, StringLiteral, RCuBracket), false, true);
                if (symbol.TerminalId == StringLiteral)
                {
                    while (true)
                    {
                        JsonPair(new TerminalSet(terminalCount, Comma, RCuBracket), out e);
                        listItems.Add(e);
                        GetSymbol(new TerminalSet(terminalCount, Comma, RCuBracket), false, true);
                        if (symbol.TerminalId == Comma)
                        {
                            symbol.SetProcessed();
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                GetSymbol(new TerminalSet(terminalCount, RCuBracket), true, true);
                t = JsonTerm.FromArray(listItems.ToArray());
            }
Exemplo n.º 2
0
     void JsonObject(TerminalSet _TS, out BaseTerm t)
     {
 #if LL1_tracing
         ReportParserProcEntry("JsonObject");
 #endif
         BaseTerm        e;
         List <BaseTerm> listItems = new List <BaseTerm> ();
         GetSymbol(new TerminalSet(terminalCount, LCuBracket), true, true);
         GetSymbol(new TerminalSet(terminalCount, StringLiteral, RCuBracket), false, true);
         if (symbol.Terminal == StringLiteral)
         {
             while (true)
             {
                 JsonPair(new TerminalSet(terminalCount, Comma, RCuBracket), out e);
                 listItems.Add(e);
                 GetSymbol(new TerminalSet(terminalCount, Comma, RCuBracket), false, true);
                 if (symbol.Terminal == Comma)
                 {
                     symbol.SetProcessed();
                 }
                 else
                 {
                     break;
                 }
             }
         }
         GetSymbol(new TerminalSet(terminalCount, RCuBracket), true, true);
         t = JsonTerm.FromArray(listItems.ToArray());
 #if LL1_tracing
         ReportParserProcExit("JsonObject");
 #endif
     }
Exemplo n.º 3
0
            public static JsonTerm FromArray(BaseTerm [] ta)
            {
                JsonTerm result = new JsonTerm();

                for (int i = ta.Length - 1; i >= 0; i--)
                {
                    result = new JsonTerm(ta [i], result);
                }

                return(result);
            }
Exemplo n.º 4
0
        public static Factor JsonConvert(JsonTerm jsonTerm, List <Term> terms = null)
        {
            if (jsonTerm.Operation != Operation.Empty)
            {
                var firstFactor  = JsonConvert(jsonTerm.FirstParam);
                var secondFactor = JsonConvert(jsonTerm.SecondParam);

                switch (jsonTerm.Operation)
                {
                case Operation.Plus:
                    return(firstFactor + secondFactor);

                case Operation.Minus:
                    return(firstFactor - secondFactor);

                case Operation.Multiply:
                    return(firstFactor * secondFactor);

                case Operation.Power:
                    return(firstFactor ^ secondFactor);

                default:
                    throw (new Exception("Unrecognized operation."));
                }
            }
            else if (jsonTerm.NumberValue != null)
            {
                var newTerm = new List <Term>();
                newTerm.Add(new Term
                {
                    Number       = jsonTerm.NumberValue.Value,
                    SymbolsPower = 0
                });
                return(new Factor(newTerm));
            }
            else if (jsonTerm.SymbolicValue != null)
            {
                var newTerm = new List <Term>();
                newTerm.Add(new Term
                {
                    Number       = 1,
                    Symbol       = jsonTerm.SymbolicValue,
                    SymbolsPower = 1
                });
                return(new Factor(newTerm));
            }
            else
            {
                throw (new Exception("Unrecognized data type."));
            }
        }
Exemplo n.º 5
0
        public double Calculate(JsonTerm expression, UserAlgorithmStore store)
        {
            if (expression.Operation != Operation.Empty)
            {
                var firstFactor  = Calculate(expression.FirstParam, store);
                var secondFactor = Calculate(expression.SecondParam, store);

                switch (expression.Operation)
                {
                case Operation.Plus:
                    return(firstFactor + secondFactor);

                case Operation.Minus:
                    return(firstFactor - secondFactor);

                case Operation.Multiply:
                    return(firstFactor * secondFactor);

                case Operation.Divide:
                    return(firstFactor / secondFactor);

                case Operation.Power:
                    return(Math.Pow(firstFactor, secondFactor));

                case Operation.Mod:
                    return(firstFactor % secondFactor);

                default:
                    throw (new Exception("Unrecognized operation."));
                }
            }
            else if (expression.NumberValue != null)
            {
                return(expression.NumberValue.Value);
            }
            else if (expression.SymbolicValue != null)
            {
                return(store.NumverVariables[expression.SymbolicValue.Value.ToString()]);
            }
            else
            {
                throw (new Exception("Unrecognized operation."));
            }
        }