构造SLR分析表 public void button3_Clickobject sender EventArgs e listView2ColumnsClear; listView2ItemsClear; listView2View = ViewDetails; listView
该代码实现了构造SLR分析表的功能,具体实现步骤如下:
-
清空并设置listView2的列和视图类型。
-
为listView2添加列,包括状态、终结符、#、非终结符。
-
遍历grammar.DFA中的每个状态,为每个状态创建一个ListViewItem,并设置其第一列为状态编号。
-
针对每个状态,遍历grammar.Terminator中的每个终结符,如果该状态的ACTION表中包含该终结符,则将对应的值添加到ListViewItem的子项中,否则添加一个空值。
-
针对每个状态,如果其ACTION表中包含#,则将对应的值添加到ListViewItem的子项中,否则添加一个空值。
-
针对每个状态,遍历grammar.Nonterminal中的每个非终结符,如果该状态的GOto表中包含该非终结符,则将对应的值添加到ListViewItem的子项中,否则添加一个空值。
-
将创建的ListViewItem添加到listView2中。
-
设置listView2的网格线。
-
GOTO方法实现了求解状态集合的转移函数,接收三个参数:当前状态集合,转移字符,SLR语法。首先创建一个空的字典dictionary,用于存储转移后的状态集合。
-
针对当前状态集合中的每个状态,遍历其每个产生式,如果该产生式的点号后面有一个字符,且该字符为转移字符,则将该产生式的点号向后移一位,并将其加入到字典dictionary中对应的状态集合中。
-
最后,调用CLOSURE方法对字典dictionary中的每个状态集合进行闭包操作,得到新的状态集合,作为GOTO方法的返回值
原文地址: https://www.cveoy.top/t/topic/hsTe 著作权归作者所有。请勿转载和采集!