computer_knowledge_notes/Compiling-Principle/lecture4_5.md

1.9 KiB
Raw Blame History

  • 语法分析是把单词流翻译成抽象语法树

    有两种构造抽象语法树的方法:从根结点到叶子结点构造(自顶向下方法),从叶子结点到根结点构造(自底向上方法)。语法分析总是从左到右依次扫描单词流这就是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分析