上午题-2-程序设计语言
[toc]
编译程序和解释程序
程序设计语言的控制成分
- 顺序结构
- 选择结构
- 循环结构
题目
函数
题目
解析:常量和表达式没有地址
编译、解释程序翻译阶段
符号表
记住蓝色的两句话即可
词法分析
正规式
词法分析的工具
a|b
表示a或b
(a|b)*
,就是每一位可以是a,也可以是b
有限自动机
词法分析的工具
- 箭头所指的为初态,双圆圈为终态
- 合法的字符识别后要到终态
- a,b表示a或b
- \(\varepsilon\)表示为空,就是可以直接转移到下一个状态
语法分析
语义分析
动态语义错误
语义分析只能检测出程序的静态语义错误,不能检测出动态的语义错误,要到程序运行时才能检测出来。
中间代码生成
目标代码生成
题目
注意:不要和语法分析中的未定义变量类型弄混了(a = 3), 这个是未赋初值。
除数为0是动态语义错误
整除只能为整数是静态语义错误
死循环了,注意:循环体可以只有一个分号
M1在A处的如果为0转移状态是不确定的
上下文无关文法
题目
解析:S->A0|B1
A->S1|1 , B->S0|0(则可以发现一定包含0和1)
中缀、后缀表达式转换
逆波兰式(后缀表达式)
后缀转中缀,从左往右遍历,遇到两个数就看后面的运算符,把ab?转换成a?b
优先级相同,从右向左
比如:在(3+4)转换成34+之后,有乘除,先弄右边的除号,转成34+5/
语法树中、后序遍历
中序遍历后,需判断要不要在某处加括号
题目
解析:
优先级:与>异或>或
算术(+ - * / %)>关系(> < >= == !=)>逻辑(逻辑与 逻辑或)
逻辑非(!)比以上三中操作符优先级都高
其他题目
正规集可用正规式表示,用有限自动机识别
数据类型应该是数据结构体
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Torch's blog!