八、程序设计语言与语言处理程序基础

本文介绍了编译过程的分析与综合阶段,包括词法、语法、语义分析及代码生成。此外,简述了文法类型与3型文法的重要性,以及有限自动机的识别原理。重点讨论了程序语言中的表达式处理,特别是前缀和后缀表达式,以及函数调用的传值与传址概念。虽然正规式和部分程序语言特点的考频较低,但它们构成了理解编译原理的基础。
摘要由CSDN通过智能技术生成

  • 这一部分内容主要是编译原理相关的知识,在考试中正规式和传值与传址考察频率较高,表达式偶尔考到,其它内容考察频率较低,所以只是简单介绍一下相关基础知识。

8.1 编译过程

  • 在计算机中对于高级语言程序处理一般有两种方式,就是解释和编译。解释是把源程序代码一行一行翻译并执行,翻译与执行一次性完成不产生目标代码,发生在运行时;编译是将整个源程序翻译成可执行的目标代码,翻译与执行是分开的,发生在运行前;其次解释程序可以跨平台,随时修改立即生效,但不可复用,运行效率较低,编译程序相反。下面主要了解的是编译。

  • 编译过程
    在这里插入图片描述
    编译分为分析和综合两个阶段,分析阶段包括词法分析,语法分析,语义分析及中间代码生成,综合阶段包括代码优化与目标代码生成。

    词法分析: 识别出一个个具有独立意义的最下语法单位,即“单词”。
    语法分析: 分析句子的语法结构,将一个个单词符号组成语言的各种语法类。类似于分析句子的主谓成分。
    语义分析: 分析句子的语义是否正确,比如猴子吃香蕉,香蕉吃猴子就错了。语义分析通常将源程序生成一种中间表示形式,即中间代码。
    代码优化: 对中间代码优化,提高目标程序的执行效率。不是编译程序的必要组成部分。
    目标代码生成: 将中间代码生成目标机器上的机器代码。

8.2 文法

  • 这块内容考试中现在很少考到,所以只简单的讲一下相关的基础知识。

  • 定义
    在这里插入图片描述

  • 类型
    在这里插入图片描述
    其中3型文法是我们需要主要了解的。

  • 语法推导树
    在这里插入图片描述
    通过语法推导树我们可以知道一种语法能表达的一些串构造的一些句型。

    终结符一般用小写字母表示,不能单独出现在推导式左边的符号,即不能再进行推导。不是终结符的就是非终结符,一般用大写字母表示。

    推导的过程:从开始符号开始,把推出的符号串中的非终结符替换相应规则的右部的符号串,直到符号串为所求的句型。

8.3 有限自动机

  • 有限自动机
    在这里插入图片描述
    在状态转换图中,一般标识了S是开始符,双圈代表结束状态,上面的如δ(S, 0) = B表达式就是状态转换函数,每一个式对应状态转换图中的一条路径。

    考试中一般会给一个状态图,判断能不能识别所给的串。判断的方法就是从起点找到一条到终点的路,路上的输入字符连起来是否为所给的串。

    例题:
    在这里插入图片描述
    一步一步推导得到答案是C,先从A开始,输入0到B,输入1到C,输入0到B,输入1到C,所以符合。

  • 正规式在这里插入图片描述

    其实是对有限自动机的另一种表达形式,下面通过例题看是如何表达的:
    在这里插入图片描述
    | 表示或,可以推出a,也可以推出b;* 表示0个或多个重复。
    (1)选D,可以一个一个推导。
    (2)选C,可以用代入法,将文法能识别的串代入看是否能够推出,如果能可能就是该文法对应的正规式,但不一定就是正确答案,要进一步分析排除。也可以参考一些常规化的方法。

8.4 程序语言基础——表达式

  • 程序语言基础中的重要内容,我们主要了解用树的遍历来求前缀表达式和后缀表达式。中缀表达式就是正常的表达式。
    在这里插入图片描述
    树的前序遍历就是前缀表达式,中序遍历就是中缀表达式,后序遍历就是后缀表达式。

    考试中一般就是如上图例题中的考察形式,给出中缀表达式求前缀或者后缀表达式,答案选D。如果熟练的话可以直接分析出答案;也可以构造对应的树,构造树时要根据表达式中的运算优先级来构造(所以树中不会出现括号,括号就体现了运算的优先级)。

8.5 函数调用——传值与传址

  • 这是考试中经常考察的点,我们在进行函数调用的时候有两种方式,一种是传值,一种是传址,两种方式有不同结果。
    在这里插入图片描述

  • 传值与传址
    在这里插入图片描述

    传值: a的值传给x,b的值传给y,实际是a对应一个存储空间,x对应一个存储空间,传值时相当于把a的值复制给x,两个存储空间都有了3这个值,b也是如此,所以交换完之后,x和y的值交换,a和b的值不变。
    在这里插入图片描述
    传址: a的地址给x,b的地址给y,x和y是两个指针,并没有存具体的值,而是指向了a,b变量的存储空间,当交换x和y对应的值,原来的a和b的值也发生了变化,因为它们对应的是相同的存储空间。
    在这里插入图片描述

8.6 程序语言基础——各程序语言特点

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值