所以,我正在设计一个解释器作为一个项目的语言。接受的程序可以包含零个或多个声明,然后是零个或多个声明。我调用了一个不同的(递归)过程来处理这两种可能性,每个过程在完成时返回True或在出错时返回False。Python解析输入作为解释器
声明可以从在该声明陈述来区分总是与非末端的“类型”(其本身是一个返回真虚假另一过程)开始。
所以我的问题如下。我需要检查两个错误以及输入文件开始处的声明何时完成。以下是从顶层将检查声明和语句一个片段:根据你的代码是否有
while self.declaration():
#Do stuff
while self.statement():
#Do stuff
所以你递归旅行下来这些函数调用,您最终会返回真或假任何错误。但同时,我需要能够检查什么时候没有更多的声明,这些声明会从声明()循环移动到声明()循环。
换句话说,在第一循环中,代码将返回False时都遇到错误,当宣布结束。我该如何解决?
注:两种功能移动索引(从代码中提取单个关键字)前在节目中,这意味着我不能把额外的检查,以确定是否“类型”旁边。
也许我可以在解析器开始前预读(使用该索引)和统计代码申报数量,然后调用声明()为我所检测到的申报数量。任何人都可以想出更好的解决方案吗谢谢你的帮助。
这里是合法的代码(无视变量是否会包含任何有用的)样本:
int c ? #Declaration
if (foo < 3) {
a is 7 ?
}
这里是非法的代码示例:
if (foo < 3) {
array int [ 3 ] a ? #Declaration
}
int c ? #Declaration
问题的关键是,任何的声明在接受的程序中制作的应该在所有其他声明之前。
也许你可以发表你的语言样本,包括声明和陈述? – 2012-02-27 00:16:57