В этой теме неправильно следующее:
1) BNF и EBNF имеют множество разных синтаксисов каждая.
Сравнение синтаксисов
ISO/IEC 14977:1996
EBNF от W3C
ABNF - RFC5234 (https://www.rfc-editor.org/rfc/rfc5234)
Какая-то грамматика:
https://github.com/ArsenShnurkov/rus_gr … ntax2.ebnf
Не по теме:
упоминание ABNF
NuShaman разбирается в теме BNF
2) у грамматик есть более-менее математические определения, в которых грамматика состоит из частей, например:
Контекстно-свободная грамматика (КС-грамматика) - это четвёрка:
G = (N, Σ, P, S), где:
N - конечное множество нетерминальных символов
Σ - конечное множество терминальных символов (токенов).
P - конечное множество правил вывода, т.е. правил формирования нетерминальных символов из токенов и нетерминальных символов.
S - начальный символ грамматики (скорее всего нетерминальный символ).
Правило переписывания (production)
Состоит из левой и правой части. В левой части находится нетерминальный символ
(Для терминальные символов не может существовать правил переписывания, потому что терминальные символы - это символы алфавита входной строки)
Правая часть - это цепочка из терминалов, нетерминалов и, возможно, дополнительного синтаксиса.
3) ну так вот, нужно писать библиотеку с объектами для каждой части и функциями, соответствующими операциям с этими объектами (добавить правило в грамматику, добавить терминал в правило, добавить нетерминал в правило)
4) на основе этой библиотеки делать работу с абстрактным синтаксическим деревом в действиях парсера грамматики
ну и обеспечивать взаимодействие - GObject Introspection
Отредактировано Лис (2023-04-01 16:43:42)