编译原理 自顶向下的分析
【【编译原理】哈工大公开课(高清版)】 https://www.bilibili.com/video/BV1dL4y1H7T8/?share_source=copy_web&vd_source=57dbd16b8c7c2ad258cccce5966c5be8

最左推导

最右推导

自顶向下的语法分析采用最左推导方式

因为输入流一般是自左向右的
自顶向下语法分析的通用形式(编程实现)

类似NFA,在每层递归都会产生分叉口,在最左深度搜索不成功时,需要向上回溯尝试,导致效率较低
预测分析

需要根据多个候选式的不同串首终结符来匹配,其实严格说不能算预测
回溯

左递归

消除直接左递归



消除间接左递归

消除左递归算法

避免共同前缀导致的回溯 - 提左公因子

LL(1) 文法


就是选择空符号是,被判断的其实是后一个字符,可以通过判断后面符号选择当前路线
相当于 dfa中的peek函数


FIRST 就是一个串可以确定的第一个终结字符,可以包括空
SELECT 就是可以选择的第一个字符,显然不包括空,对于空要选择空后的可选集合


不能同时推导空,否则两个都是FOLLOW(A),相交
同时空的FOLLOW集合不能和已有的可选集合重复,否则违反首可选终结符是唯一的
类似DFA,对于单一字符输入有唯一的出度


浙公网安备 33010602011771号