【摘要】:如果对DFA的每一个状态都先确定它所要完成的任务,再把从状态出发的弧上所标记的输入字母视为控制条件,那么DFA实际上就是一个程序流程图。图3-23识别标识符的程序流程图在流程图0框中,name用来存放读入的单词,先将它置空。用程序表示该DFA。表3-6DFA M的状态转换矩阵在考虑DFA M的程序表示时,可将与每一个状态有关的动作设计成一段程序,然后通过箭弧上的字符将各状态联结起来,从而可得如下程序段:
如果对DFA的每一个状态都先确定它所要完成的任务,再把从状态出发的弧上所标记的输入字母视为控制条件,那么DFA实际上就是一个程序流程图。
例如,识别标识符的DFA如图3-3(b)所示,如果赋予状态0,1,2一定的操作,则可得识别标识符的程序流程图(如图3-23)所示。
图3-23 识别标识符的程序流程图
在流程图0框中,name用来存放读入的单词,先将它置空。语句read(ch)读入一个字符存入ch中,并根据ch的值是否为字母符号决定是否转入1框,如果ch=字母,则转入1框。在1框中,先将ch连接到name,再读入下一个输入字符,如果ch=字母或数字,则重复执行1框中的操作,否则进入2框。进入2框则表明name已经存放了一个单词,可以用name先查找关键字表,如果是关键字,则返回关键字的内部表示,如果不是关键字则用name去查找符号表,如果没查到,则用name去填符号表;否则返回该标识符在符号表中的地址。
下面通过例子展示直接用程序代码来表示DFA。(www.xing528.com)
例3.11 有化简后的DFA M=({0,1,2,3,4},{d,+,-,*},t,0,{2,4})与之对应的状态转换矩阵如表3-6所示,其中d表示0,1,2,…,9。用程序表示该DFA。
表3-6 DFA M的状态转换矩阵
在考虑DFA M的程序表示时,可将与每一个状态有关的动作设计成一段程序,然后通过箭弧上的字符将各状态联结起来,从而可得如下程序段:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。