`

布尔表达式的翻译

阅读更多
  程序设计语言中的布尔表达式有两个作用。一是计算逻辑值,更多的情况是二,用做改变控制流语句中的条件表达式,如在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

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

    zhanghui.rar_布尔表达式

    布尔表达式的翻译,对输入的文法判断其合法性,并输出逆波兰表达式

    abc.rar_ABC

    布尔表达式翻译逆波兰式功能齐全还安好,可以借鉴

    简单的表达式求值--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.<关系>—> | | > | >= | == | <>

    minic_单词种别_hardlykv5_return_c词法结果输出_MiniC语言编译系统java实现_

    能够翻译声明语句、数学表达式、关系表达式、布尔表达式,赋值语句以及这些语句嵌套。实现了符号表,能够检查变量重复声明、使用时未定义错误。能够翻译多个函数,存储函数表,以及翻译函数调用语句,可以翻译任意...

    《编译原理》课程设计

    (2)高级要求:在完成基本要求的基础上,实现if语句和布尔表达式的翻译。if语句的文法和翻译方案参见课本。 变量说明语句的文法及相应的语义子程序:.att表示数据类型属性,fill函数表示将单词id及其类别属性填写...

    递归下降法翻译if then条件语句

    编译原理实验,用C++实现的一个对if then条件语句的翻译过程,可以实现对简单布尔表达式和简单赋值语句的翻译,可以识别长串标识符。

    最新编译原理课程设计

    2)要求实现的功能:翻译 +,-,*, / 四则运算表达式及布尔表达式,翻译包含if语句,while语句及do-while语句及相互间的嵌套。 四 概述 1)编写语言:C++; 2)目标语言:汇编;源语言:C语言; 3) 开发工具:VS08; 4...

    LR Translator of Boolean Expression (codes+document)

    编译原理课设---布尔表达式的LR翻译器--包括源码和课设文档

    第七章-第四讲-1

    第七章 语义分析的中间代码生成第七章语义分析的中间代码生成• 本章目录• 7.1 中间语言• 7.2 赋值语句的翻译• 7.3 布尔表达式的翻译• 7.4 控制

    第七章-第二讲-1

    第七章 语义分析的中间代码生成第七章语义分析的中间代码生成• 本章目录• 7.1 中间语言• 7.2 赋值语句的翻译• 7.3 布尔表达式的翻译• 7.4 控制

    IF-ELSE条件语句的翻译程序设计

    对条件语句: IF 〈布尔表达式〉 THEN 〈赋值语句〉 ELSE〈赋值语句〉 (1)按给定的题目写出符合语法分析方法要求的文法和属性文法描述。 (2)按给定的题目给出语法分析方法的思想及分析表设计。 (3)按给定的题目给...

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    JSPExample6.jsp 结合布尔类型变量判断学生成绩等级 JSPExample7.jsp text.html页面提交至该页,并显示提交数据 text.html 页面数据提交至JSPExample7.jsp JSPExample8.jsp 不同类型混合...

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

    〈条件语句〉∷= IF 〈布尔表达式〉 THEN 〈赋值语句〉 ELSE 〈赋值语句〉 设计双分支条件语句文法,给出该文法的属性文法,用递归下降分析法实现对双分支条件语句的翻译,给出翻译的四元式结果。

Global site tag (gtag.js) - Google Analytics