詞法分析 DFA 程序

詞法分析 DFA 程序

實驗一:詞法分析

實驗目的:

通過DFA程式的實現理解自動機的原理

實驗內容:

1、閱讀並理解實驗案例中DFA的程式實現;
2、參考實驗案例,完成簡單的DFA程式設計。

實驗要求:

請對下列程式進行詞法分析,判斷是否字串“abbb”將被識別或通過在FA接受?

1、假定FA=({0,1,2,3}, {a,b}, M, 0, {3})
M:
M(0,a)=1 M(0,b)=2 M(1,a)=3 M(1,b)=2
M(2,a)=1 M(2,b)=3 M(3,a)=3 M(3,b)=3
確定化後的DFA為:
確定化後的DFA.png

參考代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <stdio.h>

int in(int s,int z)

{

if (s==z)

{printf("3\n这个最后状态跳转到终态!");

return 1;

}

else return 0;

}



int step (int s,char t)

{

if(t=='a')

switch(s)

{

case 0: return 1;

case 1: return 3;

case 2: return 1;

case 3: return 3;

}

else if (t=='b')

switch(s)

{

case 0: return 2;

case 1: return 2;

case 2: return 3;

case 3: return 3;

}

return 0;

}



int realize(char *input)

{

int z=3;

int s,i;

s=0;

for(i=0;input[i]!='\n';i++)

{

printf("%d\n",s);

s=step(s,input[i]);

}

if (in(s,z))

return 1;

else return 0;

}



main()

{

int i;

int a;

char input[40];

printf("FA=({0,1,2,3}, {a,b}, M, 0, {3})\n");

printf("M:\n");

printf(" M(0,a)=1 M(0,b)=2\n");

printf(" M(1,a)=3 M(1,b)=2\n");

printf(" M(2,a)=1 M(2,b)=3\n");

printf(" M(3,a)=3 M(3,b)=3\n");

printf("请输入要检查的字符串:\n");

lop: for(i=0;input[i-1]!='\n';i++)

scanf("%c",&input[i]);

for(i=0;input[i-1]!='\n';i++)

if(input[i]!='a'&&input[i]!='b'&&input[i]!='\n')

{

printf("输入错误,请重新输入:\n");

goto lop;

}

printf("这个状态转换为:\n");

a=realize(input);

if(a==1)

printf("\n这个字符串不能识别\n");

else printf("\n这个字符串不能识别n");

printf("请回车离开此程序\n");

getchar();

}

實驗結果:

測試數據:aab 測試結果:0 1 3 3

DFA實驗結果.png

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×