目录
程序设计语言与语言处理程序基础——编译与解释——编译过程
程序设计语言与语言处理程序基础——文法
一个形式文法是一个有序四元组 G = ( V,T,S,P ) ,其中:
- V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符。
- T:终结符。是语言的组成部分,是最终结果。
- S:起始符。是语言的开始符号。
- P:产生式。用终结符替代非终结符的郭泽。形如
正则闭包: (也就是所有幂的组合)。
闭包: (在正则闭包的基础上,加上 )。
类型 | 别称 | 说明 | 对应自动机 |
---|---|---|---|
0型 | 短语文法 | G 的每条产生式 满足 属于 V 的正则闭包,且至少含有一个非终结符,而 属于 V 的闭包。 | 图灵机 |
1型 | 上下文有关文法 | G 的任何产生式 满足 ,仅仅 例外,但 S 不得出现在任何产生式右部。 | 线性界限自动机 |
2型 | 上下文无关文法 | G 的任何产生式 ,A为非终结符, 为 V 的闭包。 | 非确定的下推自动机 |
3型 | 正规文法 | G 的任何产生式 或 , 属于非终结符的闭包,A、B都属于非终结符 | 有限自动机 |
程序设计语言与语言处理程序基础——文法——语法推导树
一棵语法树应具有以下特征:
- 每个结点都有一个标记,此标记是 V 的一个符号。
- 根的标记是 S 。
- 若一结点 n 至少有一个它自己除外的子孙,并且有标记 A,则 A 肯定在 中。
- 如果结点 n 的直接子孙,从左到右的次序是结点 ,其标记分别是: ,那么 ,一定是 P 中的一个产生式。
程序设计语言与语言处理程序基础——有限自动机
- S 是一个有限集,每个元素为一个状态。
- 是一个有穷字母表,每个元素为一个输入字符。
- 是转换函数,是一个单值对照。
- S0,属于S,是其唯一的初态。
- Z是一个终态集(可空)。
有限状态自动机可以形象的用状态转换图表示,设有限状态自动机: ,
其中: ,,,,,,,。
答:C.0101
解释:从初态A除法,输入一个0,到达B,再输入一个1,到达C,再输入一个0,到达B,再输入一个1,到达C终态。
程序设计语言与语言处理程序基础——正规式
正规式是描述程序语言单词的表达式,对于字母 ,其上的正规式及其表示的正规集可以递归定义如下:
- 是一个正规式,它表示集合 。
- 若 a 是 上的字符,则 a 是一个正规式,它所表示的正规 。
- 若正规式 r 和 s 分别表示正规集 ,则:
- 是正规式,表示集合 。
- 是正规式,表示集合 。
- 是正规式,表示集合 。
- 是正规式,表示集合 。
仅由有限次的使用上述三个步骤定义的表达式才是 上的正规式。由此可见,正规式要么为空,要么由字母、或、连接、闭包运算符组成。其中闭包运算符“ * ”居右最高的优先级,连接运算具有次高优先级,或运算符“ | ”具有最低优先级。
答:
(1):D.babba
(2):C.(ab|ba)*
解释:
(1):S解析bB,其中bB中的B可以解析成aS或a,第一步解析成ba、第二步解析成baS或a,baS可以解析成baaA或babB。
(2):因为ab或ba可以生成ab的串,也可以生成ba的串。
程序设计语言与语言处理程序基础——表达式
前缀表达式:( + a b )
中缀表达式:( a + b )
后缀表达式:( a b + )
答:D. a b - c 5 +
解释:后缀表达式先算中间结点的左结点,再右结点,再中间结点,然后再父级结点。
程序设计语言与语言处理程序基础——传值与传址
传递方式 | 主要特点 |
---|---|
传值调用 | 形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变。 |
引用(传址)调用 | 形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时就改变了实参的值。 |
/* 传值的情况 */
void swap(int x,int y){ //形参
int t;
t=x;
x=y;
y=t;
printf("%d %d,",x,y)
};
main(){
int a=3,b=4;
swap(a,b); //实参
printf("%d %d",a,b);
}
输出结果是:4,3,3,4
/* 传址的情况 */
void swap(int *x,int *y){ //形参
int *t;
*t=*x;
*x=*y;
*y=*t;
printf("%d %d,",*x,*y)
};
main(){
int a=3,b=4;
swap(&a,&b); //实参
printf("%d %d",a,b);
}
输出结果是:4,3,4,3
传值的情况:
传址的情况:
程序设计语言与语言处理程序基础——多种程序语言特点
- Fortran语言(科学计算,执行效率高)。
- Pascal语言(为教学而开发的,表达能力强,衍生出了Delphi语言)。
- C语言(指针操作能力强,高效)。
- Lisp语言(函数式程序语言,符号处理,人工智能)。
- C++语言(面向对象,高效)。
- Java语言(面向对象,中间代码,跨平台)。
- C#语言(面向对象,中间代码,.Net,跨平台)。
- Prolog语言(逻辑推理,简洁性,表达能力,数据库和专家系统)。