编译方式:将高级语言转换成机器语言,再执行
解释方式:直接执行,不产生中间语言(机器语言)
0型文法:对左部和右部没有任何限制
1型文法(上下文有关文法):一个单词是否可以出现在特定位置上要依赖于上下文
2型文法(上下文无关文法):左部是单个非终结符,右部是终结符和非终结符组成的符号串
3型文法(右线性文法/正规文法):对2型文法进一步的限制,右部只能是单一终结符或单一终结符跟着一个单一非终结符
自上而下分析方法:从文法的识别符出发,看能否推导出待检查的符号串,若能,则说明该符号串是一个句子。
自下而上分析方法:从待检查的符号串出发,看最终能否归约到文法的识别符号。
LL(k)是一种自上而下的语法分析方法,从文法出发,生成句子的最左推导。从左向右,每次向前查看k个字符。
自下而上分析方法是一种“移进-归约”方法LR(k)。按从左至右扫描输入串,并自下而上的归约。至多查看k个输入,判断是移进还是归约。若是归约,则能唯一地选中一个产生式去归约已经识别出的句柄。
比较:
- 复杂度
LL更简洁 - 普适性
LR文法能够支持更多上下文无关文法(LL文法需要消除左递归) - 错误恢复
LL语法分析器有更好的上下文信息,更容易恢复