📄 gener.h
字号:
/***********************/
/* Gener类的定义 */
/***********************/
#include "Item.h"
class Gener //产生式的结构体
{
public:
int GetRightLength( ) //得到产生式右部的长度
{
int count(0);
while(1){
if(sentence[count]==END) break;
count++;
}
return count;
}
void InsertDot(int *array,int len,int pos) //在指定位置插入'.'
{
for(int i=len;i>=pos;i--) //注意:只能从后往前顺次移动
array[i+1]=array[i];
array[pos]=1; //1是'.'的编码值
}
void GenToItem(List<CItem> &list,int len) //产生式转化为项目
{
if(sentence[1]==END&&sentence[0]==0){ //A->$的情况
CItem item;
item.vn=vn;
item.sentence=new int[2];
item.sentence[0]=1;
item.sentence[1]=END;
list.Insert(item);
return;
}
for(int i=0;i<len+1;i++)
{
CItem item;
item.vn=vn;
item.sentence=new int[len+2];
for(int j=0;j<len;j++)
item.sentence[j]=sentence[j];
InsertDot(item.sentence,len,i);
item.sentence[len+1]=END;
list.Insert(item);
}
}
public:
int vn; //左边非终结符
int* sentence; //右边文法符号串
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -