属性文法
来源:互联网 发布:雷凌轮毂数据 编辑:程序博客网 时间:2024/05/01 06:52
属性文法是上下文无关文法在语义上的扩展,可定义为如下三元组:
A = (G , V , E) ; G(文法);V(属性集);E(语义规则集)。
⑴ 属性 代表与文法符号相关的信息,这里主要指语义信息(类型、种类、值和值地址…);文法产生式中的每个文法符号都附有若干个这样的属性。
(2) 属性集 V是有穷的属性集,每个属性与文法的一个终结符或非终结符关联,属性加工的过程即是语义处理的过程。
⑶ F是关于属性的属性断言或一组属性的计算规则(称为语义规则)。
属性分两类(按属性求值规则区分):
综合属性:其值由子女属性值来计算(自底向上求值);
继承属性:其值由父兄属性值来计算(自顶向下求值)
属性文法构造示例:
算术表达式的属性文法
※ 设:X.val 为文法符号 X 的值属性;
※下述属性文法用于算术表达式的求值运算:
E -> E1 + T ; || E.val:= E1.val + T.val
E -> E1 - T ; || E.val:= E1.val - T.val
E -> T ; || E.val:= T.val
T -> T1 * F ; || T.val:= T1.val * F.val
T -> T1 / F ; || T.val:= T1.val / F.val
T -> F ; || T.val:= F.val
F -> ( E ) ; || F.val:= E.val
F -> i ; || F.val:= i.val
【注】可以看出: X.val 属性是综合属性。
属性文法的语法分析树是基于BNF文法的语法分析树,并且每一结点都附有一个可能为空的属性值集合。如果语法分析树上的所有属性值都已计算,就称这棵树是完全属性的。尽管实际上并不一定这样做,但可以方便地认为,属性值是在编译器构建好完全无属性的语法分析树后再计算的。
- 属性文法
- 属性文法
- 语义分析之一:属性文法
- 文法
- 文法
- 属性文法与中间代码生成
- 【编译原理】语法制导翻译之属性文法(一)
- 编译原理结构框架6语法制导翻译与属性文法
- 乔姆斯基文法
- 乔姆斯基文法
- 简单文法
- 文法分析
- 文法例题
- 文法分析
- SNL文法
- 文法相关
- C++文法
- 文法分类
- Thirft框架介绍
- [POJ][1015]Jury Compromise
- 界面设计
- 阿里负责人揭秘面试潜规则
- 题目1083:特殊乘法(2010年清华大学计算机研究生机试真题)
- 属性文法
- Android的Touch系统简介(一)
- Apache Thrift - 可伸缩的跨语言服务开发框架
- UVAlive 2031 - Dance Dance Revolution(dp,黑书dp例四)
- 在manager bean里获取/设置PageFlowScope变量值
- android:layout_weight详解
- POJ2010 Moo University - Financial Aid
- ARC mark
- CoreData的增删改查