2009-09-10 62 views
3

我开发了一种解释型编程语言。这是强烈基于C.问题是,我想添加一个foreach指令,并不知道如何。用yacc或Bison和Flex创建一个foreach关键字

我使用Bison和Flex作为解析器和词法分析器生成器。

+1

您的语言只需要知道容器名称即可获得容器大小。在C中,数组不会携带它们的大小。所以你的语言需要确保它首先支持。 – GManNickG 2009-09-10 21:34:39

+0

一般编译器(和解释器)资源:http://stackoverflow.com/questions/1669/learning-to-write-a-compiler – dmckee 2009-09-11 03:33:43

回答

4

在你的语法,你会想这是类似如下的表达式:

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

当你解析这个,你应该能够将其直接转化为您的AST while循环用在开始处指定变量的附加语句。

这对我来说似乎是最简单的方法,但可能会对多个可迭代数据类型(例如列表与数组)产生限制。在这种情况下,您可能需要考虑整合所有迭代器,以便它们具有一致的方法来获取下一个元素。