我正在尝试为C构建一个抽象解释器。可能不是整个语法,而只是它的一个子集。我以前曾问过要使用哪种语言。在我进一步讨论之前,我想知道这个抽象解释是如何工作的?抽象翻译器如何工作?
我已经通过维基链接和讲义注释链接。我已经理解了它的理论基础和理论。我已经分析了我的分析结果。我完全无法理解的部分是如何解释代码。也就是说,我有最初的代码。我现在已经预处理了。我还对我的分析所需的代码进行了一些标准化。现在,当我继续执行代码时,如何逐行执行代码并提取数据? (请告诉我,如果这是不可能的,或者有一些方法来正确执行程序,这将实现我的目标)。我正在收集信息,如动态分配空间的内存地址,函数调用的返回地址。
我之前被推荐过CIL,CIL主要是一个转换工具,将代码转换为一些规范化的形式来处理许多异常,但我无法获得任何有关我的问题的信息。
我的问题是如何逐行提取信息,哪种语言更适合?命令式语言还是功能性语言?关于这方面的信息,我一直在谷歌搜索了几天,但没用。任何链接也非常感谢。谢谢。
编辑:我仍然有一些疑惑。我得到了我们尝试构建虚拟环境的部分。让我解释一下我正在尝试做什么,以便它有助于讨论。我基本上试图做指针分析,主要集中在指针算术上。现在假设我有一个整数指针,我做了一个指针算术,然后我不能确定指针是否仍然指向一个有效的数据。
从你的意思,我知道我们需要为变量分配空间,但值是什么。如果我有类似下面
int a=10;
int *p = &a;
p = p+4;
这里的值和常量“4”是已知的。如果我从用户或文件中获得价值,该怎么办?在这种情况下,我需要执行实际的程序。同时,我需要捕获像地址这样的数据。下面,
int *p =(int *) malloc (sizeof(int));
*p= 15;
cout<<*p;
p = p+ino//some user input value;
cout<<*p;
所以基本上代码必须被执行,但该溶液的后面部分就更像解析C文件。如果我错了,请纠正我。
当你说“抽象解释”时,你的意思是程序分析技术,你试图建立一个程序可以做什么的模型,或者是一种执行C代码的方式,而不需要将它编译成机器代码?在前一种情况下,你想要进行哪些分析?在后一种情况下,你能否详细说明是什么让你失望? – templatetypedef 2011-01-29 07:56:14