该函数用于构建LR分析表。具体实现过程如下:

  1. 首先定义一个LR分析表,使用Dictionary<int, List>类型保存,其中键为状态编号,值为该状态对应的分析表项列表。

  2. 对每个状态进行遍历,分别对该状态经过终结符和非终结符的情况进行判断。

  3. 对于经过终结符的情况,首先判断该状态是否包含移进项。如果包含,则遍历该状态的移进项列表,如果该移进项的终结符与当前终结符相同,则将其加入分析表项列表中,并将flag标记为1。如果没有找到符合条件的移进项,则遍历该状态的归约项列表,如果该归约项的点已经到达产生式的末尾,并且当前终结符在该归约项的左部非终结符的FOLLOW集中,则将其加入分析表项列表中,并将flag标记为1。如果没有找到符合条件的移进项和归约项,则将该终结符对应的分析表项设置为空字符串。

  4. 对于经过非终结符的情况,如果该状态包含移进项,则遍历该状态的移进项列表,如果该移进项的非终结符与当前非终结符相同,则将其加入分析表项列表中,并将flag标记为1。如果没有找到符合条件的移进项,则将该非终结符对应的分析表项设置为空字符串。

  5. 将每个状态对应的分析表项列表加入LR分析表中。

LR分析表构建函数详解 - buildtable() 函数实现原理

原文地址: https://www.cveoy.top/t/topic/f1PL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录