语义和语法结构之间的关系

 根据语法分析的难度, 可以为所有的上下文无关语法划分一个层次结构, 最常用的即: 任意CFG, LR(1)语法, LL(1) 语法, 正则语法(RG)。



相比LR(1) 或 LL(1), 任意CFG需要花费更多的时间进行语法分析,  Earley 算法可以在O(n**3) 的时间内解析任意CFG, n为输入流中的单词数目, 相对低效。


LR(1)  包含了无歧义CFG的很大一个子集。 LR(1) 语法可以通过从左到右线性扫描自底向上进行语法分析, 任何时候都只需要从当前输入符号前瞻最多一个单词。 很多工具可以从LR(1)语法导出语法分析器, 这使得LR(1)语法分析器应用较为广泛。 


LL(1) 语法是LR(1) 语法的一个重要子集, LL(1) 语法可以通过从左到右线性扫描, 自顶向下进行语法分析。 只需要前瞻一个单词。利用手工编码的递归下降语法分析器或者生成的LL(1)语法分析器, 都可以解析LL(1)语法。


正则语法是生成正则语言的CFG。正则语法等价于正则表达式, 定义了DFA可以识别的那些语言。 在构建编译器的过程中, 正则语言主要用于定义词法分析器。


几乎所有的程序语言都可以用LR(1)形式表达, 通常也可以用LL(1)形式表达, 大多数编译器使用的快速语法分析算法, 是基于这两种。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值