資源簡介
只限定為字母,可對文法做等價壓縮變換
Superwhite (深白色) qq:411373639
代碼片段和文件信息
//////////shenbaie/////////////08.09.22///////////////
#include?“iostream.h“
#include?“stdio.h“
#include?“string.h“
#define?max?255
//********************************************
struct?law{
char?ll;
char?lr[max];
int?del;
int?fl;
int?fr;
}law[max];
int??ijkh;
int?static?m;
int?count?f;
int?static?num1num2num_vnnum_vt;
char?cvn[max]cvt[max];
//*******************************************
bool?isUp(char?ch) //判斷一個字符?
{
????return?(ch>=‘A‘?&&?ch<=‘Z‘);
}
bool?isLow(char?ch)
{
????return?(ch>=‘a‘?&&?ch<=‘z‘);?
}
bool?IsDigit(char?ch)?
{?
return(ch>=‘0‘&&ch<=‘9‘);?
}?
//**************************************************
void?input() //?輸入規則并得到終結非終結符個數
{
num1=0; num2=0;
cout<<“輸入規則個數:“; cin>>f; count=f;
for(i=0;i {
j=0;
cin>>law[i].ll; cout<<“::=“;
cin>>law[i].lr; cout< law[i].fl=0; law[i].fr=0; law[i].del=0; //初始化
cvn[num1]=law[i].ll; num1++; //cvn
while(law[i].lr[j]!=‘\0‘)
{
cvt[num2]=law[i].lr[j]; //cvt
j++; num2++;
}
}
num_vn=num1; num_vt=num2;
for(i=0;i {
for(j=i+1;j {
if(cvn[i]==cvn[j])
num_vn--;
if(isLow(cvn[i]))
num_vn--;
}
}
//********************test*************
cout<<“左邊:“;
for(i=0;i cout< cout<
for(i=0;i {
if(isUp(cvt[i])) // 大寫-1
num_vt--;
for(j=i+1;j {
if(cvt[i]==cvt[j])
num_vt--;
}
}
//***********test****************
cout<<“右邊:“;
for(i=0;i cout< cout<
cout<<“你輸入的規則中--非終結符:“< }
//*****************************************
void?Rule1()
{
int?over=0;
law[0].fl=1;
for(i=0;i {
if(strlen(law[i].lr)==1?&&?isUp
評論
共有 條評論