语法制导翻译示例:括号对数、深度计算与中缀表达式优化

需积分: 32 68 下载量 12 浏览量 更新于2024-08-10 收藏 444KB PDF 举报
本资源主要讨论了基于语法制导翻译的编程技巧,特别是针对易语言中如何模仿按键精灵记录和操作键盘鼠标的行为,以及处理中缀表达式翻译和括号嵌套深度计算。首先,章节4.3给出了两个示例,一个是编写一个语法制导定义来统计括号的对数,另一个是计算括号嵌套的最大深度。这两个问题通过递归地定义语法树节点,利用`num`和`max`变量来跟踪计数,分别实现了括号对数的累计和最大深度的更新。 在处理中缀表达式时(4.6),重点在于考虑运算符的结合性。由于+和*是左结合,所以在转换过程中,需要确保生成的代码表达式没有冗余括号。作者通过定义`E`, `E1`, `T`, 和 `T1` 等非终结符,展示了如何根据运算符类型添加或删除括号,以保持正确的运算顺序。例如,当遇到`+`运算符时,会检查其左侧是否已经包含括号,以决定是否需要添加额外的括号包围右侧的操作数。 同时,还提到了一些关于词法分析的练习,如2.3和2.4,涉及正规式描述语言的理解和正规定义的编写。例如,2.3中的正规式描述了首尾为0且中间由0或1组成的字符串,而2.4则要求描述C语言注释的语法,特别是那些以`/*`开始并以`*/`结束,且前缀不以`*/`结尾的注释。 这部分内容深入讲解了编译原理中的语法分析和代码生成技术,特别关注如何将高级抽象语法结构转换为可执行的代码形式,这对于理解和实现自动化脚本或程序设计至关重要。