Psw.Scanners
1.1.1
dotnet add package Psw.Scanners --version 1.1.1
NuGet\Install-Package Psw.Scanners -Version 1.1.1
<PackageReference Include="Psw.Scanners" Version="1.1.1" />
paket add Psw.Scanners --version 1.1.1
#r "nuget: Psw.Scanners, 1.1.1"
// Install Psw.Scanners as a Cake Addin #addin nuget:?package=Psw.Scanners&version=1.1.1 // Install Psw.Scanners as a Cake Tool #tool nuget:?package=Psw.Scanners&version=1.1.1
Scanners
A set of high performance Scanners implemented in C# for low-level text/script parsing.
A Scanner is used to scan over and extract Tokens from text, check for strings or characters (delimiters), skip over text etc.
Simple scanning example:
using Psw.Scanners;
bool ScanSample() {
var sample = " FuncName (prm1, 'prm2') { sample body }"; // Text to parse
var scn = new ScriptScanner(sample);
// Use the scanner ErrorLog for formatted error reporting
bool Error(string msg) {
scn.LogError(msg);
Console.WriteLine(scn.ErrorLog.AsConsoleError("Sample Error"));
return false;
}
scn.SkipSp();
if (!scn.StdIdent()) return Error("Function name expected");
var funcName = scn.Token;
scn.SkipSp();
if (!scn.IsPeekCh('(')) return Error("( expected");
var prm = scn.ScanList();
if (prm == null) return Error("Parameters expected");
scn.SkipSp();
if (!scn.IsPeekCh('{')) return Error("{ expected");
if (!scn.ScanBlock()) return Error("body expected");
var body = scn.TrimToken;
Console.WriteLine($"Result: {funcName}({string.Join(',', prm)}) {{{body}}}");
return true;
}
Sample output:
Result: FuncName(prm1,prm2) {sample body}
Or for an Error:
Sample Error
FuncName (prm1, 'prm2') sample body }
--------------------------^ (Ln:1 Ch:27)
Parse error: { expected
FYI: the above parsing can be implemented using Flow Expressions
Flow Expressions are a powerful and novel mechanism for building complex inline Parsers and other logical flow systems.
using Psw.FlowExpressions
void FexScanSample() {
var fex = new FexParser(" FuncName (prm1, 'prm2') { sample body }");
string funcName = "", body = "";
List<string> prm = null;
var funcParse = fex.Seq(s => s.GlobalPreOp(c => c.SkipSp())
.StdIdent().ActToken(t => funcName = t).OnFail("Function name expected")
.PeekCh('(').OnFail("( expected")
.ScanList().ActValue<List<string>>(v => prm = v).OnFail("Parameters expected")
.PeekCh('{').OnFail("{ expected")
.ScanBlock().ActTrimToken(t => body = t));
Console.WriteLine(fex.Run(funcParse, () => $"Result: {funcName}({string.Join(',', prm)}) {{{body}}}", e => e.AsConsoleError("Error")));
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Psw.Scanners:
Package | Downloads |
---|---|
Psw.FlowExpressions
Construct, ready to run, Parsers of any complexity using a declarative fluent syntax in C#. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Net 8 support added, net 7 removed.