Создание ключевого слова foreach с помощью yacc или Bison and Flex
-
05-07-2019 - |
Вопрос
Я разработал интерпретированный язык программирования. Он основан на C. Проблема в том, что я хочу добавить директиву foreach
и не знаю, как это сделать.
Я использую Bison и Flex в качестве генератора синтаксического анализатора и лексера.
Решение
В вашей грамматике вам нужно выражение, похожее на следующее:
foreach := foreach ( name in name ) { statements }
Когда вы проанализируете это, вы сможете преобразовать его непосредственно в цикл while в вашем AST с дополнительным оператором, который назначает переменную в начале.
Это кажется мне самым простым способом сделать это, но, вероятно, будет иметь ограничения для нескольких итерируемых типов данных (например, список или массив). В этом случае вы можете рассмотреть возможность объединения всех итераций, чтобы у них был согласованный метод для получения следующего элемента.