`

布尔表达式的翻译

阅读更多
  程序设计语言中的布尔表达式有两个作用。一是计算逻辑值,更多的情况是二,用做改变控制流语句中的条件表达式,如在if-then,if-then-else,或是while-do语句中那样。
  布尔表达式是由布尔算符and,or和not施于布尔变量或关系表达式而成。即布尔表达式的形式为E1 rop E2,其中E1和E2都是算术表达式,rop是关系符,如〈=<,=,〉=,≠等等。有的语言,如PL/1,允许更通用的表达式,其中,布尔算符,算术算符和关系算符可以施于任何类型的表达式,并不区别布尔值和算术值,只不过在需要时执行强制变换。为简单起见,只考虑如下文法生成的布尔表达式。
  E→E and E|E or E| not E|id rop id|true|false并且按通常习惯,约定布尔算符的优先顺序(从高到低)为not 、and、or,并且and和or服从左结合。
    布尔表达式的翻译方法
  通常,计算布尔表达式的值有两种办法,第一种办法,如同计算算术表达式一样,步步计算出各部分的真假值,最后计算出整个表达式的值。例如,用数值1表示true,用0表示false。那么布尔表达式1 or(not 0 and 0)or 0的计算过程是:
  1 or(not 0 and 0)or 0
  =1 or(1 and 0)or 0
  =1 or 0 or 0
  =1 or 0
  =1
  另一种计算方法是采取某种优化措施,只计算部分表达式,例如要计算A or B,若计算出A的值为1,那么B的值就无需再计算了,因为不管B的值为何结果,A or B的值都为1。
  上述两种方法对于不包含布尔函数调用的表达式是没有什么差别的。但是,假若一个布尔式中会有布尔函数调用,并且这种函数调用引起副作用(如有对全局量的赋值)时,这两种方法未必等价。采用哪种方法取决于程序设计语言的语义,有些语言规定,函数过程调用应不影响这个调用处环境的计值,或者说,函数过程的工作不许产生副作用,在这种规定下,可以任选其中一种。
  若按第一种办法计算布尔表达式。布尔表达式a or b and not c翻译成的四元式序列为:
  (1) t1∶=not c
  (2) t2∶=b and t1
  (3) t3∶=a or t2
  对于像a<b这样的关系表达式,可看成等价的条件语句if a<b then 1 
  else 0,它翻译成的四元式序列为:
  (1) if a<b goto (4)
  (2) t∶=0
  (3) goto (5)
  (4) t∶=1
  (5) …
  其中用临时变量t存放布尔表达式a<b的值,(5)为后续的四元式序号。


0
1
分享到:
评论

相关推荐

    布尔表达式转换为四元式

    设计一个语法制导翻译器,将布尔表达式翻译成四元式。要求:先确定一个定义布尔表达式的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户...

    布尔表达式的递归下降翻译程序设计

    递归下降翻译程序设计是指使用递归下降的方法将布尔表达式翻译成四元式序列,并最终生成逆波兰式。本设计的主要目的是设计一个布尔表达式的递归下降翻译程序,通过对布尔表达式的递归下降分析,生成四元式序列,并...

    编译原理课程设计-布尔表达式的翻译器

    布尔表达式翻译器是编译原理课程设计中的一个重要实践项目,它涉及到编译器前端的主要模块,包括词法分析、语法分析、语义分析及代码生成。在这个项目中,学生通常需要实现一个能够将高级的布尔表达式转换为等效的...

    编译原理课程设计布尔表达式

    ### 编译原理课程设计——布尔表达式 #### 一、概述 编译原理是一门研究如何将高级语言翻译成机器语言的过程和技术的学科。它不仅涵盖了词法分析、语法分析、语义分析等多个阶段,还涉及到了中间代码生成、目标...

    ch赋值语句与布尔表达式的翻译张素琴实用PPT课件.pptx

    在编程语言的编译原理中,赋值语句和布尔表达式的翻译是解析和编译过程中的关键步骤。本文将详细讲解如何将这些语句转化为机器可理解的形式,即四元式。 首先,我们来看简单赋值语句的翻译。在计算机科学中,赋值...

    abc.rar_ABC

    "描述"提到的"布尔表达式翻译逆波兰式"是一个计算机科学中的算法概念,涉及到编译原理和计算理论。 布尔表达式是基于布尔代数的一种数学表达方式,常用于逻辑运算,例如在编程语言中进行条件判断。布尔表达式可以...

    布尔翻译逆波兰式,完整实验报告,写上班级姓名即可

    布尔翻译逆波兰式是一种在计算机科学中用于表示布尔表达式的计算方法,它是逆波兰表示法(也称为后缀表示法)的一个特例,主要用于布尔代数的运算。在这个实验报告中,我们将深入探讨这一概念,并了解如何将其应用于...

    布尔翻译逆波兰式【C++】

    布尔翻译逆波兰式是一种在计算机科学中用于表达布尔表达式的计算方法,特别是在编译原理领域。这个题目要求使用C++编程语言实现一个程序,能够将布尔表达式转换为逆波兰表示法(也称为后缀表达式)。逆波兰表示法是...

    《编译原理》(陈火旺版)课后作业参考答案ch6-10[参照].pdf

    4. **布尔表达式翻译**:布尔表达式`A or (B and not (C or D))`可以转换为两种类型的四元式,分别用于数值计算和条件控制,以便于后续的代码生成和优化。 5. **循环结构的翻译**:`While A这样的循环结构,需要...

    简单的表达式求值--yacc&lex--

    http://topic.csdn.net/u/20090602/17/f9e42b12-5923-42b6-898f-402ab4901a74.html 类型 double , 支持 常用数学函数如 sqrt , sin , cos , 用户自定义函数,等

    编译原理(将简单程序翻译成四元式)

    文法规则: 1.<程序>—>program id <语句块> 2.<语句块>—> { 语句 ...14.<布尔表达式>—> <关系表达式> [ and | or <布尔表达式> ] 15.<关系表达式>—> <表达式> <关系> <表达式> 16.<关系>—> | | > | >= | == | <>

    东南大学1997-1999编译原理试题.doc

    这部分题目要求将条件循环和布尔表达式翻译成四元式中间代码序列和后缀式。四元式是高级语言到低级语言转换过程中的一种中间表示,有助于简化后续的代码生成。后缀式(逆波兰式)是一种无括号的表达式表示,便于计算...

    LR Translator of Boolean Expression (codes+document)

    布尔表达式LR翻译器是一个基于编译原理的项目,它实现了对布尔表达式的解析和转换。这个项目的主要目的是让学生理解LR分析器的工作原理,并能够应用到实际问题中,如解析和求值布尔逻辑表达式。在提供的压缩包文件中...

    东师21春《编译原理》在线作业1参考答案.docx

    在设计布尔表达式翻译算法时,表示当关系 A 成立时跳转到 p 的四元式为: - **A. (jnz,A1,p)**:这里 jnz 表示“非零跳转”,意味着如果 A1 的值不为零,则执行跳转。 #### 14. 编译程序的运行环境依赖性 有些...

    华东交通大学编译原理试题库_试卷五.doc

    2. **翻译布尔表达式**:布尔表达式翻译成转移四元式序列的过程涉及条件分支的处理,以及真假链的构建。具体转换过程略。 #### 七、运行时栈结构 **题目描述**: 给出一个计算 \(m*2^n\) 的 C 语言程序,试给出...

    三菱,西门子,欧姆龙常用符号

    布尔表达式是一种找出输入量、辅助量(内部元件)、输出量之间关系,用布尔表达式或逻辑方程表达出来的编程方法。现今有少部分 PLC 采用这种编程方法,它配有专用的布尔表达式编程器。 PLC 编程语言的选择: 在...

    双分支条件语句的递归下降翻译程序设计

    这里,\(\langle \text{条件语句} \rangle\) 定义了整个条件语句,\(\langle \text{布尔表达式} \rangle\) 是一个返回布尔值的表达式,而两个 \(\langle \text{赋值语句} \rangle\) 分别定义了当布尔表达式为真或假...

    while循环语句翻译

    3. 解析条件:将条件表达式转换为四元式序列,确保结果是布尔值。 4. 处理循环体:将循环体的每条语句转换为四元式,添加到序列中。 5. 循环跳转:在循环体结束处,创建一个四元式表示“跳转”(例如,`JNZ label`,...

Global site tag (gtag.js) - Google Analytics