代码1:

这段代码是一个点击事件,主要实现了LR分析表的构建和展示。具体步骤如下:

  1. 将单步计数step置零,新建一个LR对象lr。
  2. 清空listView1中的列和项,设置视图为Details。
  3. 添加两列,分别为'状态'和'项目族信息'。
  4. 调用lr对象的Buildprod方法,将输入的文本构建成产生式集合。
  5. 遍历lr对象的proitemset属性,将每个项目集的信息显示在listView1中。

代码2:

这段代码是LR对象的Buildprod方法,主要实现了构建LR分析表中的产生式集合和项目集。具体步骤如下:

  1. 新建一个LRNode对象Lr,将拓广文法开始符号S'和输入文本的第一个字符构建成一个产生式,并将其添加到LR对象的LRproNum属性中。
  2. 遍历输入文本的每个字符,根据不同情况分别处理: a. 如果当前字符是空格,则跳过。 b. 如果当前字符是'|',则构建一个新的LRNode对象,将之前累积的左部和右部构成一个产生式,并将其添加到LR对象的LRproNum属性中。 c. 如果当前字符是非终结符,则将其添加到LR对象的Nchar属性中,同时将之前累积的左部加上当前字符。 d. 如果当前字符是终结符,则将其添加到LR对象的Echar属性中,同时将之前累积的右部加上当前字符。
  3. 遍历LR对象的LRproNum属性中的每个产生式,在每个位置插入一个'.', 构成一个项目,并将其添加到LR对象的LRobjNum属性中。
  4. 构建LR分析表中的项目集,首先构建初始项目集,即将项目序号为0的项目加入一个集合中,并求其闭包。然后遍历每个项目集,对于每个项目,找到其中的'.', 如果其后面有一个符号,则将其移动到'.'的位置,并将得到的新项目加入到一个新的集合中。然后对于新集合中的每个项目,求其闭包,并判断是否已经存在相同的项目集。如果不存在,则将其加入到LR对象的proitemset属性中,并将其序号加入到dfa数组中;如果存在,则将其序号加入到dfa数组中。
LR分析表构建代码详解:构建产生式集合与项目集

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

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