自顶向下语法分析器与自下到顶
首先定义一个语法
自顶向下:
消除直接左递归:将A-A+b/b可以转换为A-bA' A'-+bA’/空
消除间接左递归:为非终结符规定一个任意的顺序。用循环实现只能从小的到大的推导,就转换为直接左递归了。 防止无限的推导
无回溯的实现:构造First Fllow和First+。 实现神喻
提取左公因子,防止First+的矛盾的出现无法神喻
编码的实现:1:递归下降,利用逻辑上的连续,对神喻的实现直接编码,在选择的内部进行匹配,即在代码内即实现通过First+的选择,逻辑连贯。类似于
NT NT T..... ,NT等就像一个函数,在其内部识别输入,对First+的选择在函数内通过if来实现。
2.表构造法:用栈来实现最左(右)推导,制作一个通过First+选择规则的表,每次推导时通过这个表来选择,进行输入的匹配,匹配成功再通过pop栈来实现下一个的推导,可以减少代码,用栈来实现一步一步的推导。