Python解析输入作为解释器

Python解析输入作为解释器,python,parsing,tree,interpreter,Python,Parsing,Tree,Interpreter,所以,我正在设计一个解释器作为一个项目。接受的程序可以由零个或多个声明组成,后跟零个或多个语句。我调用一个不同的(递归)过程来处理这两种可能性,每种可能性在完成时返回True,在出错时返回False 声明与语句的区别在于声明总是以非终端“类型”开头(该类型本身是另一个返回True或False的过程) 因此,我的问题如下。我需要检查这两个错误以及输入文件开头的声明何时完成。下面是顶层的一个片段,用于检查声明和语句: while self.declaration(): #Do stuff w

所以,我正在设计一个解释器作为一个项目。接受的程序可以由零个或多个声明组成,后跟零个或多个语句。我调用一个不同的(递归)过程来处理这两种可能性,每种可能性在完成时返回True,在出错时返回False

声明与语句的区别在于声明总是以非终端“类型”开头(该类型本身是另一个返回True或False的过程)

因此,我的问题如下。我需要检查这两个错误以及输入文件开头的声明何时完成。下面是顶层的一个片段,用于检查声明和语句:

while self.declaration():
    #Do stuff
while self.statement():
    #Do stuff
因此,当您递归地遍历这些函数调用时,最终将根据代码是否有错误返回True或False。但同时,我需要能够检查何时没有更多的声明,这将从declaration()循环移动到statement()循环

换句话说,在第一个循环中,代码在遇到错误和声明完成时都将返回False。我该如何解决这个问题

注意:这两个函数都会在程序中向前移动索引(从代码中提取单个关键字),这意味着我不能调用额外的检查来确定下一个是否是“类型”

也许我可以在解析器启动之前提前阅读(使用该索引)并计算代码中声明的数量,然后调用declaration()来计算我检测到的声明的数量。有谁能想出更好的解决办法吗?谢谢你的帮助

下面是一个法律代码示例(不管变量是否包含有用的内容):

intc#宣言
如果(foo<3){
a是7?
}
以下是非法代码示例:

if ( foo < 3 ) {
    array int [ 3 ] a ? #Declaration
}
int c ?                 #Declaration
if(foo<3){
数组int[3]a?#声明
}
INTC#宣言

关键是,在接受的程序中所做的任何声明都应该在所有其他语句之前。

看看python。

看看python。

我最后做的是出错退出,并将False作为递归树中的错误路径计数。这非常简单,而且准确得出奇。

我最后做的是出错退出,并将False计算为递归树中的错误路径。这相当简单,而且准确得出人意料。

也许您可以发布一个语言示例,包括声明和语句?也许您可以发布一个语言示例,包括声明和语句?
if ( foo < 3 ) {
    array int [ 3 ] a ? #Declaration
}
int c ?                 #Declaration