2012-02-26 169 views
0

所以,我正在设计一个解释器作为一个项目的语言。接受的程序可以包含零个或多个声明,然后是零个或多个声明。我调用了一个不同的(递归)过程来处理这两种可能性,每个过程在完成时返回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 

问题的关键是,任何的声明在接受的程序中制作的应该在所有其他声明之前。

+0

也许你可以发表你的语言样本,包括声明和陈述? – 2012-02-27 00:16:57

回答

0

我最终什么事做了退出的错误,并且不正确的路径取下来的递归树计数假。这是相当简单和令人惊讶的准确。