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

第七章、程序设计语言与语言处理程序基础

1、编译与解释

编译器是将整个高级语言程序一次性转化成目标机器的机器代码,编译的结果是一个可执行的二进制文件

解释器是逐行解释高级语言程序,并且在解释过程中动态地生成机器代码,解释的结果是直接执行程序

请添加图片描述

词法分析(Lexical Analysis):

定义:词法分析是编译器的第一个阶段,其任务是将源代码分解为一系列词法单元(Token)。
职能:词法分析器扫描源代码字符流,将字符组成的串识别为具有独立意义的词法单元,并生成对应的标记(Token)。
从左到右逐个扫描源程序中的字符,识别其中如 关键字(或称保留字)、标识符、常数、运算符以及分隔符(标点符号和括号) 等。
对于C语言的源代码int x = 10 + y;,词法分析器可以将其分解为如下的词素序列:

词素1:关键字 “int”
词素2:标识符 “x”
词素3:运算符 “=”
词素4:常量 “10”
词素5:运算符 “+”
词素6:标识符 “y”
词素7:分号 “;”
语法分析(Syntax Analysis):

定义:语法分析是编译器的第二个阶段,其任务是根据语法规则验证词法单元序列的结构是否符合语法规范。
职能:语法分析器根据给定的文法规则,构建语法树(Syntax Tree)或抽象语法树(Abstract Syntax Tree),用于表示程序的结构。

根据语法规则将单词符号分解成各类语法单位,并分析源程序是否存在语法上的错误。包括:语言结构出错、if…end if不匹配缺少分号括号不匹配、表达式缺少操作数等。本题属于语法分析阶段的作用。
语义分析(Semantic Analysis):

定义:语义分析是编译器的第三个阶段,其任务是检查和推导词法单元和语法树的语义意义,进行类型检查和语义规则验证。
职能:语义分析器对程序进行语义检查,包括类型匹配、变量声明和使用检查、函数调用检查等,以确保程序在语义层面上是正确的。

进行类型分析和检查,主要检测源程序是否存在静态语义错误。包括:运算符和运算类型不符合,如取余时用浮点数
举例:
对于语句int x = 10 / “5”;,语义分析器会检测到类型不匹配的错误,因为整数无法与字符串进行除法运算
目标代码生成(Code Generation):

定义:目标代码生成是编译器的最后一个阶段,其任务是将经过语义分析的中间表示转换为目标机器的机器代码或汇编代码。
职能:目标代码生成器根据中间表示(如语法树、三地址码等),应用优化技术,生成与目标机器相关的可执行代码。

2、文法

一个形式文法是一个有序四元组G=(V,T,S,P),其中:
1)V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符。
2)T:终结符。是语言的组成部分,是最终结果。V∩T=∅
3)S:起始符。是语言的开始符号。
4)P:产生式。用终结符替代非终结符的规则。形如α→β

在这里插入图片描述
一棵语法树应具有以下特征:
1.每个结点都有一个标记,此标记是V的一个符号
2.根的标记是S
3.若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在Vn中:
4.如果结点n的直接子孙,从左到右的次序是结点n1,n2,……nk,其标记分别是:A1,A2,…,Ak,那么A->A1,A2…Ak,一定是P中的一个产生式。
在这里插入图片描述

3、正规式

在这里插入图片描述

4、有限自动机

在这里插入图片描述
在这里插入图片描述
例题:下图所示为一个有限自动机(其中,A是初态、C是终态),该自动机可识别(1)。

在这里插入图片描述

5、表达式

在这里插入图片描述
前缀表达式(+ab)
中缀表达式(a+b)
后缀表达式(ab+)

例:表达式(a-b)*(c+5)的后缀式是

A.a b c 5 + * -
B.a b - c + 5*
C.a b c - * 5 +
D.a b - c 5 + *

在这里插入图片描述

6、传值与传址

在这里插入图片描述
在这里插入图片描述
值传递

void swap(int x,int y)
{
    
    
	int t;
	t=x;
	x=y;
	y=t;
	printf("%d%d",x,y);
}
void main()
{
    
    
	int a=3,b=4;
	swap(a,b);
	printf("%d%d",a,b);
}
4 3,3 4

地址传递

void swaps(int *x,int *y)
{
    
    
	int t;
	t=*x;
	*x=*y;
	*y=t;
	printf("%d %d",*x,*y);
}
void main()
{
    
    
	int a=3,b=4;
	swaps(&a,&b);
	printf("%d %d",a,b);
}
4 3,4 3

1.Fortran语言(科学计算,执行效率高)
2.Pascal语言(为教学而开发的,表达能力强,Delphi)
3.C语言(指针操作能力强,高效)
4.Lisp语言(函数式程序语言,符号处理,人工智能)
5.C++语言(面向对象,高效)
6.Java语言(面向对象,中间代码,跨平台)
7.C#语言(面向对象,中间代码,.Net)
8.Prolog语言(逻辑推理,简洁性,表达能力,数据库和专家系统)

7、多种程序语言特点

猜你喜欢

转载自blog.csdn.net/qq_52108058/article/details/130623363