?
you can also register other extensions via the EbnfGrammar.SpecialParsers dictionary..
for example, if you want to use the StringParser, you can do: myEbnfGrammar.SpecialParsers["StringParser"] = new StringParser();
then in the grammar: My String Parser := ? StringParser ?
You can do that using the DisplayParserWriter.. e.g. Console.WriteLine(new DisplayParserWriter().Write(myGrammarOrParser));
Eto.Parse.Writers.DisplayParserWriter
"=" и ":="
В README.md написано, что при использовани и второго отключается автоматическое удаление пробелных символов (то, что мне надо)
Порядок правил важен
Если правило может быть пустым, оно срабатывает и последующие не проверяются>
До некоего терминатор
I want to define strings which ends by specific sequence of characters
myEbnfGrammar.SpecialParsers["UntilEOF"] = (+Terminals.AnyChar).Until("MYSEQUENCE"); (;
no way to do that using ebnf I'm afraid.. at least with Eto.Parse.
Как записывать спецсимволы
Я не понимаю, как записать '\n' в EBNF:
malformed_line := { malformed_line_unit } ;
malformed_line_unit := ? Terminals.AnyChar ? - '\n';
> ast.Matches ["malformed_line", true].Matches[33]
{
}
Empty: false
HasMatches: false
Index: 33
Length: 1
Matches: Count = 0
Name: "malformed_line_unit"
Parser: {Eto.Parse.UnaryParser}
Scanner: {Eto.Parse.Scanners.StringScanner}
StringValue: "\n"
Success: true
Tag: (null)
Text: "\n"
Value: "\n"
Static members:
Non-public members:
>
Можно создать терминал из одного символа программно:
https://github.com/picoe/Eto.Parse/blob/master/Eto.Parse/Terminals.cs#L48
var cr = Terminals.Set("\n"); // Set - статическая функция, строку приобразовывает в массив символов
Дальше надо из терминала создать правило (то есть дать терминалу имя в грамматике), и добавить правило в грамматику (возможно создание и добавление - это одно действие?)
case "hex character":
return new SingleCharTerminal((char)int.Parse(child.Text.Substring(2), NumberStyles.HexNumber));
Substring(2) - пропускает 0x ?
NumberStyles.HexNumber - это из System.Globalization (.Net framwork)
Indicates that the AllowLeadingWhite, AllowTrailingWhite, and AllowHexSpecifier styles are used. This is a composite number style.
AllowHexSpecifier flag indicates that the string to be parsed is always interpreted as a hexadecimal value. The only individual field flags that can be used with AllowHexSpecifier are AllowLeadingWhite and AllowTrailingWhite.
hex character - а где описано это правило EBNF ?
IDE нет
well depends on what you mean by "ide".. a simple editor/debugger wouldn't take much to put together initially..
but maybe it wouldn't meet expectations
the main difficulty of Eto.Parse is because it's a recursive descent parser instead of a state parser.. order of rules counts
GrammarCompiler
Есть проект
https://github.com/furesoft/GrammarCompiler
он позволяет из файла-грамматики создать .cs-файл, который всё равно будет зависить от библиотеки с классами,
зато не потребует отдельного файла .ebnf (пф, как будто это проблема файл в ресурсы или в код запихнуть)