章节梳理
网络异常,图片无法展示
|
- 低级语言:通常称机器语言和汇编语言为低级语言。机器语言是指用0,1字符串组成的机器指令序列。
- 编译程序和解释程序:用某种高级语言或汇编语言编写的程序称为 源程序,它不能直接就在计算机上执行。如果源程序是使用汇编语言编写的,则需要一个称为汇编程序大的翻译程序将其翻译成目标程序后才能执行。如果源程序是使用某种高级语言编写的,则需要相应的解释程序或编译程序对其进行翻译,然后才能在机器上运行。
- 在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序不再参与目标程序的执行过程。
- 在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程当中,运行程序的控制权在解释程序中。
- 程序设计语言的定义:一般涉及语法,语义,语用和语境等方面。
- 命令式程序设计语言:基于动作语言,开始于Fortran、Pascal、和C语言。
- 面向对象的程序设计语言:C++、java和Smalltalk(Simula提出对象和类的概念)
- 函数程序设计语言:LISP为代表,其中大量使用递归
- 逻辑型程序设计语言:形式以逻辑为基础的语言,该语言的代表是建立在关系理论和一阶谓词理论基础上的Prolog
- 变量具有左值和右值,在程序运行过程中其右值可以改变,常量只有右值,在程序运行中右值不能改变。
- 词法分析:对源程序从前到后(从左到右)逐个字符进行扫描,从中设别一个个“单词”符号。
- 语法分析:在词法分析的基础上,根据语言的规则将单词符号序列分解成各类语法单位,如“表达式”,“语句”和“程序”等。词法和语法分析本质上都是对源程序的结构进行分析。
- 语义分析:主要审查源程序是否存在语义错误,并收集类型信息供后面的代码使用,只有 语法和语义都正确的源程序才能翻译成正确的目标代码。(是编译过程的逻辑阶段)
- 中间代码生成阶段:中间代码起着编译器前端和后端分水岭的作用,使用中间代码有利于提高编译程序的可移植性。常用有 后缀式,三元式,四元式和树等形式。(可以考虑机器的特性,编写生成中间代码的编译程序相对容易)
- 代码优化:是对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的代码更加高效。
- 目标代码生成阶段:是把中间的代码转化成特定机器上的绝对的指令代码,可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与具体的机器密切相关。
- 符号表管理:在符号表记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成。
- 出错处理:用户编写的源程序中的错误大致可分为静态错误和动态错误。
- 语法分析:自顶向下(是对给定的符号串试图自顶向下地为其构造一棵语法树,或者说从文法的开始符号出发,为其构造一个最左的推导)、自底向上(是对给定的符号串试图自底向上地为其构造一棵语法树,或者说从给定的符号串本身出发,试图将其归约为文法的开始符号)。
- 算符优先文法属于自底向上的分析法,它利用各个算符间的优先关系和结合规则来进行语法分析,特别使用于分析各种表达式。
- 传值调用:最显著的特征就是被调用的参数内部对形参的修改不影响实参的值
- 引用调用:是将实参的地址传递给形参,使得形参的地址就是实参的地址。
错题整合
- 上下文法无关文法是形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分中称为2型文法。由于程序设计语言的语法基本都是上下文无关文法,因此应用十分广泛。
- 解释程序并不产生目标程序,这是它和编译程序的主要区别。
- 移进-归约分析是一种自底向上的分析方法。
- 在解释器上运行程序比直接运行编译过的代码要慢,是因为解释器每次都必须去分析并转译它所运行的程序行,而编译过的程序直接运行即可。
- 逆波兰将运算符写在操作数之后,因此也叫后缀表达式,要利用栈进行求值。
- 死循环错误属于典型的语义错误,但静态的语义错误可被编译器发现。
- C程序中全局变量的存储空间在 静态数据区 分配
- 代码区:存放函数体的二进制代码、
- 栈区:由编译器自动分配释放,存放函数的参数值,局部变量的值等
- 堆区:一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收。
- 静态数据区:内存在程序启动的时候才被分配,而且可能直到程序开始执行的时候才被初始化,所分配的内存在程序的整个运行期间都存在,如全局变量,static变量等。
- 自顶向下的语法分析方法包括递归下降分析法和预测分析法。
- 语法分析的任务是根据语言的语法规则分析单词串是否构成短语和句子,即表达式,语句和程序等基本语言结构,同时检查和处理程序中的语法错误