- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ch2 词法分析
习题三 3.6 文法的语言: Z ? A0 ? A00 ?… ? A0n-1=0n (n=1) ? A0n ? Z10n ?A010n… ? 0m10n (m,n=1) ? A0n ? Z10n ?A0m10n… ? 0k10m10n (k,m,n=1) ? 0k(10m)n (k,m=1,n=0) 正规式:00*(100*)* (n-2) A 00*(100*)* B A (100*)* D 0* C 0 B C D 0 E ε ε 100* F ε ε A 0 B C D 0 E ε ε 0* F ε ε A 0 1 0 H I B C D 0 E ε ε 0 F ε ε A 0 1 0 H I J ε ε B 习题三 3.7 初始状态:ε-closure({x})={x}=s1 标记s1(-): ε-closure(move(s1,a))={x,y}=s2 ε-closure(move(s1,b))={y}=s3 标记s2(+): ε-closure(move(s2,a))={x,y}=s2 ε-closure(move(s2,b))={x,y}=s2 标记s3(+): ε-closure(move(s3,a))=? ε-closure(move(s3,b))={x,y}=s2 s1 s3 b s2 a a,b b b x a a b b y + + 习题三 3.8 文法: S→I|U I →L|IL|ID U →D|UD L →a|b D →1|2 正规式: I=L(L|D)* U=DD* S=L(L|D)*|DD* L(L|D)*|DD* 0 1 + DD* 0 1 L(L|D)* + D* 0 1 (L|D)* 2 D 3 L + D 0 1 (L|D)* 2 D 3 L 4 ε ε + D 0 1 L|D 2 D 3 L 4 ε ε 5 ε ε + D 0 1 L 2 D 3 L 4 ε ε 5 ε ε D + 习题三 3.9 S →aS|bS|aA|bB A →aC B →bD C →aC|bC| ε D →aD|bD| ε 习题三 3.10 正规式:a*(baa*)*a* 正规式转换正规文法: S=a*(baa*)*a*: S → aS | A (A= (baa*)*a*) A= (baa*)*a* A → baa*A|B (B=a*) B=a* B → aB| ε A → baa*A|B A → bC|B (C=aa*A) C=aa*A C → aD (D=a*A) D=a*A D → aD|A S → aS | A A → bC|B B → aB| ε C → aD D → aD|A * * * * * * DFA的行为的模拟程序 DFA M=(K,Σ,f,S,Z)的行为的模拟程序 K=S; c=getchar(); while (c!=eof) {K=f(K,c); c=getchar(); } If( K is in Z) then return (‘yes’); else return (‘no’); DFA识别程序(模拟main()函数) main(){ char states[5]={‘0’,‘1’, ‘2’, ‘3’, ‘4’}; char s0=‘0’; char f_states[3]={‘2’, ‘4’ ,’\0’}; char k=s0; while ((c=getchar())!=eof) { k=move(k,c); if(k==‘e’) { printf(“Here is a error.\n”); break;} } if(isFinalState(k, f_states)) then printf (“yes!\n”); else printf (“ no!\n”); } DFA识别程序(完整main()函数) #include stdio.h“ main(){ //设别程序主函数 //声明要调用的两个函数 char move(char state,char ch); bool isFinalState(char k,char *f); //定义DFA char states[5]={0,1, 2,3,4}; char s0=0; char f_states[3]={2,4,\0}; //识别过程 char k=s0,c; while((c=getchar())!=\n) { k=
文档评论(0)