public void button4_Click_1object sender EventArgs e一键显示 listView3Clear; listView3ColumnsClear; listView3ItemsClear; listView3View = ViewDetails;
这段代码实现了 SLR(1) 文法的语法分析过程,包括一键显示和单步显示两种方式。其中,一键显示会将整个分析过程一次性展示出来,而单步显示则是每次点击按钮只展示一步分析结果。
具体实现步骤如下:
-
清空并设置 listView3 的列属性,用于展示分析结果。
-
判断待分析句子是否为空,若为空则弹出提示。
-
调用 predict 方法进行语法分析,返回一个 List<List
> 类型的结果,其中每个子列表表示一步分析结果。 -
遍历分析结果列表,将每一步的分析结果添加到 listView3 中展示。
-
遍历生成的四元式列表,将其添加到 richTextBox2 中展示。
-
判断分析是否成功,若成功则弹出提示,否则弹出失败提示。
-
设置 listView3 的网格线属性。
-
单步显示的实现方式与一键显示基本相同,只不过每次只展示一步分析结果,并且需要记录当前展示到的步数 cnt。
-
在 predict 方法中,首先初始化一些必要的变量,如符号栈、状态栈、输入串等。
-
进入循环,每次取出输入串的第一个字符 key,并根据当前状态和 key 查找 ACTION 表中的对应项。
-
若找到对应项,则根据 ACTION 表中的指令进行相应操作,如移进、规约等,并将相应的信息添加到分析结果列表中。
-
若未找到对应项,则说明出现错误,将错误信息添加到分析结果列表中。
-
在规约操作中,需要进行语义处理,包括生成四元式、计算表达式的值等。
-
在语义处理中,需要用到一个语义符号栈和一个语义值栈,分别用于存储语义符号和语义值。
-
在生成四元式时,需要用到一个计数器 cnt,用于生成不同的临时变量名。
-
最后返回分析结果列表
原文地址: https://www.cveoy.top/t/topic/hsUb 著作权归作者所有。请勿转载和采集!