编译原理---------2

本文详细介绍了编译程序的工作流程,包括词法分析、语法分析、语义分析和中间代码生成等阶段。通过一个C语言的代码示例,解释了编译器如何识别单词、构造语法树并最终生成目标代码。在词法分析中,识别了关键字、标识符、整数和运算符等;语法分析则依据文法规则将单词组合成合法的语法结构,并通过语法树来表示。文章还提及了编译过程中的优化步骤,帮助读者理解编译器如何将高级语言转化为机器可执行的指令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译程序的工作:

  • 举例说明:
     Void jisuan()
         {
            int y, c,d;
            float x,a,b;
            x=a+b*50;
            y=c+)d*(x+b; 
                          }
  注意:
  这个代码,最后一句会报错,让我们来看看它的编译过程。

以下是简单的编译处理过程:
每一步都会产生一些东西,这些东西会被放在表格管理中。
请添加图片描述

  1. 词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。
  • 单词:是高级语言中有实在意义的最小语法单位,由字符构成。

识别程序中的单词:

  • 基本字:(c语言原有的,即关键字) Void int float
  • 标识符:(用户自己定义的)a b c d x y jisuan
  • 整数:50
  • 运算符: + * =
  • 界限符:(用来分开一些东西) { } , ; ()
  • 接着依据词法规则,识别出正确的单词,转换成统一规格,备用
  • 描述语法规则的有效工具是正规式有限自动机
  1. 语法分析
  • 任务:在词法分析的基础上,根据语言的语法规则,把单词符号组成各类的语法单位:短语、子句、语句、过程、程序。
  • 语法规则:又称为文法,规定单词如何构成短语,语句,过程和程序。
  • 语法规则的表示: BNF: A::=B|C (巴科斯范式)表示定义为 。
    🍊例如:句子定义为主谓宾➡️ <句子> ::= <主><谓><宾>
    <主>::=<定><名>
    请添加图片描述
  • 语法分析有两种方法:推导(derive)和归约(reduce)
  • 推导:分为最左推导和最右推导
    🍊:例如以下 最右推导,逆过程是最左归约,倒着看就可以请添加图片描述

请添加图片描述

  • 归约:分为最左归约和最右归约。推导和归约是一个互逆的关系。
    🍊:例如以下:最左推导的逆过程是最右归约,倒着推就可以。 最右边的东西归约为大写字母。
    请添加图片描述
  • 再来看这个例子:计算机推导时候会用语法树。
    这里不会管那两个括号,因为会把他们看成一个整体。

请添加图片描述

  1. 语义分析和中间代码生成
  2. 优化
  3. 目标代码生成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无心er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值