Создание ключевого слова foreach с помощью yacc или Bison and Flex

StackOverflow https://stackoverflow.com/questions/1407846

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top