有限自动机的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二 有限自动机的设计

1.正规式与功能描述

功能:识别十进制数、八进制、十六进制、实数、科学计数

八进制:

oct →0(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*

十六进制数: ( HEX ,值 )

hex →0x(0|1|...|9|a|...|f|A|…|F)(0|...|9|a|...|f |A|…|F)*

无符号数 :整数、实数与科学计数:

digit →0|1|...|9

digits →digit digit*

Optional_fraction →.digits|ɛ

Optional_exponent →(e(+|-|ɛ)digits)|ɛ

Num →digits optional_fraction optional_exponent

状态转换图:

八进制:

十六进制:

1 2 start 0

3 0-7

0-7 4 *

other

ret

1 7 start 0 8 9 10

0-9 a-f

x 0-9 a-f other *

re

整数、实数、科学计数(无符号):

合并转换图:

测试截图:

第二组:

程序代码:

以下代码围绕合并的转换而写#include

#include

#include main()

{

char c;

printf("以#结束程序,以回车结束输入数字(十进制、八进制、十六进制、实数、科学计数):\n");

c=getchar();

while(c!='#')

{

while(c==' ' || c=='\t')//去掉前导空格或制表符

c=getchar();

if(c=='0')//如果是0进入状态2

{

c=getchar();

if(c>='0'&&c<='7')//如果成立进入状态3

{

c=getchar();

while(c>='0'&&c<='7')

{

c=getchar();

}

while(c==' ' || c=='\t')

c=getchar();

if(c=='\n')

printf("oct\n");//状态4

else

{

printf("不接受\n");

fflush(stdin);//清空缓冲区

}

}

else if(c=='x'||c=='X')//如果成立进入状态5 {

c=getchar();

while((c>='0'&&c<='9')||(c>='a'&&c<='f'))

{

c=getchar();

}

while(c==' ' || c=='\t')//去掉前导空格或制表符c=getchar();

if(c=='\n')

printf("hec\n");//状态7

else

{

printf("不接受\n");

fflush(stdin);

}

}

else if(c=='\n')

{

printf("dec\n");

}

else

{

printf("不接受\n");

fflush(stdin);

}

}

else if(c>='1'&&c<='9')//如果成立进入状态8 {

c=getchar();

while(c>='0'&&c<='9')

{

c=getchar();

}

if(c=='\n')

{

printf("dec\n");

}

else if(c=='.'||c=='e'||c=='E')

{

if(c=='.')

{

c=getchar();

while(isdigit(c))

c=getchar();

while(c==' ' || c=='\t')//去掉前导空格或制表符c=getchar();

}

if(c=='e'||c=='E')

{

c=getchar();

if(c=='+'||c=='-'||isdigit(c))

{

c=getchar();

while(isdigit(c))

c=getchar();

while(c==' ' || c=='\t')//去掉前导空格或制表符c=getchar();

if(c=='\n')

printf("科学计数\n");

else

{

printf("不接受\n");

fflush(stdin);

}

}

else

{

printf("不接受\n");

fflush(stdin);

}

}

else if(c=='\n')

printf("实数\n");

else

{

printf("不接受\n");

fflush(stdin);

}

}

else

{

printf("不接受\n");

相关文档
最新文档