Создание ключевого слова foreach с помощью yacc или Bison and Flex - PullRequest
3 голосов
/ 11 сентября 2009

Я разработал интерпретированный язык программирования. Он основан на C. Проблема в том, что я хочу добавить директиву foreach и не знаю, как это сделать.

Я использую Bison и Flex в качестве генератора синтаксического анализатора и лексера.

1 Ответ

4 голосов
/ 11 сентября 2009

В вашей грамматике вам нужно выражение, похожее на следующее:

foreach := foreach ( name in name ) { statements }

Когда вы проанализируете это, вы сможете преобразовать его непосредственно в цикл while в вашем AST с дополнительным оператором, который назначает переменную в начале.

Мне кажется, это самый простой способ сделать это, но, вероятно, он будет иметь ограничения для нескольких итерируемых типов данных (например, список или массив). В этом случае вы можете рассмотреть возможность объединения всех итераций, чтобы у них был согласованный метод для получения следующего элемента.

...