Расширенные проблемы БНФ

У меня есть вопрос по поводу расширенного БНФ.

(* 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 (или любой другой язык, который вы используете для синтаксического анализа), и вы проходите через него, узел за узлом, и проверяете его на наличие ограничений.

Другие вопросы по тегам