SLR(1)自动机程序题

题目

输入文法,输出识别活前缀的自动机

算法

结构体介绍

token/词

class token //token类

{

         String token;// token标识

         boolean isTerminal;// 是否为终结符

         token next;// 连接下一个token

 

         public token(String token, boolean isTerminal)// 构造方法

         {

                   this.token= token;

                   this.isTerminal= isTerminal;

                   next= null;

         }

}

介绍:文法的基本单位,next联结成链表一样的产生式

Production/产生式

class Production//产生式类

{

         String start;//产生式开始符号

         token production;//产生式右部

         token position;//活前缀位置

         public Production(String start,token production)//构造方法

         {

                   this.start=start;

                   this.production=production;

                   this.position=production;

         }

         public Production(Production production)//复制构造方法

         {

                   this.start=production.start;

                   this.production=production.production;

                   this.position=production.position;

         }

}

介绍:活前缀位置为一状态中该产生式即将看到的终结符或非终结符。

state/状态

class state//状态类

{

         ArrayList<Production> productions;//产生式集合

         ArrayList<String> input;//输入符号与输出状态一一对应

         ArrayList<state> output;

         public state()//默认构造函数

         {

                   productions=newArrayList<Production>();

                   input=newArrayList<String>();

                   output=newArrayList<state>();

         }

}

介绍:状态通过输入符号与输出符号的一一对应使当前状态根据输入发生正确的跳转。

SLR/算法主体类

public class SLR {

         ArrayList<Production> productions;//产生式集合

         state start;//开始状态

         ArrayList<state> stateList;//状态缓存,对于产生过的状态直接指向该状态,防止创建DFA时产生无限循环。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值