|
14 | 14 |   预测分析法并不能解析所以CFG文法,实际上它只能解析LL(1)文法,所以我们应该通过调整产生式,使文法尽可能的符合LL(1)文法。不过即使不能完全满足LL(1)也问题不大,我们可以通过一个特殊处理解决那些超出LL(1)范围的文法。
|
15 | 15 | <br/><br/>
|
16 | 16 |   综上所述,我们可以得出如下制作js parse的思路:
|
17 | | -<br/><br/> |
| 17 | +<br/> |
18 | 18 |    1选择合适算法:自顶向下、自底向上和通用方法。而自顶向下实现简单、可读性好、效率高,所以选择自顶向下。自顶向下具体通过递归下降实现,但存在回溯问题,所以采用预测分析法
|
19 | 19 | <br/>
|
20 | 20 |    2判判js是否满足LL文法:预测分析法要求语言满足LL(k)文法,为简化模型,我们先判定js是否满足LL(1)文法。
|
21 | 21 | <br/>
|
22 | 22 |    3获取js文法:根据js语言特点得到形式化定义文法G。
|
23 | 23 | <br/>
|
24 | 24 |    4文法G优化:先提取G产生式左公共因子,再消除左递归,这样就有可能变为LL(1)文法。然后要分别写出改写后文法的FIRST集、FOLLOW集、SELECT集,如果相同左部的SELECT集的交集不为空集,则为LL(1)文法。
|
25 | | - 5即使部分文法不能完全满足LL(1),也没关系,我们可以通过特例特殊处理的办法使得整体文法兼容到LL(1)预测分析算法。这步通常可以满足所有编程语言,还不好处理的话就只能采用自底向上算法了。[为什么所有的教科书中都不赞成手写自底向上的语法分析器? - 冯东的回答 - 知乎](https://www.zhihu.com/question/21475266/answer/18346898) |
| 25 | +<br/> |
| 26 | +   5即使部分文法不能完全满足LL(1),也没关系,我们可以通过特例特殊处理的办法使得整体文法兼容到LL(1)预测分析算法。这步通常可以满足所有编程语言,还不好处理的话就只能采用自底向上算法了。[为什么所有的教科书中都不赞成手写自底向上的语法分析器? - 冯东的回答 - 知乎](https://www.zhihu.com/question/21475266/answer/18346898) |
26 | 27 | <br/><br/><br/>
|
27 | 28 |
|
28 | 29 |
|
|
0 commit comments