type
status
date
slug
summary
tags
category
icon
password
notion image

属性文法

属性文法包含一个上下文无关文法和一系列语义规则。
  • 是一种接近形式化的语义描述方法。
  • 每个文法符号有相应的属性 V——属性集合,代表与文法符号相关的信息;例如类型、值、代码序列等。
  • 每个产生式配有相应的语义规则 F——规则集合,计算属性的规则,可以产生代码、在符号表中存放信息、给出错误信息或执行任何其它动作,实现翻译;以函数形式 b:=f(c1,c2,…,ck) 表示。
  • 属性文法:三元组,在上下文无关文法的基础上,把每个文法符号和一组属性相关联,并给产生式附加以语义规则。
    • A=(G,V,F)
属性分为两类:综合属性和继承属性。
  • 对关联于产生式A→α的语义动作b:=f(c1,C2,···,Ck),如果b是A的某个属性,则b是A的一个综合属性。综合属性是自底向上传递信息。
  • 对关联于产生式A→α的语义动作b:=f(c1,C2,···,ck),如果b是产生式右边某个文法符号X的某个属性,则b是A的一个继承属性。继承属性是自顶向下传递信息。

综合属性

notion image
下面是一个简单表达式文法G[S]的一个仅含综合属性的属性文法(开始符号为S)
S→ E {print(E.val)} E→ E1+T {E.val:=Ej.val+T.val} E→ T {E.val:=T.val} T→ T1*F {T.val:=Ti.valxF.val} T→ F {T.val:=F.val} F→ (E) {F.val:= E.val} F→ d {F.val:=d.lerval}
其中d.lecval表示数值,E.val,T.val,F.val都为综合属性
notion image
notion image
 

继承属性

notion image
下面是一个包含综合属性、继承属性的属性文法:
E→TR{R.in:=T.val;E.val:=R.val}
R→+TR1{R1.in:=R.in+T.val;R.val:=R1.val}
R→−TR1{R1.in:=R.in−T.val;R.val:=R1.val}
R→ε{R.val:=R.in}
T→num{T.val:=lexval(num)}
notion image
notion image

语法制导翻译

语法制导翻译法:
由源程序的语法结构所驱动的处理办法,为文法中每个产生式配上一组语义规则,并且在语法分析的同时执行这些语义规则,完成相应的语义处理。每当用一个产生式推导或归约时,就执行对应的语义规则。

语法制导定义(SDD)

  • 是关于语言翻译的高层次规格说明
  • 隐蔽了许多具体实现细节,使用户不必显式地说明翻译发生的顺序
SDD是对CFG的推广
  • 将每个文法符号和一个语义属性集合相关联
  • 将每个产生式和一组语义规则相关联,这些规则用于计算该产生式中各文法符号的属性值
如果X是一个文法符号,a是X的一个属性,则用X.a表示属性a在某个标号为X的分析树结点上的值。
notion image

语法制导翻译方案(SDT)

  • 可以看作是对SDD的一种补充,是SDD的具体实施方案
  • 显式地指明了语义规则的计算顺序,以便说明某些实现细节
SDT是在产生式右部嵌入了程序片段的CFG,这些程序片段称为语义动作。按照惯例,语义动作放在花括号内。
notion image
一个语义动作在产生式中的位置决定了这个动作的执行时间。
 
  • 逆波兰式,即后缀式。
  • 三元式、四元式,相比三元式四元式多一个中间值。
 
 

📎 参考文章

 
💡
有关问题,欢迎您在底部评论区留言,一起交流~
软件工程:软件测试Linux程序设计:进程与进程同步
Loading...
Koreyoshi
Koreyoshi
一个无可救药的乐观主义者
Latest posts
编译原理:文法和语言
2025-6-3
智能体开发与接口调用
2025-6-3
软件工程:面向对象设计
2025-6-3
软件工程:面向对象的需求获取与需求分析
2025-6-3
软件工程:软件测试
2025-6-3
编译原理:语法制导翻译技术和中间代码生成
2025-6-3
Announcement
🎉写给自己的2025心愿🎉
保研
国奖
完善博客
学一门乐器
发表一篇论文
拍摄人生照片
去3个城市旅游
专业课知识视频
拍摄毕业季视频
----- 2025 ------
👏希望我们一起变好👏