§2 语法分析
C1 语法分析
1)作用:接受词法单元流,检查是否符合文法,翻译出中间代码
2)语法分析方法:自底向上与自顶向下
3)语法错误处理:
- 错误:词法错误、语法错误、语义错误、逻辑错误
- 恢复:
- Panic模式:依次丢弃输入中的符号,直至找到同步语法单元。同步语法单元通常为界限符,如
;
{}
等,作用清晰无二义。Panic模式简单,不会进入死循环,但往往跳过大量输入 - 短语层次恢复:纠正输入,如替换
,
与;
,补充;
。难以检测实际错误在检测位置之前的情况 - 错误产生式:预测可能的常见错误,在文法中加入特殊产生式
- 全局纠正:理想情况下通过最小改动纠正错误
- Panic模式:依次丢弃输入中的符号,直至找到同步语法单元。同步语法单元通常为界限符,如
C2 文法
1)上下文无关文法
:
终结符号
:组成串的基本符号,是词法单元名
。通常使用黑体字符串,小写字母,运算符,标点表示非终结符号
:表示串的集合,定义语言以及语言层次结构。通常使用大写字母,小写斜体,希腊字母表示开始符号
:特殊非终结符号,定义文法的全部语言。通常使用S表示产生式
:产生式头(非终结)->产生式体。开始符号的产生式放在最前面。可使用|
连接多个产生式
2)推导
:展开串,如 A → γ , α A β ⟹ α γ β A\to\gamma,\alpha A\beta\implies\alpha\gamma\beta A→γ,αAβ⟹αγβ
-
KaTeX parse error: Got function '\mskip' with no arguments as argument to '\overset' at position 24: …ath{\kern#1#3}{\̲m̲s̲k̲i̲p̲#1#2}\relax:零或多步推导出; ⟹ \implies ⟹:一步推导出;KaTeX parse error: Got function '\mskip' with no arguments as argument to '\overset' at position 24: …ath{\kern#1#3}{\̲m̲s̲k̲i̲p̲#1#2}\relax:一步或多步推导出
-
KaTeX parse error: Got function '\mskip' with no arguments as argument to '\underset' at position 24: …ath{\kern#1#3}{\̲m̲s̲k̲i̲p̲#1#2}\relax:最左推导,替换最左非终结符;KaTeX parse error: Got function '\mskip' with no arguments as argument to '\underset' at position 24: …ath{\kern#1#3}{\̲m̲s̲k̲i̲p̲#1#2}\relax:最右推导
-
若文法G开始符号KaTeX parse error: Got function '\mskip' with no arguments as argument to '\overset' at position 24: …ath{\kern#1#3}{\̲m̲s̲k̲i̲p̲#1#2}\relax,则 α \alpha α称G的一个
(最左/最右)句型
;若 α \alpha α不含非终结符,则称句子
。
语言是句子的全集,若两个文法生成相同语言,称文法等价验证文法生成语言:先验证文法生成的串在语言中,再验证语言中的串可由文法生成
-
语法分析树的叶节点序列构成一个句型,称其
结果/边缘
推导对应于为语法分析树的非终止符叶节点按其产生式添加子树
3)正则文法:上下文无关文法的真子集
- 正则文法可由NFA生成: