• 大小: 10KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: hehe  

资源简介

完成CFG和PDA互相转换,同时完成在CFG和PDA上模拟串的推导过程

资源截图

代码片段和文件信息

//cfg_pda.cpp
//由于时间关系没有实现文法的压缩输入 
#include “stdio.h“
#include “cfg_pda.h“
#include “fstream.h“
#include “malloc.h“ 
#include “string.h“
rule* processInput(char *Alphabet_Tchar *Alphabet_N char *Start_symbol)
{
int ijkhsdta;
i=0;j=0;k=0;h=0;s=0;
bool symbol=false;
char csymc1;
char b;
char statement[Maxlength_Rule];
char s_end[10]=“end“;
    struct rule *p;
struct rule *p2;
struct rule *GFL_R;
    struct right_record *q;
struct right_record *q2;
q2=q;
printf(“请依次输入文法G的所有规则输入时应该遵守以下规则:\n“);
printf(“1.每一条规则占一行以键入Enter表示结束这条规则的输入\n“);
printf(“2.一个非终结符号可以作为若干重写规则的左部\n“);
printf(“3.规则以非缩写形式输入\n“);
    printf(“4.空字符用$代替\n“);
 printf(“5.规则以end为规则输入完毕\n“);
    GFL_R=(struct rule*)malloc(sizeof(rule));
p=GFL_R;
p2=GFL_R;
p->next=NULL;
p->right=NULL;
p->right=(struct right_record*)malloc(sizeof(struct right_record));
scanf(“%s“statement);
while(strcmp(statements_end)<0)
{
d=0;
c=statement[d++];
q=p->right;
q->next=NULL;
if(symbol==false)
{
*Start_symbol=c;
    symbol=true;
}

if(i==0)
    Alphabet_N[i++]=c;
else
{
h=i;
while(h>=1)
{
if(c==Alphabet_N[h-1])
break;
h--;
}
if(h==0)
Alphabet_N[i++]=c;
}
    p->left=c;
d=d+3;
    while((c=statement[d++])!=‘\0‘)
{
/*if(c==‘|‘)
        {   
            sym=p->left;
    p->next=(struct rule*)malloc(sizeof(struct rule));
p=p->next;
p->right=(struct right_record*)malloc(sizeof(right_record));
q=p->right;
q->next=NULL;
p->left=sym;
p->next=NULL;
p->right=NULL;
}

else
{
*/
        q->right=c;
if(j==0)
        Alphabet_T[j++]=c;

else
{
k=j;
      while(k>=1)
{
if(c==Alphabet_T[k-1])
break;
k--;
}
        if(k==0)
    Alphabet_T[j++]=c;
}
if((c1=statement[d])!=‘\0‘)
{
q->next=(struct right_record*)malloc(sizeof(struct right_record));
    q=q->next;
q->next=NULL;
}
        //}
}
scanf(“%s“statement);
if(strcmp(statements_end)<0)
{
p->next=(struct rule*)malloc(sizeof(rule));
    p=p->next;
p->next=NULL;
p->right=(struct right_record*)malloc(sizeof(right_record));
}
}
length_N=i;
length_T=j;
t=length_T;
t=t-1;
while(t>=0)
{
sym=Alphabet_T[t];
a=length_N;
    while(a>=1)
{
if(sym==Alphabet_N[a-1])
{
for(s=t;s   Alphabet_T[s]=Alphabet_T[s+1];
Alphabet_T[length_T-1]=‘\0‘;
length_T--;
}
a--;
}
t--;
}
printf(“起始符号:%c\n“*Start_symbol);
printf(“非终结字符集%s\n“Alphabet_N);
printf(“终结字符集%s\n“Alphabet_T);
    printf(“重写规则如下:\n“);
    while(p2!=NULL)
{
b=p2->left;
printf(“%c::=“b);
q2=p2->right;
while(q2!=NULL)
{
b=q2->right;
printf(“%c“b);
q2=q2->next;
}
    printf(“\n“);
p2=p2->next;
}
return GFL_R;
}
void main()
{
int ijksthx;
bool signal=false;
char c1c2;
struct rule *p;
struct right_record *q;
struct right_record *q1;
struct rule*GFL_R=processInput(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5743  2007-10-18 21:58  宋志理_第二章0708120691\CFG转化为PDA\cfg_pda.cpp

     文件       1091  2007-10-19 17:03  宋志理_第二章0708120691\CFG转化为PDA\cfg_pda.h

     文件       2372  2007-10-20 15:53  宋志理_第二章0708120691\已知CFG和串模拟推导过程\cfg_pda.h

     文件      10769  2007-10-20 16:25  宋志理_第二章0708120691\已知CFG和串模拟推导过程\simulate_cfg.cpp

     文件       2376  2007-10-20 14:49  宋志理_第二章0708120691\已知PDA和串模拟推导过程\CFG_PDA.h

     文件       7488  2007-10-20 15:44  宋志理_第二章0708120691\已知PDA和串模拟推导过程\simulate_derivation.cpp

     目录          0  2007-10-20 17:10  宋志理_第二章0708120691\CFG转化为PDA

     目录          0  2007-10-20 17:10  宋志理_第二章0708120691\已知CFG和串模拟推导过程

     目录          0  2007-10-20 17:10  宋志理_第二章0708120691\已知PDA和串模拟推导过程

     目录          0  2007-10-20 17:10  宋志理_第二章0708120691

----------- ---------  ---------- -----  ----

                29839                    10


评论

共有 条评论

相关资源