首页 > 编程知识 正文

Sm是什么意思啊(纸条惩罚内容)

时间:2023-05-06 17:18:21 阅读:67240 作者:3895

句子/变亮

正则表达式正则表达式(Regular Expression )表示字符串格式[2]。

aregularexpressionisbuiltupoutofsimplerregularexpressionsusingasetofdefiningrules [1]。

正则表达式由完全匹配的字符串集定义,该字符串集称为正则表达式生成的语言[2]。

上述正则表达式的定义摘自编译原理书。 正则表达式确实不容易定义。 RM *.o (删除以. o结尾的所有文件) (即使它用于正则表达式,在以egrep ^a.*n$ *.cc ).cc结尾的所有文件中查找以a开头的n结尾的行)这是

综合上述关于正则表达式的定义,正则表达式是一组规则,通过该组规则可以生成字符串集(从正则表达式生成的语言),以及通过规则集来表示、定义和匹配字符串集。

正则表达式可以构成为等价的非确定性有穷机器人。

非确定性包括穷自动机(Non Deterministic Finite Automata,NFA ) NFA [1]是字符表、状态集、转换函数、初始状态(一个初始状态)和接受状态的集合(多个接受状态)还是多个接受状态) 转换函数接受字符并转换状态。 一系列转换函数从初始状态到接受状态生成字符串,这些字符串构成NFA规定的字符串集。

在确定性上,贫困机器人(DFA ) DFA ) DFA(1)首先是NFA,但其中不需要空字符串转换)字符,状态从一个状态转移到另一个状态); 也没有多重转换。 一个输入字符被转换为多个状态。

从NFA到DFA[1],NFA无法通过计算机程序实现。 用子集构造法可以把NFA变成DFA。 背后的原理是,DFA的各状态由NFA的状态集构成。 理论上,DFA的状态数随NFA的状态数呈指数级增加。 但是,在实践中,这种最坏的情况很少发生。

定义以下三个操作:

状态的空串闭包e-closure(s ) :可以经过状态s到0或多个空串) e )到达的NFA状态集(包括状态s本身)。

状态集的空连接闭包e-closure(t ) :状态集t内所有状态s的e-closure )的并集。

状态集的转移闭包move(t,a ) :状态集t内的状态可以用文字a到达的NFA状态集。

NFA由状态集合Nstates和状态迁移表[Ntable(s,a )=S1 ]构成,将NFA转换为DFA,构建等价的状态集合Dstates和状态迁移表[Dtable(s,a )=S1 ]即可。 下面的伪代码说明这样的过程。

Normal" style="margin:0cm 0cm 0pt">initially E-closure(s0) is the only state in Dstates and it is un大力的帆布鞋ed

while there is a un大力的帆布鞋ed state T in Dstates do begin

            大力的帆布鞋 T

            for each input symbol a do begin

                        U=E-closure(move(T,a))

                        if U is not in Dstates then

                                    add U as an un大力的帆布鞋ed state to Dstates

                        Dtable(T,a)=U

            end

end

 

SM

SM是软件开发中被经常用到的技术。在通信系统中,在售票系统中。在UML中就有专门的State Machine Diagram[3]用来描述SM。SM图由状态(State)和转换(Transition)组成,包括一些前置条件(Preconditioin),行为(Action)等。正则表达式,DFA,NFA,这些编译原理中的技术可以用于SM的构建。

 

在实现SM的过程中,涉及状态转换,涉及不同状态的不同行为,如果这些都用条件判断语句(if or switch)来实现,会降低代码的可读性,扩展性。因为SM应用如此普遍,在软件开发中构建SM形成了模式。在Gang of Four的Design Patterns[4]中,提到了一种基于查表的方法和详细介绍了State模式。两种方法各有优缺点。共同点是减少了条件判断语句。State模式强调不同状态的行为,查表法更关注定义状态的转换。Refactoring[5]中就建议Replace Conditional with Polymorphism,State模式就是符合这条建议的模式。个人建议采用现代的面向对象语言开发,则选State模式,采用传统的面向过程的语言开发,则可考虑查表法。

 

在基于查表的方法中,一张二维表(一维是状态,一维是输入)映射了某个状态接受某个输入转换到某个后续状态(输出可以是状态也可以是处理函数的指针)。

 

在State模式中,对象会在运行时改变State,State改变行为也会改变。定义会改变状态的对象为Context,Context中会包括一个抽象State对象。抽象State中定义了特定状态的行为接口。ConcreteState是State的子类,在其中实现特定状态的行为。

Acronym

SM -- State Machine

Reference

[1]Compilers Principles Techniques and Tools

[2]编译原理及实践

[3]UML Distilled

[4]Design Patterns

[5]Refactoring

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。