1.9 KiB
1.9 KiB
-
语法分析是把单词流翻译成抽象语法树
有两种构造抽象语法树的方法:从根结点到叶子结点构造(自顶向下方法),从叶子结点到根结点构造(自底向上方法)。语法分析总是从左到右依次扫描单词流,这就是LL或LR文法里第一个字母L的含义。LL文法第二个L的意思是最左推导,LR文法第二个R的意思是最右推导。
-
产生式、推导和归约
产生式是非终结符号的某种构造方法。推导是将产生式的左部替换为产生式的右部。归约是将产生式的右部替换为产生式的左部。最左推导总是选择每个句型的最左非终结符进行推导。最右推导总是选择每个句型最右的非终结符号进行推导。
-
自顶向下的语法分析
- 两个问题:一选择哪个终结符是不确定的,二选择哪个产生式是不确定的。可以通过最左推导的方法消除第一个不确定性。
- 消除左递归和提取左公因子
- LL(1)分析的1代表向前查看1个单词,为什么要向前看?因为要消除第二种不确定性。
- LL(1)文法要求对于任意非终结符,其所有推导结果均不能相同。LL(1)文法是使LL(1)分析消除不确定性的文法。
- 怎么样才能使所有推导结果都不相同呢?预测集合不相交即可。
- first集是所有可能符号串的第一个终结符的集合。first集合的计算方法。
- follow集合是方法符号后面跟的可能的终结符的集合(不包括空字符)。follow集合的计算方法。
- LL(1)分析之递归下降
- LL(1)分析之表驱动
- 错误处理
-
自底向上的语法分析
- 两个问题:一选择哪个产生式是不确定的,二匹配哪个位置上的子串是不确定的。
- 移进归约分析,两种类型的冲突,表驱动方法
- LR分析