флекс и бизон: как распознать массив

Я играю с бизоном и флексом, чтобы понять, как работают переводчики. Я уже сделал несколько вещей, как диапазон ({INT:INT} или же {INT:INT:INT}), строки ({строка «здесь идет любой текст»}) и т. д., но я не могу решить, какой должен быть правильный способ помочь зубру понять, если пользователь ввел массив в форме [INT, INT, ID, ID, INT, ..., INT, ID, ID...]?

Первое, что приходит в голову, это использовать ключевое слово flex BEGIN и затем посмотрите до конца строки, но это кажется глупым, поскольку вам нужно много вещей, например, чтобы понять, является ли следующий член INT или ID, и это не очень хороший способ. Что я могу сделать еще? Я бы предпочел сделать это с бизоном, но я не знаю, как заставить бизона выглядеть рекурсивно между [ а также ] захватить все, что они содержат. Как мне это сделать?

Заранее спасибо!

1

Решение

Просто — просто сделайте рекурсивное правило.

expr :- INT | ID;
array_expr :- array_expr expr | expr;
array :- '[' array_expr ']';

Прошло много времени с тех пор, как я снялся в Bison, но это должно быть довольно близко, чтобы исправить.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector