16、高阶属性文法与无扫描广义LR解析技术解析

高阶属性文法与无扫描广义LR解析技术解析

1. 属性文法中的定义性测试与转发技术

在特定的语法树中,如果计算合成属性 s 所需的某个属性的语义函数缺失,那么对于任何给定输入, s 都不会出现在输出中。这种信息可用于检测语义函数缺失的情况。不过,定义性函数存在一个缺点,即它无法区分循环和闭合情况。若 s 未出现在输出中,可能是由于缺少语义规则,也可能是因为 s 依赖于循环计算。但在这两种情况下,语法都是定义不明确的,不过这并非主要缺点。

定义性测试的算法与循环性测试非常相似。该测试会为语法中的每个非终结符生成一组定义性函数。由于可能的定义性函数集合是有限的,算法采用与循环性测试相同的技术,能在有限时间内计算出这些函数,而无需检查每棵可能的树。

此外,还引入了转发作为高阶属性文法模块化分解的技术。该技术与编程语言模块化描述的其他特性相互独立。并且,通过整个语法的转换可以完全消除转发的使用。生产值属性与转发结合使用很方便,其使用也可以被转换掉。

2. 无扫描广义解析技术
2.1 广义解析

广义解析器能处理任意上下文无关文法,不受LL和LR等受限解析算法对文法类别的限制。使用任意上下文无关文法有两大优势:
- 文法组合性 :上下文无关文法类在并运算下是封闭的,而其所有真子类并非如此。例如,两个LALR文法的组合往往不再是LALR文法。上下文无关文法的可组合性为开发模块化语法定义形式提供了可能,像定义Cobol与CICS、C与汇编等混合语言时,文法的模块化就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值