Как написать рекурсивный парсер?

Разработка на C# под linux
Вода
грамматика для файла .gitmodules
Eto.Parse и как его использовать
XPath - подходит ли для адресации в любых деревьях?
1) Сначала надо написать грамматику
2) Потом написать парсер

Грамматика

Что это такое, как её записывают, какие цели ставят при создании грамматики, если её можно создать несколькими способами?
http://www.csci.csusb.edu/dick/samples/comp.text.Meta.html

EBNF -- Extended Backus Normal Form

где скачать описание EBNF:
ISO/IEC 14977 : 1996(E)
    http://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf

что почитать про EBNF:
"Extended BNF — A generic base standard", R. S. Scowen
    ( http://www.cl.cam.ac.uk/~mgk25/iso-14977-paper.pdf )

BNF -- Backus Normal Form

BNF was introduced by John Backus to the Algol 60 committee and Pete Naur worked with him to define a tool for defining Algol 60: [ algol60.syntax.html ]
Since then various extensions to BNF have appeared in every programming languages reference manual.

Pāṇini, a grammarian from India who lived sometime between 4th and 7th century BCE, presented a notation which is equivalent in its power to that of Backus and has many similar properties.

ABNF

описана в RFC

XBNF

???

BS6154

BSI (British Standards Institution). BS 6154:1981 Method of defining — syntactic metalanguage. 1981. ISBN 0-580-12530-0

Другое разное про стандарты

ISO/IEC Directives — Part 3. Drafting and presentation of International Standards. International Organization for Standardization, Geneva,1989.

ISO/IEC TR 12382:1992. Permuted index of the vocabulary of information processing. ISO/IEC Copyright Office, Geneva. 1992.

Как писать грамматику

Был такой парень, описал грамматику Санскрита (то ли в седьмом, то ли в четвёртом веке до новой эры):
https://en.wikipedia.org/wiki/Pāṇini
Pāṇini's work became known in 19th-century Europe, where it influenced modern linguistics initially through Franz Bopp, who mainly looked at Pāṇini.
Staal notes that the idea of formal rules in language – proposed by Ferdinand de Saussure in 1894 and developed by Noam Chomsky in 1957 – has origins in the European exposure to the formal rules of Pāṇinian grammar

http://stackoverflow.com/questions/7510641/tips-for-writing-good-ebnf-grammars

Набор символов ISO Latin-1

ISO 8859-1:1987, Information Processing — 8-bit single-byte coded graphic character sets — Part 1: ISO Latin Alphabet No. 1 (ISO Latin-1). ISO/IEC Copyright Office, Geneva. 1987.

Зачем он нам, если у нас есть Unicode ?

Пробелы

http://stackoverflow.com/questions/12712446/ebnf-grammar-for-list-of-words-separated-by-a-space

Приоритеты

http://stackoverflow.com/questions/9934553/extended-backus-naur-form-order-of-operations

Какие нужны утилиты

1. Компилятор из .ebnf в .cs
2. Компилятор из ANTRL в EBNF (и из других грамматик)
http://stackoverflow.com/questions/15148369/ebnf-grammar-to-antlr3
3. IDE для отладки EBNF

Какой парсер выбрать

Рекурсивный спуск

Автор Eto.Parser-а рекомендует писать кодом, а не ebnf-грамматикой.
и приводит примеры того, что в коде можно сделать, а грамматикой - нет.

Это проистекает из следующих причин:
1) стандарты на синтаксис для описания грамматики написаны неконкретно (ISO/IEC 14977);
2) ABNF (из RFC) не поддерживается в Eto.Parse по состоянию на 2015-09-07;
3) рекурсивному парсеру важно в каком порядке применяются части правил (а не должно быть важно, это недосток подхода);

Есть ли альтернативы?

https://github.com/ruffin--/SqlDbSharp/issues/3

https://en.wikipedia.org/wiki/Comparison_of_parser_generators
http://softwarerecs.stackexchange.com/questions/24630/which-parser-generator-to-use-on-mono
http://www.dmoz.org/Computers/Programming/Compilers/Lexer_and_Parser_Generators/

рекурсивному спуску вообще и Eto.Parse в частности?
и хочешь ли ты их изучать или для текущего момента попробовать дописать грамматику, пока автор помогает?
а потом оставить эту грамматику в отдельно-взятой утилите.

ну это только временный выход, ведь такую утилиту в дальнейшем прийдётся переписывать при унификации подходов.

YaccConstructor

https://github.com/YaccConstructor/YaccConstructor

RNGLR parser generator.
GLL parser generator (in active development).

Gold Parser (closed source)
Eto.Parser
Irony - https://irony.codeplex.com/
Coco/R , GPL, https://en.wikipedia.org/wiki/Coco/R
C#, LL(k), BSD, http://github.com/deveel/csharpcc
Grammatica, LL(k), Java, LGPL https://en.wikipedia.org/wiki/Grammatica
LLLPG, LL(k), LGPL, C#
Hime Parser Generator, LR(1), LALR(1), LGPL
jay, LALR(1), Java, BSD
Lapg, LALR(1), Java, GPL
SableCC, LALR(1), ???, LGPL
GPPG, LALR(1), C#, BSD, https://gppg.codeplex.com ( with GPLEX, C#, BSD, https://gplex.codeplex.com )
Antlr, Java, BSD, https://github.com/antlr/antlr4-csharp
    (requires Java for generating C# code (but the applications compiled from this C# code will not require Java to be installed))
GLRSharp, GLR, C# v4, MIT, https://github.com/jcoder58/GLRSharp
NLT, GLR, C#, MIT, http://sourceforge.net/projects/naivelangtools/
YaccConstructor, C#, GLL, Apache 2.0, http://yaccconstructor.github.io/YaccConstructor/gll.html

В общем, хотелось бы почитать опыт использования вот этих трёх (от самого обещающего до менее привлекательных):

YaccConstructor, C#, GLL, Apache 2.0, http://yaccconstructor.github.io/YaccConstructor/gll.html
GLRSharp, GLR, C# v4, MIT, https://github.com/jcoder58/GLRSharp
NLT, GLR, C#, MIT, http://sourceforge.net/projects/naivelangtools/

LLLPG, http://www.codeproject.com/Articles/664785/A-New-Parser-Generator-for-Csharp
https://github.com/sprache/sprache