Расширенные задачи BNF

У меня есть вопрос о расширенном BNF.

(* 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), но не нашел ответов.

Спасибо.


person Andrey Bushman    schedule 22.07.2013    source источник


Ответы (1)


Насколько мне известно, вы не можете сделать это только с парсером BNF/EBNF, но вы можете сделать это в сочетании с некоторой постобработкой.

Хитрость заключается в том, чтобы разобрать текст по правилам EBNF, не заботясь об ограничениях. Позже, когда вы получите абстрактное синтаксическое дерево (AST), вы используете Javascript (или любой другой язык, который вы используете для синтаксического анализа), и вы проходите его, узел за узлом, и проверяете его на наличие ограничений.

person ivanv    schedule 17.08.2016