编译原理考试复习指导

写作背景

20考研复试中,上海大学复试科目为编译原理和C++,特此写篇文章,疏通编译原理这门课,将课程中的重难点梳理一遍。本文章以应试为主。PS:本文也可用作期末考试复试

课程要点

课程的核心就是5个基本流程:

编译原理考试复习指导_第1张图片

以这5个流程为基准,一一展开介绍。

序言

概念上,有时会把编译程序分为编译前端编译后端。前端主要由与源语言相关但与目标机无关的那些部分组成,也就是前三个流程。后端是那些与目标机有关的部分,5个流程中后两个流程。

编写的代码在计算机运行之前,需要计算机完成一个翻译的过程。通常翻译程序是指这样一个程序,可以将源语言程序变为目标语言程序,并且后者与前者在逻辑上等价。翻译程序主要分为编译程序和解释程序。当源语言是诸如C,Java这样的“高级语言”,目标语言是诸如汇编语言或机器语言等“低级语言”时,这样的翻译程序是编译程序解释程序是指以某高级语言写的源程序作为输入,但不产生目标语言,而是边解释边执行源程序的过程。编译程序与解释程序最大的区别就是是否生成目标代码。

编译原理考试复习指导_第2张图片

词法分析

词法分析的任务是由词法分析器接受输入的源程序,对源程序进行词法分析,从左至右逐个字符地对源程序进行扫描,识别出一个个的单词符号,供语法分析器使用。词法分析是基于正则文法(又称3型文法)进行的,工具是正规式有限自动机

单词符号一般分为下列5种:关键字(例如C语言中if  while  for),标识符(变量名,数组名等),常数,运算符,界符。

状态转换图

转换图是一张有限方向图,结点表示状态,用圆圈表示。一张状态装换图只含有邮箱哦状态,其中一个被认为是初态,而且实际上至少需要有一个终态(用双圈表示)。

编译原理考试复习指导_第3张图片

一个转换图可以用于识别(接受)一定的字符串

正规式

正规式和正规集的递归定义:

(1)ε 和 Ф 都是 Σ 上的正规式,他们所表示的正规集分别为{ ε }和  Ф

(2)任何 a ∈ Σ ,a 是 Σ 上的一个正规式,他所表示的正规集是{ a }

(3)假定任意U 和 V都是 Σ 上正规式,他们所表示的正规集分别记为L( U )和L( V ),那么( U | V )、( U V )和( U )*也都是正规式,他们所表示的正规集分别为L( U ) ∪ L( U )、L( U )L( V ) 和 (L( U ))*(闭包)

(注:ε 为空串,即长度为0的字符串,对应的正规集为{ ε } ; { }为空集)

仅由有限次使用上述三步骤而得到的表达式才是 Σ 上的正规式。仅由这些正规式所表示的字符集才是 Σ 上的正规集

 

例如:令 Σ  = { a,b },下面是 Σ 上对应的正规式和正规集

正规式                       正规集

ba*                             Σ 上所有以b为首后跟任意个a的字

a(a|b)*                        Σ 上所有以a为首的字

 

若两个正规式所表示的正规集相同,则认为两者等价

有限自动机

表示方式:五元式、状态转换图、状态转换矩阵

非确定的有限自动机(NFA)

非确定的有限自动机M 是一个五元式

编译原理考试复习指导_第4张图片

特点①初态有一个或多个②终态有零个或多个③箭弧上的标记可以是Σ*上一个字④允许一对多映射

确定的有限自动机(DFA)

 

编译原理考试复习指导_第5张图片

特点①初态只有一个②终态有零个或多个③箭弧上的标记是Σ上单个字符④单值映射

 

以一个具体的例子来展示NFA和DFA,一般而言词法分析中的大题是由正规式画出NFA,再将其变为最简DFA。

例:画出正规式(0|1)*0(0|1)1的DFA

 编译原理考试复习指导_第6张图片

  后面的待更

语法分析

语义分析和中间代码生成

代码优化

目标代码生成

你可能感兴趣的:(学习,基本课程)