基于正则文法的自动机生成系统.docx
- 文档编号:6716967
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:49
- 大小:953.16KB
基于正则文法的自动机生成系统.docx
《基于正则文法的自动机生成系统.docx》由会员分享,可在线阅读,更多相关《基于正则文法的自动机生成系统.docx(49页珍藏版)》请在冰豆网上搜索。
基于正则文法的自动机生成系统
[键入公司名称]
面向对象技术课程设计
基于正则文法的自动机生成系统
[在此处键入文档的摘要。
摘要通常是对文档内容的简短总结。
在此处键入文档的摘要。
摘要通常是对文档内容的简短总结。
]
目录
1需求分析1
1.1课程设计题目1
1.2课程设计基本要求1
1.2.1功能要求1
1.2.2人机交互要求2
2系统概要说明3
2.1设计思想3
2.2系统框架3
2.3开发工具及开发过程说明3
3用例分析4
3.1角色说明4
3.2用例图4
3.3用例说明5
3.3.1输入正则文法用例5
3.3.2修改正则文法用例5
3.3.3保存新创建的文法和自动机用例6
3.3.4保存用户修改用例7
3.3.5装入正则文法和自动机用例8
3.3.6选中自动机某节点用例8
3.3.7选中自动机某弧线用例9
3.3.8选中某条产生式用例10
3.3.9调整节点位置用例10
3.3.10调整弧线位置用例11
4系统静态建模12
4.1类图12
4.2类文档13
4.2.1Triple类13
4.2.2Regular类13
4.2.3FiniteAutomata类14
4.2.4Geometry类15
4.2.5RelationGraph15
4.2.6ControlPoint类16
4.2.7State类17
4.2.8InitialState类18
4.2.9FinalState类18
5系统动态建模19
5.1序列图19
5.1.1输入正则文法19
5.1.2修改正则文法20
5.1.3保存新创建的文法和自动机20
5.1.4保存用户修改21
5.1.5装入文法和自动机21
5.1.6选中自动机某节点22
5.1.7选中自动机某条弧22
5.1.8选中某条产生式23
5.1.9调整节点位置23
5.1.10调整弧线位置24
5.2状态图24
5.3活动图25
5.3.1输入文法,生成自动机25
5.3.2修改文法,更新状态图26
5.3.3移动图元27
5.3.4存储、读入28
5.3.5FiniteAutomata初始化28
5.3.6排布所有状态图State29
5.3.7绘制转移曲线29
5.3.8优化关系曲线29
6系统详细设计30
6.1Triple类30
6.2Regular类30
6.3Geometry类31
6.4ControlPoint类31
6.5State类31
6.6InitialState类32
6.7FinalState类32
6.8RelationGraph类32
6.9FiniteAutomata类33
7使用说明34
7.1界面说明34
7.1.1菜单设计34
7.1.2工具栏设计35
7.2人机交互说明36
7.2.1新建正则文法36
7.2.2保存正则文法38
7.2.3装入正则文法38
7.2.4调整自动机40
1需求分析
1.1课程设计题目
基于正则文法的自动机生成系统
1.2课程设计基本要求
1.2.1功能要求
该系统必须实现以下功能:
(1)正则文法的文本编辑功能
必须支持正则文法的输入、保存、修改、装入,每个操作的具体要求如下:
Ø输入正则文法:
打开编辑对话框,输入正则文法、生成自动机后,显示自动机。
Ø保存正则文法:
保存正在编辑的正则文法和自动机,到指定文件。
Ø编辑正则文法:
打开编辑对话框,装入正则文法,进行编辑后,显示自动机。
Ø装入正则文法:
装入指定文件中的正则文法和自动机,显示自动机。
(2)正则文法到自动机的转换功能
根据当前输入的正则文法,生成相应的自动机,并在窗口中显示自动机的图形。
(3)自动机的图形显示与调整
图形显示组成自动机的各个节点和转移关系,节点使用圆表示,转移关系使用弧线表示,如“图1-1”所示,其中,两个圆(如图中的“X”)表示自动机的终止状态。
图1-1
此外,系统需要允许用户使用鼠标移动各个节点的位置,以调整自动机的显示,并且在保存正则文法时,也必须保存其自动机图形。
1.2.2人机交互要求
系统要支持菜单命令、鼠标操作。
(1)菜单命令
菜单中需要有新建、保存、编辑、装入等菜单项,每个菜单项所需要实现的功能参见“1.2.1功能要求”。
(2)鼠标操作
系统必须允许用户拖动自动机显示中的各个节点,以调整自动机的显示,节点之间的转移关系弧线应随着节点移动。
此外,自动机各个节点的位置能随着自动机保存,从文件中装入该正则文法和自动机后,自动机中各个节点、弧线的位置应该与保存时一致。
2系统概要说明
2.1设计思想
在设计上,采取了文档与视窗的分离(文档视图架构)。
文法对象和状态转移图对象分离。
各类高内聚、低耦合。
各个图元之间某些属性与方法都是相同,因此可以利用面向对象中的继承与多态思想为各个图元设置一个基类:
Geometry类。
2.2系统框架
图2-1
2.3开发工具及开发过程说明
用StarUML进行UML建模,使用了StarUML进行正向工程,自动生成了部分类代码,在此基础之上,使用MicrosoftVisualC++6.0和MFC开发、编译和运行程序。
系统采用用例驱动的UML建模方法。
用例驱动的方法基于面向对象技术,从用例出发,首先在需求分析阶段建立用例模型,用用例图来表示;其次,在对用例描述和分析的基础上,得出系统的核心类,用类图表示;再次,进一步描绘出系统的静态结构和动态行为,分别用状态图和序列图来表示,然后进行编码、测试。
3用例分析
3.1角色说明
与系统进行交互的主要是使用该系统的用户。
在交互过程中,用户可以启动、关闭系统,可以通过菜单命令输入、编辑正则文法,系统则会向用户显示相应文法的自动机,用户通过鼠标操作可以调整自动机中节点、弧线的位置,还可以通过菜单命令将正则文法、自动机的位置信息保存到文件中,也可以将某个文件所保存的文法、自动机装入到系统中。
3.2用例图
本系统的用例图如“图3-1”所示,对各个用例的详细阐述参见“3.3用例说明”。
图3-1
其中需要说明的是,“选中某条产生式”是指在系统所显示的当前正则文法的产生式列表中,用鼠标选中某条产生式,使得自动机中对应该产生式的节点、弧线同时处于被选中状态。
具体请参见“3.3.8选中某条产生式用例”。
3.3用例说明
3.3.1输入正则文法用例
主参与者:
用户
目标:
用户能够输入一个新的正则文法
前置条件:
系统已启动
触发器:
用户点击“新建”菜单命令或是工具栏“新建”图标
场景:
用户
系统
1、点击“新建”菜单命令或是工具栏“新建”图标。
2、输入正则文法的所有产生式。
3、点击“完成”,确认输入。
1、弹出输入对话框,并给出输入规则,等待用户输入正则文法。
2、检查用户输入是否合法:
若不合法,提示用户重新输入;若合法,则关闭输入对话框,并将用户输入保存到系统数据缓冲区中。
后置条件:
系统进入“等待”状态,等待用户进行操作。
异常:
1、用户输入的文法格式不符合系统要求(如输入“:
=”而不是“:
:
=”,或者用户输入的不是正则文法)——用户点击“完成”按钮后,弹出对话框提示用户输入的不是正则文法,请用户重新输入。
优先级:
高
使用频率:
经常
约束:
1、数据源:
输入对话框
2、数据格式:
正则文法中只能包括英文字母,大写字母表示变量,小写字母表示终极符,“:
:
=”表示“推导”关系,并且为实现方便,要求用户只能输入右线性正则文法,即用户只能输入“A:
:
=aB”、“A:
:
=a”这样的产生式,不能输入“A:
=Ba”这样的产生式。
3.3.2修改正则文法用例
主参与者:
用户
目标:
修改已有的正则文法,并且修改文法后,系统能根据修改后的文法,显示新的自动机。
前置条件:
系统已启动,并且系统数据缓冲区中已存在至少一个正则文法。
触发器:
用户激活某文法的窗口,并按下该文法的产生式列表下的“修改”按钮。
场景:
用户
系统
1、激活某文法的窗口,并按下该文法的产生式列表下的“修改”按钮。
2、修改正则文法。
3、点击“确认”按钮,确认完成修改。
1、弹出一个“修改”对话框,显示用户选定的正则文法的具体内容,并且该文法处于可编辑的状态。
2、即时显示用户修改后的正则文法。
3、检查修改后的文法是否合法:
若合法,则更新系统数据缓冲区中所保存的数据,并关闭“修改”对话框;若不合法,则弹出对话框,给出相应的提示信息,提示用户重新修改。
4、根据修改后的文法,显示对应的自动机。
后置条件:
系统进入“等待”状态,等待用户进行操作。
异常:
1、用户修改后的文法不是正则文法——系统弹出对话框,提示用户重新修改。
2、用户修改后的文法格式不符合系统要求——系统弹出对话框,提示用户重新修改。
优先级:
较高,必须在显示功能之后实现
使用频率:
经常
约束:
1、数据源:
系统数据缓冲区中已保存的数据,对话框中用户输入的数据
2、约束:
对正则文法的输入要求参见“输入用例”
3.3.3保存新创建的文法和自动机用例
主参与者:
用户
目标:
保存用户新创建的正则文法和自动机,其中自动机需要保存各节点位置、表示推导关系的弧线的位置信息。
前置条件:
系统已启动,用户已输入一个新的正则文法,但尚未保存。
触发器:
用户点击“保存”菜单命令或是工具栏“保存”图标
场景:
用户
系统
1、点击“新建”菜单命令或是工具栏“新建”图标。
2、选择好保存位置,输入文件名,点击“确认”按钮。
1、弹出对话框,提示用户选择保存位置和文件名。
2、读取用户输入,判断路径和文件名是否合法。
3、在用户指定位置,以用户输入名创建一个新文件,将正则文法、自动机的位置信息写入到文件中。
4、关闭对话框。
后置条件:
系统进入“等待”状态,等待用户进行操作。
异常:
1、用户输入的文件名不符合Windows系统中文件的命名规范——系统给出提示信息,要求用户重新输入文件名。
2、用户所选择的文件夹中存在同名文件——系统弹出对话框,提示用户重名,要求用户重新输入文件名。
优先级:
较高,必须在显示功能之后实现
使用频率:
经常
约束:
1、数据源:
系统数据缓冲区中已保存的数据,对话框中用户输入的数据
2、约束:
用户输入的文件名必须符合Windows系统中文件的命名规范,即文件名中必须满足如下要求:
Ø允许文件或者文件夹名称不得超过255个字符。
Ø文件名除了开头之外任何地方都可以使用空格。
Ø文件名中不能有下列符号:
“?
”、“、”、“╲”、“*”、““”、“””、“<”、“>”、“|”。
3.3.4保存用户修改用例
主参与者:
用户
目标:
保存用户对自动机中节点、弧线的位置,以及正则文法所做的修改。
前置条件:
系统已启动,并且系统数据缓冲区中已存在一个正则文法(用户新输入并已经保存过的文法,或是从文件读取的正则文法),并且显示区域已给出该正则文法所对应的自动机。
触发器:
用户点击“保存”菜单命令或是工具栏“保存”图标。
场景:
用户
系统
1、点击“保存”菜单命令或是工具栏“保存”图标。
1、清空存有该正则文法的文件中的所有信息,将修改后的正则文法、自动机的位置信息保存到该文法文件中。
后置条件:
系统进入“等待”状态,等待用户进行操作。
异常:
1、保存该文法的文件在进行“保存”操作前被删除,无法找到相应文件——根据文件名,创建新的文件,并将正则文法和自动机的位置信息保存到这个文件中。
优先级:
较高,必须在显示功能之后实现
使用频率:
经常
约束:
1、数据源:
系统数据缓冲区中已保存的数据。
2、约束:
文件名必须符合Windows系统中文件的命名规范,具体要求请参见“保存新的正则文法用例”。
3.3.5装入正则文法和自动机用例
主参与者:
用户
目标:
将用户指定的文件中所保存的正则文法和自动机装入到系统中,并显示该正则文法和自动机。
前置条件:
系统已启动,并且存在一个文件,该文件按照系统指定格式保存有正则文法以及相应的自动机信息。
触发器:
用户点击“打开”菜单命令或是工具栏“打开”图标。
场景:
用户
系统
1、点击“打开”菜单命令或是工具栏“打开”图标。
2、选择某个文件,点击“确定”按钮。
1、弹出“打开”对话框,提示用户选择装入文件。
2、关闭对话框,读取相应文件,将该文件中的正则文法、自动机信息保存到系统中。
3、显示自动机和正则文法。
后置条件:
系统进入“等待”状态,等待用户进行操作。
异常:
1、用户指定的文件保存格式不符合系统要求——系统弹出对话框,要求用户指定一个新的装入文件。
2、用户指定的文件所保存文法不是正则文法——系统弹出对话框,要求用户指定一个新的装入文件。
优先级:
较高,必须在保存功能之后实现
使用频率:
经常
约束:
1、数据源:
保存有正则文法、自动机位置信息的文件。
2、约束:
文件中的数据必须按照系统的指定格式书写。
尚未解决的问题:
在文件中,正则文法、自动机的位置信息应该以什么形式保存?
3.3.6选中自动机某节点用例
主参与者:
用户
目标:
选中自动机某个节点,使其处于选中状态。
前置条件:
系统已启动,并且系统中已存在一个正则文法,显示区中已显示该文法所对应的自动机。
触发器:
用户在自动机某个节点的位置上按下鼠标左键。
场景:
用户
系统
1、在自动机某个节点的位置上按下鼠标左键。
1、读取鼠标所在位置的坐标,判断是否有节点被选中:
如果这个坐标在节点圆上或圆内,则该节点被选中,将其高亮显示,并显示与该节点有关的弧的控制点;否则,不进行任何操作。
后置条件:
系统进入“等待”状态,等待用户进行操作。
异常:
无
优先级:
较高,必须在显示功能之后实现。
使用频率:
经常
约束:
1、数据源:
系统数据缓冲区中已有的数据,鼠标按下时的坐标。
2、约束:
要选中一个节点,则必须按下鼠标左键,并且鼠标所在位置的坐标必须在节点圆上或是节点圆内。
3.3.7选中自动机某弧线用例
主参与者:
用户
目标:
选中某个弧线,使其处于选中状态。
前置条件:
系统已启动,并且系统中已存在一个正则文法,显示区中已显示该文法所对应的自动机。
触发器:
用户在自动机某条弧线显示有终极符的位置上按下鼠标左键;选中自动机某个节点。
场景:
用户
系统
1、在自动机某条弧线显示有终极符的位置上按下鼠标左键,或是选中自动机的某个节点。
1、读取鼠标所在位置的坐标,判断是否有弧线被选中:
如果这个坐标在某条弧终极符附近,则该弧线被选中,显示该弧线的两个控制点;否则,不进行任何操作。
如果是选中了自动机某个节点,则显示与该节点有关系的所有弧线的控制点。
后置条件:
系统进入“等待”状态,等待用户进行操作。
异常:
无
优先级:
较高,必须在显示功能之后实现
使用频率:
经常
约束:
1、数据源:
系统数据缓冲区中已有的数据,鼠标按下时的坐标。
2、约束:
要选中一条弧线,则必须按下鼠标左键,并且鼠标所在位置的坐标必须在该弧线终极符的附近。
3.3.8选中某条产生式用例
主参与者:
用户
目标:
选中正则文法中的某个产生式,使自动机中对应的节点、弧线高亮显示。
前置条件:
系统已启动,并且系统中已存在至少一个正则文法,显示区中已显示该文法所对应的自动机。
触发器:
用户在显示区左侧的产生式列表中,按下鼠标左键。
场景:
用户
系统
1、在显示区左侧的产生式列表中,按下鼠标左键。
1、读取鼠标按下位置的坐标,判断用户是否选中了某条产生式:
如果在该坐标有一条产生式,则将该产生式对应的自动机中的节点高亮显示,显示对应弧线的控制点;没有则不进行任何操作。
后置条件:
系统进入“等待”状态,等待用户进行操作。
异常:
1、用户按下的位置没有产生式:
系统不进行任何响应。
优先级:
低,必须在显示功能之后实现
使用频率:
经常
约束:
1、数据源:
系统数据缓冲区中已有的数据,鼠标按下时的坐标。
2、约束:
用户鼠标按下的位置必须有一条产生式才可以。
3.3.9调整节点位置用例
主参与者:
用户
目标:
调整图形显示中,用于表示正则文法变量的节点,并且节点位置移动后,与该节点有关系的弧线也随之移动。
前置条件:
系统已启动,并且系统中已存在一个正则文法,并且该文法所对应的自动机已在显示区中画出。
触发器:
用户在自动机某个节点的位置上按下鼠标左键。
场景:
用户
系统
1、在自动机某个节点的位置上按下鼠标左键。
2、拖动鼠标,移动至合适的位置。
3、鼠标左键抬起。
1、将相应节点高亮显示,同时显示与该节点有关系的各弧线的控制点。
2、读取鼠标当前位置,改变当前被“选中”的节点的坐标,并重新绘制该节点,计算与该节点有关系的弧线的新坐标,并重新绘制这些弧线。
后置条件:
系统进入“等待”状态,等待用户进行操作。
优先级:
较高,必须在显示功能之后实现
使用频率:
经常
约束:
1、数据源:
系统数据缓冲区中已保存的数据
2、约束:
在拖动节点时,只有鼠标左键点击表示节点的圆形内部或圆形边,才可以选中该节点。
尚未解决的问题:
1、用户把一个节点圆拖动到另一个节点圆上时,应该如何处理?
3.3.10调整弧线位置用例
主参与者:
用户
目标:
调整自动机中,用于表示正则文法推导关系的弧线。
前置条件:
系统已启动,并且系统中已存在一个正则文法,并且该文法所对应的自动机已在显示区中画出。
触发器:
用户在自动机某条弧线的终极符上按下鼠标左键。
场景:
用户
系统
1、在自动机某条弧线的终极符上按下鼠标左键,然后抬起。
2、按下鼠标左键,选择一个控制点。
3、拖动鼠标,移动至合适的位置。
4、鼠标左键抬起。
1、显示相应弧线的两个控制点。
2、读取鼠标按下位置的坐标,判断当前用户选中的是哪个控制点。
3、读取鼠标位置,更改用户选中的控制点的坐标,并根据更改后的坐标信息,重新绘制弧线。
后置条件:
系统进入“等待”状态,等待用户进行操作。
优先级:
较高,必须在显示功能之后实现
使用频率:
经常
约束:
1、数据源:
系统中已保存的数据
2、约束:
在拖动控制点时,只有鼠标左键点击表示控制点的圆形内部或圆形边时,才能够拖动该控制点。
尚未解决的问题:
1、当用户拖动弧线,使两条弧线有交叉时,应该如何处理?
4系统静态建模
4.1类图
图4-1
4.2类文档
共9个类,下面分别给出具体说明。
4.2.1Triple类
图4-2
说明:
表示一个产生式,例如产生式“A:
:
=aB”。
•对象关联
–若干产生式构成一个正则文法。
•属性:
–var1:
char产生式中的第一个非终结符
–ter:
char产生式中的终结符
–var2:
char产生式中的第二个非终结符
•行为:
–getVar1():
char获得产生式中第一个非终结符
–getTer():
char获得产生式中终结符
–getVar2():
char获得产生式中第二个非终结符
4.2.2Regular类
图4-3
说明:
表示文法。
•对象关联
–由若干产生式组成。
•属性:
–t:
Triple[1..*]组成文法的产生式集合
•行为:
–Recognize(rgstr:
String):
Bool初始化文法。
由字符串识别为文法。
–getAt(idx:
int):
Triple获得指定的产生式
–AddTriple(tri:
Triple)添加产生式
–RemoveAll()清空文法
4.2.3FiniteAutomata类
图4-4
说明:
表示有限状态自动机。
•对象关联
–由若干非终结符节点和若干有向曲线组成,使用文法。
•属性:
–rg:
RelationGraph[1..*]若干有向曲线
–state:
State[2..*]若干状态(非终结符)节点
–rg:
Regular使用的文法
–selected:
Geometry*被选中的图元指针
•行为:
–Initialize(rg:
Regular)自动机的初始化
–Press(x:
int,y:
int)鼠标按下,选择图元操作
–Move(x:
int,y:
int)鼠标移动,刷新相应的被选中的图元
–Release(x:
int,y:
int)释放鼠标,移动结束,刷新界面。
–AddSelectedGeo(geo:
Geometry*)将选中的图元加入被选中列表
–RemoveAll()清空自动机
–InitPosition()计算初始位置
–SelectRegular(var1:
char,ter:
char,var2:
char)针对指定的三元关系时,选中相应的三元关系图
4.2.4Geometry类
图4-5
说明:
表示图元。
•对象关联
–派生控制点、有向曲线、非终结符节点图元。
•属性:
–selected:
int=0记录选中状态,默认未选中
–x:
int=0每个子类均有x,y坐标,故抽象出来,在RG中
–y:
int=0代表终结符的位置,其他代表各自中心
•行为:
–Draw()图元绘制
–Offset(cx:
int,cy:
int)图元移动
–Select(cx:
int,cy:
int):
int选中状态判断(仅选择时判断,移动时无需判断。
4.2.5RelationGraph
图4-6
说明:
表示有向曲线。
•对象关联
–派生自图元类;由2个控制点组成;使用非终结符节点类;实例化三元关系类;组成有限自动机。
•属性:
–start:
State*曲线的起始状态(非终结符)节点
–end:
State*曲线的结束状态(非终结符)节点
–p:
ControlPoint*[2]曲线的两个控制点
–ter:
char终结符字符
•行为:
–Draw()绘制
–Offset(cx:
int,cy:
int)对选中的控制点移动
–Select(cx:
int,cy:
int):
int选中状态判断,含控制点判断
–GetStart():
State*获得起始状态指针
–GetEnd():
:
State*获得结束状态指针
–GetCp(idx:
int):
ControlPoint*获得控制点指针
4.2.6ControlPoint类
图4-7
说明:
表示有向曲线上的控制点。
•对象关联
–派生自图元类;组成有向曲线类;被非终结符节点类使用。
•属性:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 正则 文法 自动机 生成 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)