2 程序设计语言

程序设计语言

编译程序和解释程序

低级语言

汇编和机器语言

高级语言

c c++ java python

image-20220813105937564

源程序(.java) -------------------解释(脚本)/编译(c c++ java)程序 翻译--------------------->目标程序(机器可以识别)

编译程序:

源程序.java ------编译程序------>等价源程序的目标程序.class 编译程序和源程序不参与目标程序的执行过程。

解释程序:

不生成独立的目标程序,源程序和解释程序都要参加到代码的运行过程。

控制程序:

顺序 选择 循环

编译器工作阶段

image-20220813112922648

编译步骤

词法 语法 语义 目标代码生成 是必须的且顺序不可修改

解释步骤

词法分析 语法分析 语义分析 也是必须的

符号表

不断收集 记录 使用源程序的相关符号的特征,并将其存入符号表。

记录程序的重要信息,便于辅助语义的正确性检查和代码的生成。

词法分析

输入:符号表

把源程序看成字符串,从左到右,从上到下,逐个的扫描出单词符号。

词法分析的过程依据 的是语言的词法规则,判断结构是否正确,并输出记号流

语法分析

输入:记号流

输出:语法树(分析数)

可以检测程序中的语法错误。例如检测括号匹配,变量未赋值被使用。

语义分析

输入:语法树

分析语法结构的含义,检测是否出现静态语义错误(类型不匹配、除小数)。

动态语义错误

在程序运行的时候可以检测,例如 除0,死循环。

image-20220813134719241

目标代码生成

是编译器工作的最后一个阶段。

目的:

  1. 是把中间代码变成特定机器可以运行的目标代码,和具体的机器密切相关。

  2. 程序中的寄存器的分配。

中间代码生成

中间代码和具体的机器无关,可以将不同的高级语言翻译成同一种中间代码,具有良好的可移植性。

常见的中间代码有:

后缀式、三地址码、三元式、四元式、树、图。

正规式

词法分析阶段使用正规式

实例

image-20220813145348737

有限自动机

词法分析阶段使用有限自动机

确定的有限自动机:每个状态识别字符后转移的状态是唯一的。

不确定的有限自动机:每个状态识别字符后转移的状态是不唯一的。

image-20220813150759788正确识别:一个正规式识别完成后到终态。

image-20220813150927984不需要识别任何字符就可以转移。

上下文无关文法

大多数程序设计语言用上下文无关文法来描述

image-20220813151436351

后缀式+中缀式

中缀式:1-2 + 3 *(1+2)

后缀式:12-34*

中缀 转后缀式:

  1. 1-2 + 3 *(12+)
  2. 1-2+(312+*)
  3. (12-)+(312+*)
  4. 12-312+*+

后缀转中缀

image-20220813162908926

杂题

image-20220813162849132

image-20220813163002694

image-20220813163107923

image-20220813163230008

image-20220813163249130

image-20220813163320031

image-20220813163428510

image-20220813163456721

image-20220813163520312 image-20220813163621451

image-20220813163744080

image-20220813163810913

image-20220813164004256

image-20220813164135000

image-20220813164152357

image-20220813164211316

image-20220813164250680

image-20220813164301221

posted on   吃可乐的陈伽  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示