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()); }
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 }
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); }
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.")); } }
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.")); } }