所以,我正在设计一个翻译语言作为一个项目。接受的程序可以包含零个或多个声明,后跟零个或多个语句。我调用一个不同的(递归)过程来处理这两种可能性,每个过程在完成时返回True或在出错时返回False。
声明可以与语句区分开来,声明始终以非终结“type”开头(它本身是另一个返回False的过程)。
所以我的问题如下。我需要检查两个错误以及何时完成输入文件开头的声明。以下是顶层的片段,它将检查声明和语句:
while self.declaration():
#Do stuff
while self.statement():
#Do stuff
因此,当您以递归方式向下移动这些函数调用时,最终将根据您的代码是否有任何错误返回True或False。但与此同时,我需要能够检查何时没有更多的声明,这些声明将从declaration()循环转移到statement()循环。
换句话说,在第一个循环中,代码在遇到错误和声明完成时都将返回False。我该如何解决这个问题?
注意:两个函数都会在程序中向前移动索引(从代码中提取单个关键字),这意味着我无法调用额外的检查来确定下一个“类型”。
也许我可以在解析器启动之前预先读取(使用该索引)并计算代码中的声明数,然后调用declaration()以获取我检测到的声明数。谁能想到更好的解决方案?谢谢你的帮助。
以下是法律代码示例(无论变量是否包含任何有用的内容):
int c ? #Declaration
if ( foo < 3 ) {
a is 7 ?
}
以下是非法代码示例:
if ( foo < 3 ) {
array int [ 3 ] a ? #Declaration
}
int c ? #Declaration
关键是,在接受的程序中做出的任何声明都应该在所有其他声明之前。
答案 0 :(得分:3)
查看special language parsing tools for python。
答案 1 :(得分:0)
我最终做的是退出错误,并将False计算为递归树中的错误路径。这非常简单,而且非常准确。