From 7e15ef13989c72c82114097ef1a0bdee8fdfdca1 Mon Sep 17 00:00:00 2001
From: Youness KAFIA <32330908+ykafia@users.noreply.github.com>
Date: Tue, 19 Apr 2022 15:05:43 +0200
Subject: [PATCH 0001/1182] first commit
---
.gitignore | 3 +++
SDSLParser.sln | 27 ++++++++++++++++++++++++++
src/SDSLParser/Program.cs | 33 ++++++++++++++++++++++++++++++++
src/SDSLParser/SDSLParser.cs | 7 +++++++
src/SDSLParser/SDSLParser.csproj | 14 ++++++++++++++
src/SDSLParser/grammar.bnf | 16 ++++++++++++++++
src/SDSLParser/shader.sdsl | 3 +++
7 files changed, 103 insertions(+)
create mode 100644 .gitignore
create mode 100644 SDSLParser.sln
create mode 100644 src/SDSLParser/Program.cs
create mode 100644 src/SDSLParser/SDSLParser.cs
create mode 100644 src/SDSLParser/SDSLParser.csproj
create mode 100644 src/SDSLParser/grammar.bnf
create mode 100644 src/SDSLParser/shader.sdsl
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..3afdc6664a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+bin/
+obj/
+.vscode/
\ No newline at end of file
diff --git a/SDSLParser.sln b/SDSLParser.sln
new file mode 100644
index 0000000000..e785c599da
--- /dev/null
+++ b/SDSLParser.sln
@@ -0,0 +1,27 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.30114.105
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{5F88D871-B760-4857-BD74-296B07778B15}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDSLParser", "src\SDSLParser\SDSLParser.csproj", "{04B29CCB-301A-4B1B-8EE2-3866DDAA86CD}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {04B29CCB-301A-4B1B-8EE2-3866DDAA86CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04B29CCB-301A-4B1B-8EE2-3866DDAA86CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04B29CCB-301A-4B1B-8EE2-3866DDAA86CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04B29CCB-301A-4B1B-8EE2-3866DDAA86CD}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {04B29CCB-301A-4B1B-8EE2-3866DDAA86CD} = {5F88D871-B760-4857-BD74-296B07778B15}
+ EndGlobalSection
+EndGlobal
diff --git a/src/SDSLParser/Program.cs b/src/SDSLParser/Program.cs
new file mode 100644
index 0000000000..001094fb09
--- /dev/null
+++ b/src/SDSLParser/Program.cs
@@ -0,0 +1,33 @@
+using Eto.Parse;
+using Eto.Parse.Grammars;
+
+var ws = Terminals.WhiteSpace.Repeat(0);
+
+// parse a value with or without brackets
+var valueParser = Terminals.Set('(')
+ .Then(Terminals.AnyChar.Repeat().Until(ws.Then(')')).Named("value"))
+ .Then(Terminals.Set(')'))
+ .SeparatedBy(ws)
+ .Or(Terminals.WhiteSpace.Inverse().Repeat().Named("value"));
+
+// our grammar
+var grammar = new Grammar(
+ ws
+ .Then(valueParser.Named("first"))
+ .Then(valueParser.Named("second"))
+ .Then(Terminals.End)
+ .SeparatedBy(ws)
+);
+var grammar2 = new Grammar(
+ ws
+ .Then(Terminals.Set("shader"))
+ .Then(valueParser.Named("second"))
+ .Then(Terminals.End)
+ .SeparatedBy(ws)
+);
+
+var input = " jojo ( vs dio ) ";
+var matched = grammar.Match(input);
+var parsed = grammar.Parse(new ParseArgs(null));
+var value = matched["second"]["value"].Value;
+Console.WriteLine($"Hello, {value}!");
diff --git a/src/SDSLParser/SDSLParser.cs b/src/SDSLParser/SDSLParser.cs
new file mode 100644
index 0000000000..f7e369f125
--- /dev/null
+++ b/src/SDSLParser/SDSLParser.cs
@@ -0,0 +1,7 @@
+namespace SDSLParser
+{
+ public class ShaderParser
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/src/SDSLParser/SDSLParser.csproj b/src/SDSLParser/SDSLParser.csproj
new file mode 100644
index 0000000000..580d8f16ed
--- /dev/null
+++ b/src/SDSLParser/SDSLParser.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/src/SDSLParser/grammar.bnf b/src/SDSLParser/grammar.bnf
new file mode 100644
index 0000000000..b46f62aacb
--- /dev/null
+++ b/src/SDSLParser/grammar.bnf
@@ -0,0 +1,16 @@
+(* := is an extension to define a literal with no whitespace between repeats and sequences *)
+ws := {? Terminals.WhiteSpace ?};
+
+letter or digit := ? Terminals.LetterOrDigit ?;
+
+simple value := letter or digit, {letter or digit};
+
+bracket value = simple value, {simple value};
+
+optional bracket = '(', bracket value, ')' | simple value;
+
+first = optional bracket;
+
+second = optional bracket;
+
+grammar = ws, first, second, ws;
\ No newline at end of file
diff --git a/src/SDSLParser/shader.sdsl b/src/SDSLParser/shader.sdsl
new file mode 100644
index 0000000000..ffb0a21a95
--- /dev/null
+++ b/src/SDSLParser/shader.sdsl
@@ -0,0 +1,3 @@
+shader Toto{
+ float a;
+}
\ No newline at end of file
From 635cf481dcc03c6b5cea14cbe8586fa2a3feaa68 Mon Sep 17 00:00:00 2001
From: Youness KAFIA <32330908+ykafia@users.noreply.github.com>
Date: Tue, 19 Apr 2022 15:21:01 +0200
Subject: [PATCH 0002/1182] Update parser
---
src/SDSLParser/Program.cs | 32 +++++---------------------------
src/SDSLParser/SDSLGrammar.cs | 35 +++++++++++++++++++++++++++++++++++
src/SDSLParser/SDSLParser.cs | 7 -------
src/SDSLParser/shader.sdsl | 4 ++--
4 files changed, 42 insertions(+), 36 deletions(-)
create mode 100644 src/SDSLParser/SDSLGrammar.cs
delete mode 100644 src/SDSLParser/SDSLParser.cs
diff --git a/src/SDSLParser/Program.cs b/src/SDSLParser/Program.cs
index 001094fb09..491175e59c 100644
--- a/src/SDSLParser/Program.cs
+++ b/src/SDSLParser/Program.cs
@@ -1,33 +1,11 @@
using Eto.Parse;
using Eto.Parse.Grammars;
-var ws = Terminals.WhiteSpace.Repeat(0);
-// parse a value with or without brackets
-var valueParser = Terminals.Set('(')
- .Then(Terminals.AnyChar.Repeat().Until(ws.Then(')')).Named("value"))
- .Then(Terminals.Set(')'))
- .SeparatedBy(ws)
- .Or(Terminals.WhiteSpace.Inverse().Repeat().Named("value"));
+var shaderf = File.ReadAllText("./shader.sdsl");
-// our grammar
-var grammar = new Grammar(
- ws
- .Then(valueParser.Named("first"))
- .Then(valueParser.Named("second"))
- .Then(Terminals.End)
- .SeparatedBy(ws)
-);
-var grammar2 = new Grammar(
- ws
- .Then(Terminals.Set("shader"))
- .Then(valueParser.Named("second"))
- .Then(Terminals.End)
- .SeparatedBy(ws)
-);
+var parser = new SDSLParser.SDSLGrammar();
-var input = " jojo ( vs dio ) ";
-var matched = grammar.Match(input);
-var parsed = grammar.Parse(new ParseArgs(null));
-var value = matched["second"]["value"].Value;
-Console.WriteLine($"Hello, {value}!");
+var matched = parser.Match(shaderf);
+
+Console.WriteLine($"Hello, world!");
diff --git a/src/SDSLParser/SDSLGrammar.cs b/src/SDSLParser/SDSLGrammar.cs
new file mode 100644
index 0000000000..d9a28b7ad1
--- /dev/null
+++ b/src/SDSLParser/SDSLGrammar.cs
@@ -0,0 +1,35 @@
+using Eto.Parse;
+using Eto.Parse.Parsers;
+
+namespace SDSLParser
+{
+ public class SDSLGrammar : Grammar
+ {
+ public SDSLGrammar() : base("sdsl")
+ {
+ EnableMatchEvents = false;
+ CaseSensitive = true;
+
+ var shaderDeclaration = Terminals.Set("shader");
+ var name = Terminals.Repeat(new RepeatCharItem(Char.IsLetter, 1, 1), new RepeatCharItem(Char.IsLetterOrDigit, 0));
+ var lbracket = Terminals.Set("{");
+ var rbracket = Terminals.Set("}");
+
+ // var sdstring = new StringParser { AllowEscapeCharacters = true, Name = "string" };
+ // var sdnumber = new NumberParser { AllowExponent = true, AllowSign = true, AllowDecimal = true, Name = "number" };
+ // var sdboolean = new BooleanTerminal { Name = "bool", TrueValues = new string[] { "true" }, FalseValues = new string[] { "false" }, CaseSensitive = false };
+ // var sdname = new StringParser { AllowEscapeCharacters = true, Name = "name" };
+ // var sdnull = new LiteralTerminal { Value = "null", Name = "null", CaseSensitive = false };
+ var ws = new RepeatCharTerminal(char.IsWhiteSpace);
+ // var commaDelimiter = new RepeatCharTerminal(new RepeatCharItem(char.IsWhiteSpace), ',', new RepeatCharItem(char.IsWhiteSpace));
+
+ Inner =
+ ws
+ .Then(shaderDeclaration)
+ .Then(name)
+ .Then(lbracket)
+ .Then(rbracket);
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/SDSLParser/SDSLParser.cs b/src/SDSLParser/SDSLParser.cs
deleted file mode 100644
index f7e369f125..0000000000
--- a/src/SDSLParser/SDSLParser.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace SDSLParser
-{
- public class ShaderParser
- {
-
- }
-}
\ No newline at end of file
diff --git a/src/SDSLParser/shader.sdsl b/src/SDSLParser/shader.sdsl
index ffb0a21a95..2bc058c7db 100644
--- a/src/SDSLParser/shader.sdsl
+++ b/src/SDSLParser/shader.sdsl
@@ -1,3 +1,3 @@
-shader Toto{
- float a;
+shader Toto {
+
}
\ No newline at end of file
From 5b00eb0d94903e5aaca72d1c760e5651e811a0bf Mon Sep 17 00:00:00 2001
From: Youness KAFIA <32330908+ykafia@users.noreply.github.com>
Date: Tue, 19 Apr 2022 16:02:51 +0200
Subject: [PATCH 0003/1182] Grammar correction
---
src/SDSLParser/Program.cs | 14 +++++++++++++-
src/SDSLParser/SDSLGrammar.cs | 8 ++------
src/SDSLParser/grammar.bnf | 16 ----------------
src/SDSLParser/grammar.ebnf | 16 ++++++++++++++++
src/SDSLParser/shader.sdsl | 4 +---
5 files changed, 32 insertions(+), 26 deletions(-)
delete mode 100644 src/SDSLParser/grammar.bnf
create mode 100644 src/SDSLParser/grammar.ebnf
diff --git a/src/SDSLParser/Program.cs b/src/SDSLParser/Program.cs
index 491175e59c..a51d2f88f7 100644
--- a/src/SDSLParser/Program.cs
+++ b/src/SDSLParser/Program.cs
@@ -1,5 +1,6 @@
using Eto.Parse;
using Eto.Parse.Grammars;
+using System.Diagnostics;
var shaderf = File.ReadAllText("./shader.sdsl");
@@ -8,4 +9,15 @@
var matched = parser.Match(shaderf);
-Console.WriteLine($"Hello, world!");
+
+var input = " hello ( parsing world ) ";
+
+// our grammar
+var grammar = new EbnfGrammar(EbnfStyle.Iso14977).Build(File.ReadAllText("./grammar.ebnf"), "grammar");
+
+
+var s = new Stopwatch();
+s.Start();
+var match = grammar.Match(shaderf);
+s.Stop();
+Console.WriteLine($"parsing time : {s.Elapsed}");
diff --git a/src/SDSLParser/SDSLGrammar.cs b/src/SDSLParser/SDSLGrammar.cs
index d9a28b7ad1..d81c3deb75 100644
--- a/src/SDSLParser/SDSLGrammar.cs
+++ b/src/SDSLParser/SDSLGrammar.cs
@@ -11,7 +11,7 @@ public SDSLGrammar() : base("sdsl")
CaseSensitive = true;
var shaderDeclaration = Terminals.Set("shader");
- var name = Terminals.Repeat(new RepeatCharItem(Char.IsLetter, 1, 1), new RepeatCharItem(Char.IsLetterOrDigit, 0));
+ var name = Terminals.Repeat(new RepeatCharItem(Char.IsLetter), new RepeatCharItem(Char.IsLetterOrDigit, 0));
var lbracket = Terminals.Set("{");
var rbracket = Terminals.Set("}");
@@ -24,11 +24,7 @@ public SDSLGrammar() : base("sdsl")
// var commaDelimiter = new RepeatCharTerminal(new RepeatCharItem(char.IsWhiteSpace), ',', new RepeatCharItem(char.IsWhiteSpace));
Inner =
- ws
- .Then(shaderDeclaration)
- .Then(name)
- .Then(lbracket)
- .Then(rbracket);
+ ws & shaderDeclaration & ws & name & lbracket & rbracket;
}
}
diff --git a/src/SDSLParser/grammar.bnf b/src/SDSLParser/grammar.bnf
deleted file mode 100644
index b46f62aacb..0000000000
--- a/src/SDSLParser/grammar.bnf
+++ /dev/null
@@ -1,16 +0,0 @@
-(* := is an extension to define a literal with no whitespace between repeats and sequences *)
-ws := {? Terminals.WhiteSpace ?};
-
-letter or digit := ? Terminals.LetterOrDigit ?;
-
-simple value := letter or digit, {letter or digit};
-
-bracket value = simple value, {simple value};
-
-optional bracket = '(', bracket value, ')' | simple value;
-
-first = optional bracket;
-
-second = optional bracket;
-
-grammar = ws, first, second, ws;
\ No newline at end of file
diff --git a/src/SDSLParser/grammar.ebnf b/src/SDSLParser/grammar.ebnf
new file mode 100644
index 0000000000..f6a0c83ad8
--- /dev/null
+++ b/src/SDSLParser/grammar.ebnf
@@ -0,0 +1,16 @@
+(* := is an extension to define a literal with no whitespace between repeats and sequences *)
+ws := {? Terminals.WhiteSpace ?};
+
+letter_or_digit := ? Terminals.LetterOrDigit ?;
+
+simple_value := letter_or_digit, {letter_or_digit};
+
+bracket_value = simple value, {simple value};
+
+expr = "{", "}";
+
+first = optional_bracket;
+
+second = optional_bracket;
+
+grammar = ws, "shader", simple_value, expr;
\ No newline at end of file
diff --git a/src/SDSLParser/shader.sdsl b/src/SDSLParser/shader.sdsl
index 2bc058c7db..419801ce58 100644
--- a/src/SDSLParser/shader.sdsl
+++ b/src/SDSLParser/shader.sdsl
@@ -1,3 +1 @@
-shader Toto {
-
-}
\ No newline at end of file
+shader Toto {}
\ No newline at end of file
From 9a568410a395256c4a58504efc35c5284c5d44f6 Mon Sep 17 00:00:00 2001
From: Youness KAFIA <32330908+ykafia@users.noreply.github.com>
Date: Tue, 19 Apr 2022 16:46:16 +0200
Subject: [PATCH 0004/1182] update bnf eol
---
src/SDSLParser/SDSLGrammar.cs | 2 +-
src/SDSLParser/grammar.ebnf | 8 ++++++--
src/SDSLParser/shader.sdsl | 4 +++-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/SDSLParser/SDSLGrammar.cs b/src/SDSLParser/SDSLGrammar.cs
index d81c3deb75..7122f5e043 100644
--- a/src/SDSLParser/SDSLGrammar.cs
+++ b/src/SDSLParser/SDSLGrammar.cs
@@ -9,7 +9,7 @@ public SDSLGrammar() : base("sdsl")
{
EnableMatchEvents = false;
CaseSensitive = true;
-
+
var shaderDeclaration = Terminals.Set("shader");
var name = Terminals.Repeat(new RepeatCharItem(Char.IsLetter), new RepeatCharItem(Char.IsLetterOrDigit, 0));
var lbracket = Terminals.Set("{");
diff --git a/src/SDSLParser/grammar.ebnf b/src/SDSLParser/grammar.ebnf
index f6a0c83ad8..7de10a6a79 100644
--- a/src/SDSLParser/grammar.ebnf
+++ b/src/SDSLParser/grammar.ebnf
@@ -1,5 +1,7 @@
(* := is an extension to define a literal with no whitespace between repeats and sequences *)
ws := {? Terminals.WhiteSpace ?};
+eol := ? Terminals.Eol ?, {? Terminals.Eol ?};
+
letter_or_digit := ? Terminals.LetterOrDigit ?;
@@ -7,10 +9,12 @@ simple_value := letter_or_digit, {letter_or_digit};
bracket_value = simple value, {simple value};
-expr = "{", "}";
+expr := [eol], [ws], [eol];
+
+block := "{", expr, "}";
first = optional_bracket;
second = optional_bracket;
-grammar = ws, "shader", simple_value, expr;
\ No newline at end of file
+grammar = ws, "shader", simple_value, block;
\ No newline at end of file
diff --git a/src/SDSLParser/shader.sdsl b/src/SDSLParser/shader.sdsl
index 419801ce58..ee7eccba51 100644
--- a/src/SDSLParser/shader.sdsl
+++ b/src/SDSLParser/shader.sdsl
@@ -1 +1,3 @@
-shader Toto {}
\ No newline at end of file
+shader Toto {
+
+}
\ No newline at end of file
From 7188a78def71eb764f1feabca256eb71f84a4464 Mon Sep 17 00:00:00 2001
From: Youness KAFIA <32330908+ykafia@users.noreply.github.com>
Date: Tue, 19 Apr 2022 17:24:56 +0200
Subject: [PATCH 0005/1182] Added c bnf for inspiration
---
src/SDSLParser/c.bnf | 231 ++++++++++++++++++++++++++++++++++++
src/SDSLParser/grammar.ebnf | 21 ++--
src/SDSLParser/shader.sdsl | 4 +-
3 files changed, 247 insertions(+), 9 deletions(-)
create mode 100644 src/SDSLParser/c.bnf
diff --git a/src/SDSLParser/c.bnf b/src/SDSLParser/c.bnf
new file mode 100644
index 0000000000..4008ba35f5
--- /dev/null
+++ b/src/SDSLParser/c.bnf
@@ -0,0 +1,231 @@
+The syntax of C in Backus-Naur Form
+ ::= {}*
+
+ ::=
+ |
+
+ ::= {}* {}*
+
+ ::=
+ |
+ |
+
+ ::= auto
+ | register
+ | static
+ | extern
+ | typedef
+
+ ::= void
+ | char
+ | short
+ | int
+ | long
+ | float
+ | double
+ | signed
+ | unsigned
+ |
+ |
+ |
+
+ ::= { {}+ }
+ | { {}+ }
+ |
+
+ ::= struct
+ | union
+
+ ::= {}*
+
+ ::=
+ |
+
+ ::=
+ | ,
+
+ ::=
+ | :
+ | :
+
+ ::= {}?
+
+ ::= * {}* {}?
+
+ ::= const
+ | volatile
+
+ ::=
+ | ( )
+ | [ {}? ]
+ | ( )
+ | ( {}* )
+
+ ::=
+
+ ::=
+ | ? :
+
+ ::=
+ | ||
+
+ ::=
+ | &&
+
+ ::=
+ | |
+
+ ::=
+ | ^
+
+ ::=
+ | &
+
+ ::=
+ | ==
+ | !=
+
+ ::=
+ | <
+ | >
+ | <=
+ | >=
+
+ ::=
+ | <<
+ | >>
+
+ ::=
+ | +
+ | -
+
+ ::=
+ | *
+ | /
+ | %
+
+ ::=
+ | ( )
+
+ ::=
+ | ++
+ | --
+ |
+ | sizeof
+ | sizeof
+
+ ::=
+ | [ ]
+ | ( {}* )
+ | .
+ | ->
+ | ++
+ | --
+
+ ::=
+ |
+ |
+ | ( )
+
+ ::=
+ |
+ |
+ |
+
+ ::=
+ | ,
+
+ ::=
+ |
+
+ ::= =
+ | *=
+ | /=
+ | %=
+ | +=
+ | -=
+ | <<=
+ | >>=
+ | &=
+ | ^=
+ | |=
+
+ ::= &
+ | *
+ | +
+ | -
+ | ~
+ | !
+
+ ::= {}+ {}?
+
+ ::=
+ | , ...
+
+ ::=
+ | ,
+
+ ::= {}+
+ | {}+
+ | {}+
+
+ ::=
+ |
+ |
+
+ ::= ( )
+ | {}? [ {}? ]
+ | {}? ( {}? )
+
+ ::= enum { }
+ | enum { }
+ | enum
+
+ ::=
+ | ,
+
+ ::=
+ | =
+
+ ::=
+
+ ::= {}+ {}* ;
+
+ ::=
+ | =
+
+ ::=
+ | { }
+ | { , }
+
+ ::=
+ | ,
+
+ ::= { {}* {}* }
+
+ ::=
+ |
+ |
+ |
+ |
+ |
+
+ ::= :
+ | case :
+ | default :
+
+ ::= {}? ;
+
+ ::= if ( )
+ | if ( ) else
+ | switch ( )
+
+ ::= while ( )
+ | do while (