实验3--词法分析-FA的应用.docVIP

  • 7
  • 0
  • 约1.46万字
  • 约 18页
  • 2017-08-31 发布于重庆
  • 举报
实验3--词法分析-FA的应用.doc

实验三 词法分析——有穷自动机的应用 实验目的:一: 输入正则文法 二:FA 生成FA(DFA或NFA) 运行FA,DFA(自动);NFA(交互) **NFA→DFA 实验设想: 对输入的文法存储并判断是确定的有穷状态自动机还是不确定是有穷状态自动机,并给出标准的表示形式,若是DFA,可直接测试一个符号串是否是文法的句子, 即能否被有穷状态机接受,给出过程及结果;若是NFA,首先将其转化为DFA,再测试一个符号串是否是文法的句子,亦即是否能被DFA接受。 例如: 输入文法规则的数目:7 输入开始状态: S 输入文法 Z::=Za Z::=Bb Z::=Aa B::=Ab B::=b A::=Ba A::=a 此为确定有穷状态自动机! DFA D=({Z,A,B},{a,b},M,S,{Z}) 其中M: M(Z,a)=Z M(B,b)=Z M(B,a)=A M(A,a)=Z M(A,b)=B M(S,b)=B M(S,a)=A 输入要推导的符号串:ababaa M(S,ababaa) =M(M(S,a),babaa) =M(A,babaa) =M(M(A,b),abaa) =M(B,abaa) =M(M(B,a),baa) =M(A,baa) =M(M(A,b),aa) =M(B,aa) =M(M(B,a),a) =M(A,a) =Z 该符号串能被有穷状态所接受! 输入文法规则的数目:7 输入开始状态: S 输入规则:Z::=Ab Z::=Ba Z::=Zc A::=Ba A::=a B::=Ab B::=b 文法规则存储完毕! 此为非确定有穷状态自动机! NFA N=({Z,B,A},{b,a,c},M,{S},{Z}) 其中M: M(A,a)=$ M(A,b)={Z,B} M(A,c)=$ M(B,a)={Z,A} M(B,b)=$ M(B,c)=$ M(Z,a)=$ M(Z,b)=$ M(Z,c)={Z} M(S,a)={A} M(S,b)={B} M(S,c)=$ 将NFA转化为DFA! DFA N=({[S],[B],[A],[AZ],[BZ],[Z]},{[b],[a],[c]}, M,[S],F) 其中M: M([S],b)=[B] M([S],a)=[A] M([B],a)=[AZ] M([A],b)=[BZ] M([AZ],b)=[BZ] M([AZ],c)=[Z] M([BZ],a)=[AZ] M([BZ],c)=[Z] M([Z],c)=[Z] 其中F={[AZ],[BZ],[Z]} 输入要推导的字符串:ababc M([S],ababc) =M(M([S],a),babc) =M([A],babc) =M(M([A],b),abc) =M([BZ],abc) =M(M([BZ],a),bc) =M([AZ],bc) =M(M([AZ],b),c) =M([BZ],c) =[Z] [Z]属于终止状态集合! 该字符串能被有穷状态所接受! 参考程序 #includeiostream.h #includeString.h struct LeftItem; struct RightNode //存储状态转换关系中弧与终止状态结点结构 { char tran; char nextstate; RightNode* nextsibling; RightNode(char x,char y) { tran=x; nextstate=y; nextsibling=NULL; } }; struct LeftItem //存储状态转换关系中初始状态结点结构 { char state; RightNode* link; }; struct StateItem //存放确定化的NFA状态结点结构 { char newstates[10]; StateItem() { newstates[0]=\0; } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// in

文档评论(0)

1亿VIP精品文档

相关文档