- Add mod (%) and pow (^) operator

- Fix task creation bug
This commit is contained in:
Stone_Red
2022-03-25 23:49:13 +01:00
parent 0a4406d21f
commit 20f7f16dd9
2 changed files with 27 additions and 24 deletions
@@ -13,10 +13,14 @@ namespace YesNt.Interpreter.Statements
{ {
internal class ProcessingStatements : StatementRuntimeInformation internal class ProcessingStatements : StatementRuntimeInformation
{ {
private static readonly Regex calculationRegex = new Regex(@"((\)?)+(\(?)+[0-9]+(((\s?)+(\)?)(\s?)+\+(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\-(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\*(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\%(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\^(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\/(\s?)+(\(?)+(\s?)+)|[,.])(?=[0-9])+)+[0-9]+(\)?)+");
//new Regex(@"((\)?)+(\(?)+[0-9]+(((\s?)+(\)?)(\s?)+\+(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\-(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\*(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\/(\s?)+(\(?)+(\s?)+)|[,.])(?=[0-9])+)+[0-9]+(\)?)+");
[Statement("!calc", SearchMode.EndOfLine, SpaceAround.Start, ConsoleColor.DarkYellow, Priority = Priority.High, ExecuteInSearchMode = true)] [Statement("!calc", SearchMode.EndOfLine, SpaceAround.Start, ConsoleColor.DarkYellow, Priority = Priority.High, ExecuteInSearchMode = true)]
public void Calculate(string args) public void Calculate(string args)
{ {
MatchCollection matches = Regex.Matches(args.FromSaveString(), @"((\)?)+(\(?)+[0-9]+(((\s?)+(\)?)(\s?)+\+(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\-(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\*(\s?)+(\(?)+(\s?)+|(\s?)+(\)?)(\s?)+\/(\s?)+(\(?)+(\s?)+)|[,.])(?=[0-9])+)+[0-9]+(\)?)+"); MatchCollection matches = calculationRegex.Matches(args.FromSaveString());
for (int i = 0; i < matches.Count; i++) for (int i = 0; i < matches.Count; i++)
{ {
@@ -44,7 +48,9 @@ namespace YesNt.Interpreter.Statements
int lineNumer = RuntimeInfo.LineNumber; int lineNumer = RuntimeInfo.LineNumber;
List<Line> lines = RuntimeInfo.Lines.GetRange(0, RuntimeInfo.Lines.Count); List<Line> lines = RuntimeInfo.Lines.GetRange(0, RuntimeInfo.Lines.Count);
lines[lineNumer].Content = line; Line oldLine = lines[lineNumer];
lines[lineNumer] = new Line(line, oldLine.FileName, oldLine.LineNumber);
_ = Task.Run(() => _ = Task.Run(() =>
{ {
YesNtInterpreter interpreter = new YesNtInterpreter(); YesNtInterpreter interpreter = new YesNtInterpreter();
+19 -22
View File
@@ -1,4 +1,5 @@
using System.Text.RegularExpressions; using System;
using System.Text.RegularExpressions;
namespace YesNt.Interpreter.Utilities namespace YesNt.Interpreter.Utilities
{ {
@@ -115,20 +116,15 @@ namespace YesNt.Interpreter.Utilities
{ {
string part = p; string part = p;
switch (op) part = op switch
{ {
case '+': '+' => Calculate(part, '-'),
part = Calculate(part, '-'); '-' => Calculate(part, '*'),
break; '*' => Calculate(part, '/'),
'/' => Calculate(part, '%'),
case '-': '%' => Calculate(part, '^'),
part = Calculate(part, '*'); _ => part
break; };
case '*':
part = Calculate(part, '/');
break;
}
if (part is null) if (part is null)
{ {
@@ -160,6 +156,14 @@ namespace YesNt.Interpreter.Utilities
case '/': case '/':
number /= num; number /= num;
break; break;
case '%':
number %= num;
break;
case '^':
number = Math.Pow(number, num);
break;
} }
} }
} }
@@ -169,14 +173,7 @@ namespace YesNt.Interpreter.Utilities
} }
} }
if (number % 1 == 0) return number.ToString();
{
return number.ToString();
}
else
{
return number.ToString("F99").Trim('0');
}
} }
} }
} }