Расширенные проблемы БНФ
У меня есть вопрос по поводу расширенного БНФ.
(* Extended BNF grammar *)
min = 5;
max = 10;
value = integer; (* How can I set the range rule: `min <= value <= max`? *)
Второй вопрос:
name = letter, { letter | decimal digit };
(* The common length of the comment line must be not more than 128 characters.
But I don't know the name's length. How can I set this restriction? *)
comment line = ';', name, ' ', 128 * [ character ], new line;
Я полностью прочитал ISO/IEC 14977:1996(E), но не нашел ответов.
Спасибо.
1 ответ
Насколько мне известно, вы не можете сделать это только с парсером BNF/EBNF, но вы можете сделать это в сочетании с некоторой последующей обработкой.
Хитрость заключается в том, чтобы анализировать текст по правилам EBNF без учета ограничений. Позже, когда вы получите абстрактное синтаксическое дерево (AST), вы используете Javascript (или любой другой язык, который вы используете для синтаксического анализа), и вы проходите через него, узел за узлом, и проверяете его на наличие ограничений.