private ExpressionParserOutput ParseStringExpression(string expression) { var sc = new StringExpressionParser { Variables = Variables }; sc.Compile(expression, Output.StringCounter, Output.LoopCounter); Output.StringCounter = sc.Output.StringCounter; Output.LoopCounter = sc.Output.LoopCounter; Output.InitCode = Output.InitCode + sc.Output.InitCode; foreach (var f in sc.Output.Functions) { if (!Output.Functions.Contains(f)) { Output.Functions.Add(f); } } foreach (KeyValuePair <string, string> kvp in sc.Variables) { if (!Variables.ContainsKey(kvp.Key)) { Variables.Add(kvp.Key, kvp.Value); } } return(sc.Output); }
private ExpressionParserOutput ParseStringExpression(string expression) { var sc = new StringExpressionParser { Variables = Variables }; sc.Compile(expression, Output.StringCounter, Output.LoopCounter); Output.StringCounter = sc.Output.StringCounter; Output.LoopCounter = sc.Output.LoopCounter; Output.InitCode = Output.InitCode + sc.Output.InitCode; foreach (var f in sc.Output.Functions) { AddFunction(f); } return(sc.Output); }
private void DoInstr(TokenParser parser) { SkipWhiteSpace(parser); string exp1 = GetNumericExpression(parser, false); SkipWhiteSpace(parser); // Should be a comma parser.GetToken(); SkipWhiteSpace(parser); string exp2 = GetStringExpression(parser); SkipWhiteSpace(parser); // Should be a comma parser.GetToken(); SkipWhiteSpace(parser); string exp3 = GetStringExpression(parser).Trim(); //exp3 = exp3.Remove(exp3.Length - 1, 1); SkipWhiteSpace(parser); // Should be closing parenthesis parser.GetToken(); SkipWhiteSpace(parser); StringExpressionParser sourceString = new StringExpressionParser { Variables = Variables }; sourceString.Compile(exp2, Output.StringCounter, Output.LoopCounter); Output.StringCounter = sourceString.Output.StringCounter; Output.LoopCounter = sourceString.Output.LoopCounter; Output.BoolCounter = sourceString.Output.BoolCounter; Output.InitCode = Output.InitCode + sourceString.Output.InitCode; foreach (Functions f in sourceString.Output.Functions) { if (!Output.Functions.Contains(f)) { Output.Functions.Add(f); } } string param2Code = sourceString.Output.Output; StringExpressionParser destString = new StringExpressionParser { Variables = Variables }; destString.Compile(exp3, Output.StringCounter, Output.LoopCounter); Output.StringCounter = destString.Output.StringCounter; Output.LoopCounter = destString.Output.LoopCounter; Output.BoolCounter = destString.Output.BoolCounter; Output.InitCode = Output.InitCode + destString.Output.InitCode; foreach (Functions f in destString.Output.Functions) { if (!Output.Functions.Contains(f)) { Output.Functions.Add(f); } } string param3Code = destString.Output.Output; NumericExpressionParser startIndex = new NumericExpressionParser { Variables = Variables }; startIndex.Compile(exp1, Output.StringCounter, Output.LoopCounter); Output.StringCounter = startIndex.Output.StringCounter; Output.LoopCounter = startIndex.Output.LoopCounter; Output.BoolCounter = startIndex.Output.BoolCounter; Output.InitCode = Output.InitCode + startIndex.Output.InitCode; Output.Output = Output.Output + startIndex.Output.Output; Output.Output = Output.Output + " push x" + Environment.NewLine; Output.Output = Output.Output + param2Code; Output.Output = Output.Output + " push x" + Environment.NewLine; Output.Output = Output.Output + param3Code; Output.Output = Output.Output + " call funcINSTR" + Environment.NewLine; }