当前位置: 首页 > news >正文

【从零开始学习计算机科学】编译原理(五)语法制导翻译

【从零开始学习计算机科学】编译原理(五)语法制导翻译

  • 语法制导翻译
    • 语法制导定义SDD
      • SDD的求值顺序
        • 两类重要的SDD
    • 语法制导的翻译方案SDT
      • SDT的实现
        • L属性定义的SDT
      • 左递归翻译方案

语法制导翻译

语法表述的是语言的形式,或者说是语言的样子和结构。而程序设计语言中另一方面,是附着在语言结构上的语义;语义揭示了程序本身的涵义、施加于语言结构上的限制、要执行的动作。

语法制导翻译就是如何在语法上绑定语义。语法制导翻译是目前最常用的语义分析技术,具体包括两种标记方法:语法制导定义(Syntax-directed definitions)SDD和语法制导的翻译方案(Syntax-directed translation scheme)SDT。

语法制导定义SDD

语法制导翻译的基本思想是在上下文无关文法的基础上,将语言结构的语义以属性的形式赋予代表此结构的文法符号。其属性的计算以语义规则的形式赋予由文法符号组成的产生式。属性可以代表任何对象:字符串、数字、内存单元或其它对象。

例如,对于文法:

E → \to E 1 E_1 E1+T

E → \to T

T → \to F

F → \to digit

假设F.val、T.val、E.val分别为文法符号F、T、E的属性值。digit.lexval为文法符号digit的属性:当digit为常数时,digit.lexval为在常数表中的入口,当digit为标识符时,digit.lexval为在符号表中的入口

语义规则用来计算与产生式中出现的文法符号相关联的属性的值。在一个语法制导定义中,语法规则中的任一条产生式 A → α A\to\alpha Aα,都有与之相关联的一套语义规则。比如:

E → \to E 1 E_1 E1+T , E.val := E 1 E_1 E1.val + T.val

E → \to T , E.val := T.val

T → \to F , T.val := F.val

F → \to digit , F.val := digit.lexval

为每一个产生式配上语义规则并且在适当的时候执行。即,当归约或推导到某个产生式时,除了按照产生式进行相应的代换之外(语法分析),还要按照所对应的语义规则执行操作,如计算表达式、查填符号表、产生中间代码。

语法树结点N上的非终结符号A的属性可分为两种:

综合属性:只能通过N的子节点或N本身的属性值(一个节点可有多个属性)来定义。语法规则中等号的左边必然为产生式头部。

继承属性:只能通过N的父节点、N本身和N的兄弟结点上的属性值来定义。

在语法分析树中为每个文法符号上加上它们的属性,则称为带注释的语法分析树,简称注释语法分析树。

SDD的求值顺序

对于同时具有继承属性和综合属性的SDD,不能保证有一个顺序来对所有节点上的属性进行求值。例如产生式 A → B A \to B

相关文章:

  • grunt构建工具:scss转css
  • JavaWeb-servlet6中request和response的使用
  • 第J2周:ResNet50V2算法实现01(Tensorflow硬编码版)
  • ubuntu2404 安装 过程中 手动设置网络
  • 《深度剖析:鸿蒙系统下智能NPC与游戏剧情的深度融合》
  • 今天六大热点爆料
  • Redis 数据结构详解
  • 设计模式-结构型模式-装饰器模式
  • 信奥赛CSP-J复赛集训(模拟算法专题)(10):P2356 弹珠游戏
  • Linux:Ubuntu server 24.02 上搭建 ollama + dify
  • 【Golang】第三弹----运算符
  • 数据类设计_图片类设计之3_半规则图类设计(前端架构基础)
  • 【贪心算法4】
  • AI 变革药物研发:深势科技的云原生实践之路
  • 【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换
  • C++20中的`std::endian`:深入理解大端/小端/本地字节序
  • wps word 正文部分段前段后间距调整无用
  • halcon机器人视觉(四)calibrate_hand_eye_stationary_3d_sensor
  • Pytorch系列教程:可视化Pytorch模型训练过程
  • 【WRF-Urban】报错解析:ZDC + Z0C + 2m is larger than the 1st WRF level
  • 张涌任西安市委常委,已卸任西安市副市长职务
  • 观察|本轮印巴冲突或促使印度空军寻求更先进战机
  • 汕头违建豪宅“英之园”将强拆,当地:将根据公告期内具体情况采取下一步措施
  • 【社论】公平有序竞争,外卖行业才能多赢
  • 杭勇已任常州市政协党组成员,此前任常州市委常委、秘书长
  • 硅料收储挺价“小作文”发酵光伏板块罕见大涨,知情人士:确实在谈