永久免费的网站一般网站的架构
2026/4/18 13:16:19 网站建设 项目流程
永久免费的网站,一般网站的架构,仿煎蛋 wordpress 主题,域名费用和网站服务器费用是同样的吗布尔表达式的文法与代码结构在编译原理中属于中间代码生成阶段的重要内容#xff0c;主要用于将高级语言中的逻辑判断#xff08;如 if、while 中的条件#xff09;转换为带有控制流信息的中间表示#xff08;如四元式#xff09;#xff0c;并利用“短路求值”机制优化执…布尔表达式的文法与代码结构在编译原理中属于中间代码生成阶段的重要内容主要用于将高级语言中的逻辑判断如if、while中的条件转换为带有控制流信息的中间表示如四元式并利用“短路求值”机制优化执行效率。一、布尔表达式的上下文无关文法CFG常见的布尔表达式文法可定义如下经过左递归消除以适用于自顶向下分析E → E1 or T { E.tc Merge(E1.tc, T.tc); E.fc T.fc; } | T { E.tc T.tc; E.fc T.fc; } T → T1 and F { T.tc F.tc; T.fc Merge(T1.fc, F.fc); } | F { T.tc F.tc; T.fc F.fc; } F → not F1 { F.tc F1.fc; F.fc F1.tc; } | ( E ) { F.tc E.tc; F.fc E.fc; } | rel { F.tc NewLabel(); F.fc NewLabel(); Gen(if, rel.op, goto, F.tc); Gen(goto, , , F.fc); }其中rel表示关系表达式如a btc真出口true chain当表达式为真时跳转的目标标签链fc假出口false chain当表达式为假时跳转的目标标签链NewLabel()生成新的标签Gen(op, arg1, arg2, result)生成一条四元式Merge(c1, c2)合并两个出口链返回合并后的链头Backpatch(chain, label)将链中所有待填地址回填为label二、关键概念解析1.短路计算Short-Circuit EvaluationA and B若 A 为假则不计算 BA or B若 A 为真则不计算 B编译时通过控制流跳转实现无需实际求值2.真出口tc与假出口fc每个非终结符如 E、T、F携带两个属性tc指向“应跳往真分支”的标签链即该子表达式为真时需跳转的位置fc指向“应跳往假分支”的标签链这些不是立即确定的地址而是待回填的跳转链表拉链法3.拉链与回填技术拉链Chaining将尚未确定目标地址的跳转指令组织成链通过链接字段指向下一条待填指令编号回填Backpatch当目标地址确定后遍历链中所有指令并填写正确地址例如defBackpatch(chain,label):whilechain:instruction[chain.index].targetlabel chainchain.next三、翻译示例E → E¹ and E²语义动作E.tcE².tc E.fcMerge(E¹.fc,E².fc)Backpatch(E¹.tc,E².begin_label)# 若E¹为真继续计算E²说明只有当E¹为真时才需要评估E²所以要把E¹的真出口tc回填到E²的起始位置E整体为真的出口是E²为真的出口E整体为假的出口是E¹或E²为假的出口合并而成四、常见语句的翻译1.if (B) S1B.true_chain回填到S1起始B.false_chain是整个if结束后的出口无 else 时直接回填B.fc到next_instruction2.if (B) S1 else S2B.tc→S1.beginB.fc→S2.beginS1.chain和S2.chain合并为后续语句入口3.while (B) S生成循环开始标签L1B的tc指向S.beginB的fc指向循环结束L2S.chain回填到L1实现循环使用Gen(goto, , , L1)在S后跳回五、四元式示例基于GEN函数假设表达式(a b) or (c d)生成的四元式可能如下100: if a b goto 102 101: goto 103 102: goto 105 ; // 真出口直接跳过整个or的假分支 103: if c d goto 105 104: goto 106 105: ... ; // 真出口汇聚点 106: ... ; // 假出口注意实际中使用链式管理避免立即指定具体标号。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询