语法分析器
语法分析
语法分析器处理来自词法分析器的单词流,其职责是识别语法,确定被编译的程序是不是程序设计语言的语法模型中的一个有效语句。语法模型又一个形式语法G来表示,若单词串s属于G中定义的语言,则说G可以推导出s。
而语法分析器中:找到G中生成s的一个推导 的过程称为语法分析
|| 语法分析算法的两种通用类型
自顶向上的语法分析器试图通过(在各个单词上)预测下一个单词,依照语法的产生式来匹配输入流。这种算法,对于有限的语法而言高效精确
自底向上的语法分析器从底层(实际的单词序列)开始,不断积累上下文信息,直至出现显然的推导为止。
|| 语法的表示:
正则表达式往往不具有完整描述语法的能力(描述较短的词使用),我们通常用上下文无关语法(CFG)的形式来表示程序设计语言的语法
上下文无关语法
|| CFG中的概念:
- G是一组规则,描述了语句是如何形成的。可以从G导出的语句集成为G定义的语言,记作L(G)
- CFG定义的所有语言的集合,叫做上下文无关语言的集合
- 非终结符和终结符:CFG中语法变量称为非终结符(用于向语言添加结构和抽象)每一个单词都是一个终结符
这里的SheepNoise为语法变量
- 产生式:CFG中的每个规则都都称为一个产生式