栈机器原理与操作解析
1. 后缀表示法与运算符优先级
在处理赋值语句时,解析后可得到不同的后缀表示法。例如对于一个赋值语句,解析后得到后缀表示法 #XA B +C * =; 。这里有两个重要概念需要注意:
- 所有操作数的相对位置应保持不变。
- 后缀表示法中没有括号,运算符的位置由优先级决定。
在编译器设计中,存在两代编译器。第一代使用语法控制的运算符优先级解析,第二代使用基于语法的语法导向解析。语法导向解析遵循语法规则,更为可行且正确。编译器生成中间代码后,会将其转换为目标机器代码存储在目标模块中;而解释器则将中间代码存储在磁盘的目标模块中,后续可直接解释代码生成计算结果。
两种著名的语法导向解析技术是自顶向下和自底向上。对于哪种更好更直观,答案可能因人而异。不过,有人认为自顶向下更好,原因有二:一是语法和语言语句之间存在一对一的映射;二是编程语言 C 提供交互式输出,便于检查每个解析步骤后的打印输出,易于检测错误和维护代码。
解释器方法受欢迎的原因有两个:一是中间代码和操作环境与主机无关;二是中间代码可保存到磁盘的目标模块或数据文件中,后续可直接解释代码,无需再次进行翻译阶段。
运算符优先级的概念如下表所示,优先级按降序排列,括号优先级最高,赋值运算符优先级最低。
| 符号 | 描述 |
| — | — |
| () | 分组括号 |
| .NEG. | 取反 |
| .EXR | 指数运算 |
| *, / | 乘、除 |
| +, - | 加、减 |
| ” | 连接 |
| {.EO., .
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



