数据结构与算法(二十)快速排序、堆排序(四)https://blog.csdn.net/ke1ying/article/details/129269655
这篇主要讲的是 编译与解释、文法、正规式、有限自动机、表达式、传值与传址、多种程序语言特点。
- 编译的过程
解释型 和 编译型
编译型过程:
源程序 词法分析 语法分析 语义分析
中间代码生成 代码优化 目标代码生成 目标程序
词法分析:非法字符、关键字或者标识符错误。
语法分析:语法结构错误,if或者end if不匹配等。
语义分析:死循环或者零除数等。
- 有限自动机
上面DFA状态转换图可以看到S是起始,{f}表示结束位置。
下面的S输入一个0可以到B,输入一个1可以到A。
C到f意思是,输入一个0可以到f,输入一个1也可以到f。
(a|b)*:abbaab,,ab的任意串。(a或b组成的都能表达出来)
(ab)*:代表ababab...多个或者一个。
(ab|ba)*:abbaabbaab...ab和ba 的任意串。(ab或ba组成的任意)
(ab)*(ba)*:这代表先来若干个ab 再来若干个ba。Ababab...bababa....
表达式 分为前缀表达式、中缀表达式、后缀表达式。(与二叉树的前序、中序、后序遍历一致,分别从 根左右、左根右、左右根来表达)
传值和传址
传值调用:形参取的是实际参数的值,形参的改变不会改变实际参数的值。
引用(传址)调用:形参取的是实参的地址,即相当于实际参数存储单元的地址引用,因此其值的改变会导致实际参数值的改变。
传值和传址的区别:
&a 代表传址,a代表传值。
Int *a代表指针类型的形式参数,int a代表传值的形式参数。
C语言高效是他最大的特点。
C++开始面向对象,高效。
Java语言:面向对象,跨平台,中间代码。
Lisp语言:人工智能。
C#:面向对象,中间代码,.net。