目录
- 第七章、程序设计语言与语言处理程序基础
- 1、编译与解释
- 2、文法
- 3、正规式
- 4、有限自动机
- 5、表达式
- 6、传值与传址
- 7、多种程序语言特点
第七章、程序设计语言与语言处理程序基础
1、编译与解释
编译器是将整个高级语言程序一次性转化成目标机器的机器代码,编译的结果是一个可执行的二进制文件
解释器是逐行解释高级语言程序,并且在解释过程中动态地生成机器代码,解释的结果是直接执行程序
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语言(逻辑推理,简洁性,表达能力,数据库和专家系统)