没有学过计算机课程的我,一直都是在小打小闹。目前我找来了“虎书”,系统的学习下编译原理。从网上买的打印本,质量还不错,这本书已经绝版了。这两天正在学有限自动机原理,心想可以把cforth的数字字符串处理模块写得正规一点。以下是我画的int型数字的有限自动机,欢迎大家指正:
以下是用C语言写的实验代码:判断输入的字符串是否为INT型整数,是返回1,否返回0。
- #include <stdio.h>
- char edges[ ][12] = { /* 1 2 3 4 5 6 7 8 9 0 - */
- /* state 0 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- /* state 1 */ { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3 },
- /* state 2 */ { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 },
- /* state 3 */ { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0 },
- /* state 4 */ { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0 }
- };
- int main()
- {
- char str[50];
- while(1) {
- gets(str);
- printf("%d\n", is_num(str));
- }
- return 0;
- }
- int is_num( char* str )
- {
- int state, i;
- for(state=1; *str != '\0'; str++) {
-
- switch( *str ) {
- case '1': i = 1; break;
- case '2': i = 2; break;
- case '3': i = 3; break;
- case '4': i = 4; break;
- case '5': i = 5; break;
- case '6': i = 6; break;
- case '7': i = 7; break;
- case '8': i = 8; break;
- case '9': i = 9; break;
- case '0': i = 10; break;
- case '-': i = 11; break;
- default : return 0;
- }
-
- state = edges[state][i];
- }
-
- if(state == 2 || state == 4)
- return 1;
- return 0;
- }
阅读(1223) | 评论(0) | 转发(0) |