题目
输入文法,输出识别活前缀的自动机
算法
结构体介绍
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时产生无限循环。