From afb04df4a649f48d3b3d1480bdb754a7b7537e83 Mon Sep 17 00:00:00 2001 From: Suzanne Soy Date: Sun, 30 Aug 2020 16:11:50 +0000 Subject: [PATCH] Lexer on IImmutableEnumerable (replayable streams, leaves open the possibility to make coroutines to update the lexer's tokens later) --- .gitignore | 5 +- F.sed | 38 +++ Lexer.cs | 96 +++++--- Makefile | 8 +- Parser.cs | 42 +--- Utils/Enumerable.cs | 28 +++ Utils/Func.cs | 48 +++- Utils/Global.cs | 9 + .../Immutable/Enumerator/ExtensionMethods.cs | 220 ++++++++++++++++++ .../Enumerator/IImmutableEnumerator.cs | 10 + .../Enumerator/IImmutableEnumeratorElement.cs | 12 + .../Enumerator/ImmutableEnumerator.cs | 119 ++++++++++ .../Enumerator/ImmutableEnumeratorElement.cs | 92 ++++++++ Utils/Immutable/Enumerator/Last.cs | 34 +++ Utils/Immutable/Enumerator/LazyList.cs | 49 ++++ .../Enumerator/PureImmutableEnumerator.cs | 49 ++++ .../PureImmutableEnumeratorElement.cs | 47 ++++ Utils/Immutable/Enumerator/State.cs | 64 +++++ Utils/Immutable/EnumeratorGenerator.cs | 20 ++ Utils/Immutable/EquatableDictionary.cs | 96 ++++++++ Utils/Immutable/Option.cs | 7 + Utils/Immutable/Rope.cs | 33 +++ Utils/Immutable/RopeGenerator.cs | 19 ++ 23 files changed, 1077 insertions(+), 68 deletions(-) create mode 100644 F.sed create mode 100644 Utils/Immutable/Enumerator/ExtensionMethods.cs create mode 100644 Utils/Immutable/Enumerator/IImmutableEnumerator.cs create mode 100644 Utils/Immutable/Enumerator/IImmutableEnumeratorElement.cs create mode 100644 Utils/Immutable/Enumerator/ImmutableEnumerator.cs create mode 100644 Utils/Immutable/Enumerator/ImmutableEnumeratorElement.cs create mode 100644 Utils/Immutable/Enumerator/Last.cs create mode 100644 Utils/Immutable/Enumerator/LazyList.cs create mode 100644 Utils/Immutable/Enumerator/PureImmutableEnumerator.cs create mode 100644 Utils/Immutable/Enumerator/PureImmutableEnumeratorElement.cs create mode 100644 Utils/Immutable/Enumerator/State.cs create mode 100644 Utils/Immutable/EnumeratorGenerator.cs create mode 100644 Utils/Immutable/EquatableDictionary.cs create mode 100644 Utils/Immutable/Rope.cs create mode 100644 Utils/Immutable/RopeGenerator.cs diff --git a/.gitignore b/.gitignore index f9d5d37..7bf7e3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /tests_results /main.exe /main.exe.mdb -/*Generated.cs -/*Generator.exe \ No newline at end of file +*Generated.cs +*GeneratedF.cs +*Generator.exe diff --git a/F.sed b/F.sed new file mode 100644 index 0000000..13bffc0 --- /dev/null +++ b/F.sed @@ -0,0 +1,38 @@ +#!/usr/bin/env sed -nf + +/^[^ ].*/p + +/\[F\]/,/^ *)/{ + s/\( *\)private partial class \(.*\) {/\1\2/; + t classHeader; + b notClassHeader; + :classHeader + h; + s/\( *\)\(.*\)/\1private partial class \2 : IEqF