當前位置:編程學習大全網 - 編程語言 - 正規式R=XY*

正規式R=XY*

#include<stdio.h>

#include<malloc.h>

#include<string.h>

void e();

void f();

void t();

void t1();

void e1();

struct Lchar

{

char char_ch;

struct Lchar *next;

}Lchar,*p,*h,*temp;

char ch;

int right;

void e(void)

{

t();

e1();

}

void t(void)

{

f();

t1();

}

void t1(void)

{

if(h->char_ch=='*')

{

h=h->next;

f();

t1();

}

else

if(h->char_ch!='#'&&h->char_ch!=')'&&h->char_ch!='+')

right=0;

}

void e1(void)

{

if(h->char_ch=='+')

{

h=h->next;

t();

e1();

}

else

if(h->char_ch=='#'||h->char_ch==')')

return;

else

right=0;

}

void f()

{

if(h->char_ch=='i')

h=h->next;

else

if(h->char_ch=='(')

{

h=h->next;

e();

if(h->char_ch==')')

h=h->next;

else

right=0;

}

else

right=0;

}

void main(void)

{

right=1;

h=malloc(sizeof(Lchar));//動態生成臨時存儲空間..

h->next=NULL;//空指針

p=h;//p指向指針h的空間

printf("請輸入需語法分析的式子,並以‘#’號結束:\n");

do

{

ch=getchar();//讀入字符

// putchar(ch);//輸出字符,yuanyoud

if(ch=='i'||ch=='+'||ch=='*'||ch=='('||ch==')'||ch=='#')

{

temp=malloc(sizeof(Lchar));//創建新空間

temp->next=NULL;

temp->char_ch=ch;//指針指向新讀入的字符

h->next=temp;//h指向temp的空間

h=h->next;//指針後移

}

else

{

temp=p->next;

printf("\nInput a wrong char!\n Input again:\n");

for(;;)

{

if (temp!=NULL)

printf("%c",temp->char_ch); //輸出不符合項後邊所有的項

else

break;

temp=temp->next;

}

}

}while(ch!='#');

p=p->next;

h=p;

e();

if(h->char_ch=='#'&&right)

printf("\nOK!\n");

else

printf("\nError!\n");

getchar();

}

可以的話多給點分 這是參考

  • 上一篇:YX*Y
  • 下一篇:XYX轉變為NFA、DFA、最小化DFA;完成的最小化DFA進行編程(用C語言)
  • copyright 2024編程學習大全網