程序设计语言基础-编译过程概述+表达式

程序设计语言分类

面向机器的语言

由0、1组成的机器指令序列或汇编语言(如:move ax,bx),可读性差,难以修改和维护。

面向应用程序的语言

如,Java、C、C++、Python、Delphi、PASCAL等,更接近人类语言,提高程序设计效率。

程序设计语言分类

image

生成目标代码过程

image

编译程序

词法分析

输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词,删掉无用的信息,报告分析时的错误
image

语法分析阶段

语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位。通过语法分析确定整个输入串是否构成一个语法上正确的程序

image

语义分析阶段

主要检查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用。语义分析分为静态分析和动态分析两个部分。静态语义分析使用语法制导翻译

点击查看代码
public class Example {
public static void main(String[] args) {
int x = 5;
int y = "Hello"; // 静态类型错误
 System.out.println(“Sum: ” + (x / 0)); // 动态类型错误
 }
}

中间代码

不依赖具体计算机,表现形式如下。

  1. 后缀式(逆波兰式)
  2. 树型表示
  3. 三元式:X =( a + b)( c + d )
    ①(+ , a , b)②(+ , c , d )③(
    , ① , ②)④( =,③,x)
  4. 四元式: X =(a*b)+ c/d
    ①( *, a , b , T1)②( / , c , d , T2)③( +, T1 , T2 , T3 )④( =
    ,T1,—,X)

表达式出错处理

静态错误(编译时出现)

语法错误,如:单词拼写错误、标点符号错误、表达式缺操作数、
括号不匹配等。
静态语义错误,如:运算符与运算对象类型不合法。

动态错误(运行时出现)

如:变量取0做除数。
如:引用数组下标越界

考点

对于声明语句,主要是将所需要的信息正确地填入合理组织的数据结构中。在编译器的设计中,符号表Symbo1Table)是一个非常重要的数据结构,用于存储和管理源程序中定义的各种符号(如变量、函数名、常量等)的信息。这些信息包括但不限于符号的名称、类型、作用域、存储类别等。因此,对于声明语句,编译器会将相关信息填入符号表中.

对于可执行语句,编译器的任务是将它们翻译成机器可以执行的代码。这个过程通常包括两个步骤:首先,将源代码翻译成一种中间代码(IntermediateCode),这种代码通常是一种低级的、与特定机器无关的表示形式;然后,将中间代码转换成目标代码(Target Code),也就是机器代码,这种代码可以直接由特定的计算机硬件执行。因此,对于可执行语句,编译器会将它们翻译成中间代码或目标代码。

posted @ 2024-08-23 19:03  谢十二♡Lgy  阅读(15)  评论(0编辑  收藏  举报