`
daojin
  • 浏览: 689527 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

深入思考编译原理之 理解执行过程和编译过程

 
阅读更多
在深入编译器原理细节之前,很多学习者并没有真正从宏观上理解一个编译器都做了些什么,这其实是非常遗憾的。

从计算机执行过程角度思考,函数调用的尤为重要,面向过程的语言更是将函数调用作为最基本的要素。面向对象的语言也是基于最基本的函数调用实现的。因此本文就从函数调用开始,由浅入深地思考如何构建我们的编译器。

1. 一个函数调用和其子调用之间的结构图。
一个SuperFunction对象 包含很多SubFunction函数,SubFunction 是SuperFunction的子函数。因此我们使用组合模式将他们组合起来。



2. 父函数SuperFunction与子函数SubFunction的交互图。




3. 执行引擎:
  
执行引擎负责创建所有的FunctionObject,连接他们之间的父子关系,进行入栈,出栈。假如这个栈向下增长,那么下图就表示了一个栈的动态结构图。



4. 执行引擎算法设计(java 语言描述)
任意一个如下的函数:
       
 Object function(Object[] parameters);


以上函数用结构体进行描述如下
       
 FunctionObject extends CodeBlock{
	      Object[] parameters;
              Object result;
              List<Codeblock> codeBlocks;
          }

类图如下



则执行引擎的执行算法如下:

stack.push(mainfunction);
	execute point:
do {
 FunctionObject functionObject = stack.peek();
 while(functionObject.codeBlocks.size()>0){
  CodeBlock codeBlock = functionObject .codeBlocks.top();
     If(subFunctionCall){
	create subfunction is needed.
	stack.push(subfunction);
	goto executePoint;
     }else{
	codeBlock.execute();
	codeBlocks.remove(codeBlock);
     }
 }
 stack.pop();
}while(!stack.isEmpty())

5. 编译器,编译器实际上就是把源代码转换为执行引擎能执行的代码的过程。这个过程, 现代编译器一般情况不会直接转换到目标代码。而是有个中间过程,也就所谓的语法分析和语义分析。

我们的analyse 类似如下函数:

   FunctionObject anayliyse(String );


6. 有了语法和语义分析,然后我们就可以很容易的转换到目标代码

String transferLanguage(FunctionObject functionObject);

最终形成目标代码。


完毕。

  • 大小: 16.6 KB
  • 大小: 9.9 KB
  • 大小: 13.8 KB
  • 大小: 6 KB
0
0
分享到:
评论

相关推荐

    《编译原理》(胡元义)课后习题解析

    胡元义的《编译原理教程》习题解析涵盖了这些关键领域的实例和问题,帮助学生理解和应用所学知识。例如,习题可能涉及构造正则表达式来识别特定的词法模式,设计上下文无关文法来描述语言结构,或者实现简单的解析器...

    编译原理实验报告,含有实验过程等

    3. **问题解决能力**:面对编译过程中遇到的问题,学会独立思考和解决。 4. **工程经验积累**:了解编译器开发的完整流程,为今后参与软件开发项目打下基础。 **实验要求** 实验要求学生按照以下步骤完成: 1. **...

    编译原理课件导论--总体编译过程介绍

    【编译原理】是计算机科学中的一个重要分支,主要研究如何将高级编程语言转换为机器能够理解和执行的低级语言,如汇编或机器语言。编译程序,也称为编译器,是这一过程的核心工具。 1. **编译程序的概念**: 编译...

    广工编译原理实验(报告加代码13级)

    这部分内容可能包括学生在实验过程中对编译原理的理解深化,如何解决具体问题的心得体会,以及对编译器优化、错误处理等方面的思考。这些个人经验对于其他学习者来说是非常宝贵的资源,可以提供不同的视角和解决问题...

    编译原理课程设计源代码和报告

    通过阅读和调试这些代码,你可以深入理解编译过程的每个步骤,并且有机会实践如何处理语法错误、类型检查等问题。 此外,这个项目可能还包括测试案例和使用说明,帮助你验证编译器的功能并了解如何运行。这些案例...

    编译原理课程设计(源代码+报告文档)

    编译原理是计算机科学中的一个核心领域,它研究如何将高级编程语言转换为机器可执行的指令。在本课程设计中,你将有机会深入理解这一过程,并通过实践编写自己的编译器来巩固理论知识。这份资源包含源代码和报告文档...

    编译原理答案 胡元义

    这份答案集旨在帮助学习者深入理解和掌握编译器设计的核心概念和技术,是学习编译原理过程中的重要参考资料。 编译原理是计算机科学中的一个重要分支,它研究如何将高级编程语言转换为机器可执行的低级代码。胡元义...

    [2008]计算机编译原理(第三版) 张幸儿编著

    总体来说,《计算机编译原理(第三版)》是一本全面介绍编译原理的教科书,旨在帮助学生和读者深入理解编译器的构造原理,掌握编译程序开发的核心技术,并通过实践环节加深对理论知识的理解和应用。这本书不仅适合...

    编译原理基本入门东西

    编译原理是计算机科学中的一个重要领域,主要研究如何将高级编程语言转换为机器可以执行的低级指令。它是计算机科学教育中的核心课程之一...因此,深入理解并熟练掌握编译原理是每个计算机科学和技术专业学生的基本功。

    编译原理课件第一章国防工业出版社

    这些教材提供了编译原理的全面理论和实践知识,帮助学生深入理解编译过程的各个环节。 课程的主要内容包括: 1. 编译系统及其设计概述,讲解编译程序的总体结构和设计方法。 2. 语言与文法的探讨,涵盖文法的类型、...

    编译原理课后习题答案

    《编译原理》是计算机科学领域的一门重要课程,它主要研究如何将高级程序设计语言转换为机器可执行的指令。...在学习过程中,结合教材、习题和答案,多思考、多实践,才能真正掌握编译原理的核心知识。

    西北工业大学版(蒋立源第三版)编译原理课后习题答案

    《编译原理》是计算机科学领域的一门核心课程,它主要研究如何将高级程序设计语言转换为机器可执行的指令。蒋立源教授编写的第三版教材,以其深入浅出的讲解和丰富的习题,深受广大计算机专业学生和教师的喜爱。本...

    上海交通大学编译原理习题教案.rar

    理解编译器如何将高级语言转换为机器语言有助于我们更深入地理解计算机硬件如何执行程序,尤其是在指令集体系结构、寻址模式、运算符实现等方面,编译原理的知识可以提供更广阔的视角。 总的来说,《上海交通大学...

    编译原理课后习题解答

    清华大学版的《编译原理》课后习题解答提供了详细的分析和解题过程,有助于学生独立思考和解决问题,加深对编译原理的理解,对于准备相关考试、项目实践或进一步研究编译技术的学生来说,是一份宝贵的参考资料。

    编译原理课程设计

    编译原理是一门深入计算机科学的核心课程,它探讨如何将高级编程语言转化为机器可以理解的低级指令。在这个课程设计中,我们将会涉及到许多关键概念和技术,这些对于理解和构建编译器至关重要。编译器是将源代码...

    编译原理的一份教案,或许正是你所需要的……

    《编译原理》是一门深入探讨编程语言转换的学科,主要关注如何将高级语言源代码转化为机器可执行的指令。这份教案涵盖了编译程序的基本概念、编译过程以及文法的一些核心理念,对于计算机科学的学生来说是理解计算机...

    编译原理吕映芝张素琴清华版答案

    吕映芝教授的《编译原理》课后答案提供了对这些概念的深入理解和应用实例,对于学习者来说是极有价值的资源。通过解答这些问题,学生可以巩固理论知识,提高解决实际问题的能力。课后答案通常涵盖各种难度的问题,...

    合肥工业大学编译原理实验报告

    **编译原理是计算机科学中的一个关键领域,它研究如何将高级编程语言转换为机器可理解的低级语言,即汇编代码或机器代码。在合肥工业大学的编译原理实验报告中,学生需要掌握三个核心概念:词法分析、LL(1)预测分析...

    编译原理 词法语法分析实验

    在编程世界中,编译原理是理解计算机语言处理的核心领域,它涉及了将高级编程语言转化为机器可执行代码的过程。本实验重点在于词法分析和语法分析,这是编译过程中的两个关键步骤。 词法分析,又称扫描或词法单元化...

Global site tag (gtag.js) - Google Analytics