mirror of
https://github.com/Stone-Red-Code/YesNt-Interpreter.git
synced 2026-09-04 00:56:31 +02:00
Improve Regex performance and change .NET version to .NET 7
This commit is contained in:
@@ -6,10 +6,10 @@ using YesNt.Interpreter.Enums;
|
|||||||
using YesNt.Interpreter.Runtime;
|
using YesNt.Interpreter.Runtime;
|
||||||
using YesNt.Interpreter.Utilities;
|
using YesNt.Interpreter.Utilities;
|
||||||
|
|
||||||
namespace YesNt.CodeEditor
|
namespace YesNt.CodeEditor;
|
||||||
|
|
||||||
|
internal partial class SyntaxHighlighter
|
||||||
{
|
{
|
||||||
internal class SyntaxHighlighter
|
|
||||||
{
|
|
||||||
private readonly ReadOnlyCollection<StatementInformation> statementInformation;
|
private readonly ReadOnlyCollection<StatementInformation> statementInformation;
|
||||||
|
|
||||||
public SyntaxHighlighter(ReadOnlyCollection<StatementInformation> statementInformation)
|
public SyntaxHighlighter(ReadOnlyCollection<StatementInformation> statementInformation)
|
||||||
@@ -27,7 +27,7 @@ namespace YesNt.CodeEditor
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MatchCollection matches = Regex.Matches(input, @"!!.");
|
MatchCollection matches = EscapeSequenceRegex().Matches(input);
|
||||||
for (int i = 0; i < matches.Count; i++)
|
for (int i = 0; i < matches.Count; i++)
|
||||||
{
|
{
|
||||||
input = AddColorInformation(input, matches[i].Value, Console.ForegroundColor, SearchMode.Contains);
|
input = AddColorInformation(input, matches[i].Value, Console.ForegroundColor, SearchMode.Contains);
|
||||||
@@ -98,19 +98,19 @@ namespace YesNt.CodeEditor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
matches = Regex.Matches(input, @">[a-zA-Z0-9]+");
|
matches = VariableRegex().Matches(input);
|
||||||
for (int i = 0; i < matches.Count; i++)
|
for (int i = 0; i < matches.Count; i++)
|
||||||
{
|
{
|
||||||
input = AddColorInformation(input, matches[i].Value, ConsoleColor.Cyan, SearchMode.Contains);
|
input = AddColorInformation(input, matches[i].Value, ConsoleColor.Cyan, SearchMode.Contains);
|
||||||
}
|
}
|
||||||
|
|
||||||
matches = Regex.Matches(input, @"^<[a-zA-Z0-9]+");
|
matches = VariableDeclarationRegex().Matches(input);
|
||||||
for (int i = 0; i < matches.Count; i++)
|
for (int i = 0; i < matches.Count; i++)
|
||||||
{
|
{
|
||||||
input = AddColorInformation(input, matches[i].Value, ConsoleColor.DarkCyan, SearchMode.StartOfLine);
|
input = AddColorInformation(input, matches[i].Value, ConsoleColor.DarkCyan, SearchMode.StartOfLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
matches = Regex.Matches(input, @"^!<[a-zA-Z0-9]+");
|
matches = GlobalVariableDeclarationRegex().Matches(input);
|
||||||
for (int i = 0; i < matches.Count; i++)
|
for (int i = 0; i < matches.Count; i++)
|
||||||
{
|
{
|
||||||
input = AddColorInformation(input, matches[i].Value, ConsoleColor.Blue, SearchMode.StartOfLine);
|
input = AddColorInformation(input, matches[i].Value, ConsoleColor.Blue, SearchMode.StartOfLine);
|
||||||
@@ -122,7 +122,7 @@ namespace YesNt.CodeEditor
|
|||||||
ConsoleColor consoleColor;
|
ConsoleColor consoleColor;
|
||||||
string messagePart = part;
|
string messagePart = part;
|
||||||
|
|
||||||
string stringColor = Regex.Match(messagePart, "(?<=(\\r))(.*)(?=\\r)").Value;
|
string stringColor = StringColorRegex().Match(messagePart).Value;
|
||||||
bool succ = int.TryParse(stringColor, out int colorIndex);
|
bool succ = int.TryParse(stringColor, out int colorIndex);
|
||||||
if (succ && colorIndex >= 0 && colorIndex < 16)
|
if (succ && colorIndex >= 0 && colorIndex < 16)
|
||||||
{
|
{
|
||||||
@@ -155,5 +155,19 @@ namespace YesNt.CodeEditor
|
|||||||
};
|
};
|
||||||
return reult;
|
return reult;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
[GeneratedRegex("!!.")]
|
||||||
|
private static partial Regex EscapeSequenceRegex();
|
||||||
|
|
||||||
|
[GeneratedRegex("^<[a-zA-Z0-9]+")]
|
||||||
|
private static partial Regex VariableDeclarationRegex();
|
||||||
|
|
||||||
|
[GeneratedRegex("^!<[a-zA-Z0-9]+")]
|
||||||
|
private static partial Regex GlobalVariableDeclarationRegex();
|
||||||
|
|
||||||
|
[GeneratedRegex(">[a-zA-Z0-9]+")]
|
||||||
|
private static partial Regex VariableRegex();
|
||||||
|
|
||||||
|
[GeneratedRegex("(?<=(\\r))(.*)(?=\\r)")]
|
||||||
|
private static partial Regex StringColorRegex();
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<Platforms>AnyCPU;x64</Platforms>
|
<Platforms>AnyCPU;x64</Platforms>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
|
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
|
|||||||
@@ -9,16 +9,14 @@ using YesNt.Interpreter.Enums;
|
|||||||
using YesNt.Interpreter.Runtime;
|
using YesNt.Interpreter.Runtime;
|
||||||
using YesNt.Interpreter.Utilities;
|
using YesNt.Interpreter.Utilities;
|
||||||
|
|
||||||
namespace YesNt.Interpreter.Statements
|
namespace YesNt.Interpreter.Statements;
|
||||||
{
|
|
||||||
internal class ProcessingStatements : StatementRuntimeInformation
|
|
||||||
{
|
|
||||||
private static readonly Regex calculationRegex = new Regex(@"[0-9*+().,^%/-]+[0-9*+ ().,^%/-]+[0-9*+().,^%/-]+");
|
|
||||||
|
|
||||||
|
internal partial class ProcessingStatements : StatementRuntimeInformation
|
||||||
|
{
|
||||||
[Statement("!calc", SearchMode.EndOfLine, SpaceAround.Start, ConsoleColor.DarkYellow, Priority = Priority.High)]
|
[Statement("!calc", SearchMode.EndOfLine, SpaceAround.Start, ConsoleColor.DarkYellow, Priority = Priority.High)]
|
||||||
public void Calculate(string args)
|
public void Calculate(string args)
|
||||||
{
|
{
|
||||||
MatchCollection matches = calculationRegex.Matches(args.FromSaveString());
|
MatchCollection matches = CalculationRegex().Matches(args.FromSaveString());
|
||||||
|
|
||||||
for (int i = 0; i < matches.Count; i++)
|
for (int i = 0; i < matches.Count; i++)
|
||||||
{
|
{
|
||||||
@@ -116,5 +114,7 @@ namespace YesNt.Interpreter.Statements
|
|||||||
RuntimeInfo.Exit($"Could not find file \"{path}\"", true);
|
RuntimeInfo.Exit($"Could not find file \"{path}\"", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
[GeneratedRegex("[0-9*+().,^%/-]+[0-9*+ ().,^%/-]+[0-9*+().,^%/-]+")]
|
||||||
|
private static partial Regex CalculationRegex();
|
||||||
}
|
}
|
||||||
@@ -5,12 +5,10 @@ using YesNt.Interpreter.Attributes;
|
|||||||
using YesNt.Interpreter.Enums;
|
using YesNt.Interpreter.Enums;
|
||||||
using YesNt.Interpreter.Runtime;
|
using YesNt.Interpreter.Runtime;
|
||||||
|
|
||||||
namespace YesNt.Interpreter.Statements
|
namespace YesNt.Interpreter.Statements;
|
||||||
{
|
|
||||||
internal class VariableStatements : StatementRuntimeInformation
|
|
||||||
{
|
|
||||||
private static readonly Regex variableStatementRegex = new Regex(@">[a-zA-Z0-9]+");
|
|
||||||
|
|
||||||
|
internal partial class VariableStatements : StatementRuntimeInformation
|
||||||
|
{
|
||||||
[Statement("<", SearchMode.StartOfLine, SpaceAround.None, Priority = Priority.VeryLow)]
|
[Statement("<", SearchMode.StartOfLine, SpaceAround.None, Priority = Priority.VeryLow)]
|
||||||
public void DefineVariable(string args)
|
public void DefineVariable(string args)
|
||||||
{
|
{
|
||||||
@@ -107,7 +105,7 @@ namespace YesNt.Interpreter.Statements
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MatchCollection matches = variableStatementRegex.Matches(RuntimeInfo.CurrentLine);
|
MatchCollection matches = VariableStatementRegex().Matches(RuntimeInfo.CurrentLine);
|
||||||
|
|
||||||
for (int i = 0; i < matches.Count; i++)
|
for (int i = 0; i < matches.Count; i++)
|
||||||
{
|
{
|
||||||
@@ -119,5 +117,7 @@ namespace YesNt.Interpreter.Statements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
[GeneratedRegex(">[a-zA-Z0-9]+")]
|
||||||
|
private static partial Regex VariableStatementRegex();
|
||||||
}
|
}
|
||||||
@@ -2,10 +2,10 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace YesNt.Interpreter.Utilities
|
namespace YesNt.Interpreter.Utilities;
|
||||||
|
|
||||||
|
internal static partial class Evaluator
|
||||||
{
|
{
|
||||||
internal static class Evaluator
|
|
||||||
{
|
|
||||||
public static bool? EvaluateCondition(string input)
|
public static bool? EvaluateCondition(string input)
|
||||||
{
|
{
|
||||||
if (input.ToLower().FromSaveString().Trim() == "true")
|
if (input.ToLower().FromSaveString().Trim() == "true")
|
||||||
@@ -70,10 +70,10 @@ namespace YesNt.Interpreter.Utilities
|
|||||||
|
|
||||||
public static string Calculate(string input)
|
public static string Calculate(string input)
|
||||||
{
|
{
|
||||||
input = Regex.Replace(input, @"(\+ +\+)+", "+");
|
input = PlusPlusRegex().Replace(input, "+");
|
||||||
input = Regex.Replace(input, @"(\- +\-)+", "+");
|
input = MinusMinusRegex().Replace(input, "+");
|
||||||
input = Regex.Replace(input, @"(\- +\+)+", "-");
|
input = MinusPlusRegex().Replace(input, "-");
|
||||||
input = Regex.Replace(input, @"(\+ +\-)+", "-");
|
input = PlusMinusRegex().Replace(input, "-");
|
||||||
|
|
||||||
string yes = Calculate(input, '+');
|
string yes = Calculate(input, '+');
|
||||||
return yes;
|
return yes;
|
||||||
@@ -88,7 +88,7 @@ namespace YesNt.Interpreter.Utilities
|
|||||||
|
|
||||||
input = input.FromSaveString();
|
input = input.FromSaveString();
|
||||||
|
|
||||||
MatchCollection matches = Regex.Matches(input, @"\(([^()]+)\)");
|
MatchCollection matches = ParenthesesRegex().Matches(input);
|
||||||
while (matches.Count > 0)
|
while (matches.Count > 0)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < matches.Count; i++)
|
for (int i = 0; i < matches.Count; i++)
|
||||||
@@ -97,7 +97,7 @@ namespace YesNt.Interpreter.Utilities
|
|||||||
string ret = Calculate(calc);
|
string ret = Calculate(calc);
|
||||||
input = input.Replace(matches[i].Value, ret);
|
input = input.Replace(matches[i].Value, ret);
|
||||||
}
|
}
|
||||||
matches = Regex.Matches(input, @"\(([^()]+)\)");
|
matches = ParenthesesRegex().Matches(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
string[] parts = input.Split(op);
|
string[] parts = input.Split(op);
|
||||||
@@ -174,5 +174,19 @@ namespace YesNt.Interpreter.Utilities
|
|||||||
|
|
||||||
return number.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
return number.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
[GeneratedRegex("\\(([^()]+)\\)")]
|
||||||
|
private static partial Regex ParenthesesRegex();
|
||||||
|
|
||||||
|
[GeneratedRegex("(\\+ +\\+)+")]
|
||||||
|
private static partial Regex PlusPlusRegex();
|
||||||
|
|
||||||
|
[GeneratedRegex("(\\- +\\-)+")]
|
||||||
|
private static partial Regex MinusMinusRegex();
|
||||||
|
|
||||||
|
[GeneratedRegex("(\\- +\\+)+")]
|
||||||
|
private static partial Regex MinusPlusRegex();
|
||||||
|
|
||||||
|
[GeneratedRegex("(\\+ +\\-)+")]
|
||||||
|
private static partial Regex PlusMinusRegex();
|
||||||
}
|
}
|
||||||
@@ -23,14 +23,14 @@ namespace YesNt.Interpreter.Utilities
|
|||||||
public new void BeginOutputReadLine()
|
public new void BeginOutputReadLine()
|
||||||
{
|
{
|
||||||
Stream baseStream = StandardOutput.BaseStream;
|
Stream baseStream = StandardOutput.BaseStream;
|
||||||
output = new AsyncStreamReader(this, baseStream, new UserCallBack(FixedOutputReadNotifyUser), StandardOutput.CurrentEncoding);
|
output = new AsyncStreamReader(baseStream, new UserCallBack(FixedOutputReadNotifyUser), StandardOutput.CurrentEncoding);
|
||||||
output.BeginReadLine();
|
output.BeginReadLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
public new void BeginErrorReadLine()
|
public new void BeginErrorReadLine()
|
||||||
{
|
{
|
||||||
Stream baseStream = StandardError.BaseStream;
|
Stream baseStream = StandardError.BaseStream;
|
||||||
error = new AsyncStreamReader(this, baseStream, new UserCallBack(FixedErrorReadNotifyUser), StandardError.CurrentEncoding);
|
error = new AsyncStreamReader(baseStream, new UserCallBack(FixedErrorReadNotifyUser), StandardError.CurrentEncoding);
|
||||||
error.BeginReadLine();
|
error.BeginReadLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,17 +90,17 @@ namespace YesNt.Interpreter.Utilities
|
|||||||
public virtual Encoding CurrentEncoding => encoding;
|
public virtual Encoding CurrentEncoding => encoding;
|
||||||
public virtual Stream BaseStream => stream;
|
public virtual Stream BaseStream => stream;
|
||||||
|
|
||||||
internal AsyncStreamReader(Process process, Stream stream, UserCallBack callback, Encoding encoding) : this(process, stream, callback, encoding, 1024)
|
internal AsyncStreamReader(Stream stream, UserCallBack callback, Encoding encoding) : this(stream, callback, encoding, 1024)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal AsyncStreamReader(Process process, Stream stream, UserCallBack callback, Encoding encoding, int bufferSize)
|
internal AsyncStreamReader(Stream stream, UserCallBack callback, Encoding encoding, int bufferSize)
|
||||||
{
|
{
|
||||||
Init(process, stream, callback, encoding, bufferSize);
|
Init(stream, callback, encoding, bufferSize);
|
||||||
messageQueue = new Queue();
|
messageQueue = new Queue();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Init(Process process, Stream stream, UserCallBack callback, Encoding encoding, int bufferSize)
|
private void Init(Stream stream, UserCallBack callback, Encoding encoding, int bufferSize)
|
||||||
{
|
{
|
||||||
this.stream = stream;
|
this.stream = stream;
|
||||||
this.encoding = encoding;
|
this.encoding = encoding;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<RootNamespace>YesNt.Interpreter</RootNamespace>
|
<RootNamespace>YesNt.Interpreter</RootNamespace>
|
||||||
<ApplicationIcon />
|
<ApplicationIcon />
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
|
|||||||
Reference in New Issue
Block a user