5c被熊猫加速器怎么样加速怎么还原

后使用快捷导航没有帐号?
查看: 3124|回复: 43
新人欢迎积分1 阅读权限40积分627精华0UID4711903帖子金钱440 威望-1
Lv.4, 积分 627, 距离下一级还需 373 积分
UID4711903帖子威望-1 多玩草137 草
无聊去91PK&&遇到一白手 一浮空就瞬间落地 起初我还以为是卡 后来直接就是开场我还在读秒就直接冲过来了&&想不通&&自由开加速器有什么意思&&难道是命运的羽毛带出了脑残风? 这段对话起初我以为他说我开连发 其实我拿的是手炮 开连发没用' _7 V, U. n& T: \! G1 j
哥只是回去全区通告下&&这孩子牛B起来了7 f8 ?( }6 h* Q5 B; R&&G# Q2 w
&&真的让人很无语&&尊场挂多 太烦人&&自由都流行微调加速器了&&让我情何以堪哟
介于很多人都不了解微调加速是什么&&下面我为大家介绍下
加速器不属于外挂类型 不需要DDL注入&&DNF加速器有2种
1、系统加速:& L5 I( S& ?9 d: A2 a6 Y
& && &类型:守望者加速器 这是一款对很多游戏都通用的加速器 或者说对深度技术专业版的系统都是有效的 他不是游戏加速 是变相的系统加速 他可以使的电脑右下角的时钟走快 加速你的系统 从而达到加速游戏的效果 并且不会3方不会中断 一般在DNF上用于工作室刷图 有了他 30秒过全图不在是神话 提高工作室产量& &但也不乏一些童鞋用来加速PK&&守望者的宇宙变速1.1倍 在PK场中可以把你的全攻速提升30% 一般很难发现 介于今天我遇到的这位 估计是1.2 瞬间落地有点扯蛋了. \2 W: [! {. Z' _6 ~
2、进程加速:
& & 类型:用守望者加速要安装葡萄修改电源&&葡萄会删除C盘系统启动文件 造成机器蓝屏 所以有些程序爱好者做出了进程加速器 使用就是打开你的电脑的任务管理器 找到游戏对应的PID码来选择加速的速度&&这只是单一的进程加速 对系统无影响 同样 不会三方不会中断 速度效果和守望者一样
+ }! }: _5 W' u
加速器如果开的倍数小的话 就是传说中的微调了 你感觉他的速度很快 却不知道为什么 看了这篇文章&&你该明白了& &这货不是延迟&&是加速器!
( Q7 k# r9 N6 {& N7 S
[ 本帖最后由 ㄗs↘━═☆ 于
00:46 编辑 ]
新人欢迎积分1 阅读权限40积分627精华0UID4711903帖子金钱440 威望-1
Lv.4, 积分 627, 距离下一级还需 373 积分
UID4711903帖子威望-1 多玩草137 草
**都这么嚣张?&&哥很无奈
新人欢迎积分1 阅读权限40积分627精华0UID4711903帖子金钱440 威望-1
Lv.4, 积分 627, 距离下一级还需 373 积分
UID4711903帖子威望-1 多玩草137 草
路过的顶下呗&&让更多人注意下&&延迟不一定是卡&&他有可能是加速
新人欢迎积分1 阅读权限60积分4045精华0UID7329158帖子金钱8316 威望0
和谐和谐大和谐
Lv.6, 积分 4045, 距离下一级还需 955 积分
UID7329158帖子威望0 多玩草10 草
噢,这个样子啊
新人欢迎积分0 阅读权限60积分3751精华0UID4576171帖子金钱1546 威望0
Lv.6, 积分 3751, 距离下一级还需 1249 积分
UID4576171帖子威望0 多玩草10 草
貌似羽毛哥pk不开挂
JJ复JJ木兰裆护J
新人欢迎积分1 阅读权限80积分13311精华0UID帖子金钱11696 威望0
毒奶粉难以戒掉,中毒LV99
Lv.8, 积分 13311, 距离下一级还需 6689 积分
UID帖子威望0 多玩草0 草
新人欢迎积分1 阅读权限40积分627精华0UID4711903帖子金钱440 威望-1
Lv.4, 积分 627, 距离下一级还需 373 积分
UID4711903帖子威望-1 多玩草137 草
帖子更新&&进来的顶下
新人欢迎积分1 阅读权限40积分627精华0UID4711903帖子金钱440 威望-1
Lv.4, 积分 627, 距离下一级还需 373 积分
UID4711903帖子威望-1 多玩草137 草
我日&&又沉了么
新人欢迎积分0 阅读权限70积分8855精华0UID867522帖子金钱8680 威望7
每天不停的挖矿挖矿挖矿 ... ... ...
Lv.7, 积分 8855, 距离下一级还需 1145 积分
UID867522帖子威望7 多玩草1524 草
学习了。,。。。。
新人欢迎积分0 阅读权限30积分230精华0UID帖子金钱153 威望0
Lv.3, 积分 230, 距离下一级还需 20 积分
UID帖子威望0 多玩草10 草
原来如比,好像很厉害
新人欢迎积分1 阅读权限20积分38精华0UID帖子金钱168 威望0
Lv.2, 积分 38, 距离下一级还需 12 积分
UID帖子威望0 多玩草0 草
看了楼主签名才发现是母蛋,这个必须顶
゛千羽メ、
新人欢迎积分0 阅读权限40积分710精华0UID6441145帖子金钱723 威望0
Lv.4, 积分 710, 距离下一级还需 290 积分
UID6441145帖子威望0 多玩草10 草
新人欢迎积分0 阅读权限80积分13529精华0UID帖子金钱103770 威望0
觉今是而昨非
Lv.8, 积分 13529, 距离下一级还需 6471 积分
UID帖子威望0 多玩草140 草
我也遇到过。
新人欢迎积分0 阅读权限80积分10836精华0UID9779402帖子金钱27684 威望1
Yuuki Asuna
Lv.8, 积分 10836, 距离下一级还需 9164 积分
UID9779402帖子威望1 多玩草210 草
就看看,不说话。
SOHOˉ杀戮
新人欢迎积分1 阅读权限60积分3011精华0UID帖子金钱7617 威望0
Lv.6, 积分 3011, 距离下一级还需 1989 积分
UID帖子威望0 多玩草88 草
看看。。。
手机论坛勋章
APP发帖双倍积分,登陆即送勋章!
相恋情侣勋章
相恋情侣勋章
圣诞活动勋章
圣诞活动勋章
御风者勋章
御风者勋章
马年新春勋章
手机APP马年迎春,马上有钱!
冬天纪念勋章
绿色的小萌蛙
一颗只为你牵动的心
跟着小气球飘到外太空
夏日休闲度假
患难与共,同心同德
啊呜啊呜吃货就是我
本喵才不是萌萌哒
风车无脸男
跟着它转动起来吧!
需要金钱:1100
Powered by
手机盒子客户端点击或扫描下载医用电子加速器生产企业/生产厂家:医科达北研(北京)医疗器械有限公司
<meta name="description" content="医用电子加速器生产企业,医疗器械经营企业:医科达北研(北京)医疗器械有限公司,YZB/国 0132 《BJ-6B医用电子加速器》生产厂家:国食药监械(准)字0号(更)/中国医疗器械网,医疗器械生产许可证:YZB/国 0132 《BJ-6B医用电子加速器》,&&&&生产场所&&&&北京昌平科技园区创新路21号&&&&&&&&&&&&&&&变更日期&&&&&&&&备注&&&&生产者名称…" />
欢迎来到医学全在线网站!
医用电子加速器
医用电子加速器生产企业:医科达北研(北京)医疗器械有限公司,产品标准:YZB/国 0132 《BJ-6B医用电子加速器》,产品性能结构及组成:由机架(包括辐射头)、治疗床、操作控制系统、水冷却温控系统、高压脉冲调制器等组成。X射线辐射能量6 MV,剂量率>200 cGY/min.,等中心高度133 cm,正常治疗距离(NTD)100 cm,最大均整辐射野35 cmX35 cm,楔形治疗角度 0-60度。X辐射自动弧形治疗 1cGY/deg - 5cGY/deg, 连续调节.,医用电子加速器生产厂家地址
北京昌平科技园区创新路21号
生产者名称由“北京医疗研究所”变更为“医科达北研(北京)医疗器械有限公司”,注册证由“国食药监械(准)字0号”变更为“国食药监械(准)字0号(更)”,原证自发证之日起作废。
国食药监械(准)字0号(更)
医科达北研(北京)医疗器械有限公司
北京昌平科技园区创新路21号
医用电子加速器
YZB/国 0132 《BJ-6B医用电子加速器》
产品性能结构及组成
由机架(包括辐射头)、治疗床、操纵控制系统、水冷却温控系统、高压脉冲调制器等组成。X射线辐射能量6 MV,剂量率>200 cGY/min.,等中心高度133 cm,正常治疗间隔(NTD)100 cm,最大均整辐射野35 cmX35 cm,楔形治疗角度 0-60度。X辐射自动弧形治疗 1cGY/deg - 5cGY/deg, 连续调节.
产品适用范围
该设备用于对患者的放射治疗。
上一篇文章: 下一篇文章:
&&&&&&&&&&&&&&&&&&&&
全站分类导航
|||||||||||||||
|||||||||||||||
||||||||||||
版权所有& CopyRight , , All Rights Reserved分析程序加速器装置以及更新其的方法
分析程序加速器装置以及更新其的方法
分析程序加速器装置以及更新其的方法CN
C 摘要 一种硬件加速器个性编译器,通过辨别与各个可执行功能、标识、变元、句法、语法规则、特殊符号等相对应的标记,从如在编程语言中以诸如Backus-Naur形式或其派生形式的形式记号提供的一组预期可执行功能的规范、自动地产生无差错状态表。标记可以是递归的(例如无限的),在该情况下标记被变换为确定性有限自动机或非确定性有限自动机。非确定性有限自动机被变换为有限自动机,然后被变换为用于创建状态表的状态转换,然后该状态表能够被存储、或优选地被加载到硬件语法分析程序加速器的有限状态机中,以定义其个性。
权利要求(17)
1、一种动态地重新配置分析程序加速器的方法,包括:提供语法规范;提供具有有限状态机和状态表存储器的分析程序加速器;对语法进行编译,以产生有限自动机;以自描述格式从有限自动机创建有限状态机转换规范;以及将有限状态机状态转换规范载入到状态表存储器中。
2. 根据权利要求l所述的方法,其中自描述格式是标记语言。
3. 根据权利要求2所述的方法,其中标记语言是可扩展标记语言 XML。
4. 根据权利要求3所述的方法,其中语法规范包括分析程序加速 器的希望性能特性的规范。
5. 根据权利要求l所述的方法,其中语法规范包括关于分析程序 加速器的希望性能特性的规范。
6. 根据权利要求1所述的方法,所述方法的特征在于:电子地以包括标记语言的自描述格式提供规范,所述规范包括一 组所希望的可执行功能;以及通过根据加载到状态表存储器中的状态机状态转换规范而实时更 新分析程序加速器,来随着时间适应输入流中遇到的样式。
7. 根据权利要求6所述的方法,还包括从有限状态机向标记缓冲 器发送数据。
8. 根据权利要求6所述的方法,其中标记语言是可扩展标记语言 XML。
9. 根据权利要求6所述的方法,其中规范包括语法。
10. 根据权利要求6所述的方法,其中从有限自动机创建有限状 态机状态转换规范包括以可扩展标记语言XML创建有限状态机状态 转换规范。
11. 根据权利要求6所述的方法,其中规范包括与可执行功能、 标识、变元、句法规则或语法规则中的至少一个相对应的一个或多个标记。
12、 一种具有自适应学习能力的分析程序加速器装置,包括: 有限状态机,被配置用于分析文档;存储器,被配置用于存储至少一个状态表;分析程序加速器编译器,被配置用于编译语法规范并以包括标记 语言的自描述格式产生状态转换规范;以及分析程序加速器加载器,被配置用于把与状态转换规范相对应的 状态表加载到存储器中,其中分析程序加速器编译器和分析程序加速器加载器被配置成, 响应改变的条件而重新配置分析程序加速器。
13、 根据权利要求12所述的装置,其中改变的条件包括文档中的样式。
14、 根据权利要求12所述的装置,还包括:标记缓冲器,被配置用于存储从有限状态机接收的至少一个标记;其中分析程序加速器编译器和分析程序加速器加载器被配置成, 实时地响应电子文档中检测的数据样式而重新配置分析程序加速器, 从而随着时间自适应地提供学习能力。
15、 根据权利要求12所述的装置,还包括-标记缓冲器,被配置用于存储从有限状态机接收到的至少一个标记;其中分析程序加速器编译器和分析程序加速器加载器被配置成, 实时地响应该装置所遇到的改变的条件而重新配置分析程序加速器, 从而随着时间自适应地提供学习能力。
16、 根据权利要求15所述的装置,其中改变的条件包括电子文档中检测的数据样式。
17、 根据权利要求12所述的装置,其中,分析程序加速器编译器和分析程序加速器加载器被配置成,实时地响应该装置所遇到的改变 的条件而重新配置分析程序加速器,从而随着时间自适应地提供学习 能力,其中改变的条件包括电子文档中检测的数据样式。
分析程序加速器装置以及更新其的方法技术领域本发明一般涉及用于控制通用计算机操作的应用和文档处理,并 且尤其涉及对给定但任意的语言或格式的应用程序、文档和/或其它逻辑符号序歹u执行语法分析操作。背景技术近些年来,计算机之间的数字通信以及将计算机连接到网络中的 领域得到了迅速发展,它在许多方面都类似于前些年个人计算机的激 增。远程处理互连性和可能性的这种增加大大提高了这种网络化系统 中个体计算机的有效能力和功能性。然而,当计算机投入使用时,个 体计算机和系统的使用多样性、它们用户的定位以及目前技术水平造 成了单机和它们操作系统的能力和配置的高度多样性,单机和它们操 作系统共同被称为"平台",这些平台在某种程度上、尤其是在操作系 统和编程语言级一般互不兼容。平台特征的这种不兼容性,以及同时对通信及远程处理能力和用 于支持它的足够兼容度的要求,导致了面向对象编程(面向对象编程 提供一种通过实体、属性和关系的参照系统将应用及数据编译为一组 不同程度的一般化模块的概念)以及用于实施面向对象编程的许多编程语言的发展。可扩展标记语言(XMLTM)就是这样一种语言,XML己 得到广泛使用,并且可以作为文档、在任意组成和体系结构的网络上 传输。在这种语言中,某些字符串对应于某些命令或标识,包括某些专 用字符和其它重要数据(共同被称为控制字),这些专用字符和重要数 据允许数据或操作实际上识别它们自己,使得此后它们可以被处理为 "对象",以致关联的数据和命令可以被翻译成不同语言不同应用的适
当格式和命令,以便产生足以支持给定机器上预期处理的各个连接平 台兼容度。这些字符串的检测是通过一种被称为语法分析的操作来执 行的,语法分析操作类似于更常规的把诸如句子的表达式的语法分解 为其组成部分,并在语法上描述它们的用法。即使在其它可以被计算 机搜索或相反被计算机处理的计算机编程语言和文档中,控制字也将 限于有限的但可能很多,从而允许的符号序列将类似地被限制为内容 的事件和语言的语法。此外,用于识别文档内容的文档语法分析已经 证明是, 一种通过检测可能代表攻击、未授权访问或其它可能安全性 缺口的控制字来提供处理器和网络中安全性的重要工具。另外,或多 或少具有复杂功能序列的其它许多设备如电话和/或诊断设备,响应取 决于先前功能序列的类似剌激或输入,采用有限状态机来实现不同功 能,而实际上许多这种设备的响应定制变得越来越需要,但是受产生 与输入的预期响应序列相对应的状态表的困难的限制。例如,当对XMLT"文档进行语法分析时,中央处理器(CPU)执行时间的一大部分,并且可能主要部分,都花费在遍历文档、以便搜索如相对于正在处理的特殊XMi;"标准而定义的控制字、专用字符和其它 重要数据上。典型地这是通过软件来执行的,该软件査询每个字符, 并确定每个字符是否属于所关心的一组预定义串,例如包括以下 "〈command〉"、 "〈data:dataword〉"、 "〈endcommand〉"等的一组字符 串。如果检测到任何一个目标串,就将标记和指向文档中标记开始位 置和标记长度的指针一起保存。这些标记被累积,直到整个文档都被 进行了语法分析为止。对文档进行语法分析的常规方法是,用软件来实施基于表的有限 状态机(FSM),以搜索所关心的这些串。状态表驻留在存储器中,并 且被设计用于搜索文档中所关心的特定模式。当前状态用作状态表的 基地址,并且输入字符的ASCII表示是表的索引。例如,假定状态机 处于状态0 (0)、并且第一个输入字符是ASCII值02,则状态项的绝 对地址将是基地址(状态0)与索引/ASCII字符(02)的和/连接。FSM 以CPU从存储器中取出输入文档的第一字符而开始。然后,CPU将绝 对地址构造到存储器中与初始化/当前状态和输入字符相对应的状态
表中,然后从该状态表取出状态数据。基于所返回的状态数据,如果 不同(表示字符与所关心的串的第一个字符相对应),则CPU将当前状 态更新为新值,并执行状态数据中指示的其它任何行动(例如,如果 单一字符是专用字符,或者如果一旦进一步重复上述操作,就发现当 前字符是所关心的串的最后一个字符,则发出标记或中断)。重复上述过程,并且当找到所关心的串的后续字符时,改变状态。即,如果初始字符被认为是所关心的串的初始字符,则FSM的状态可 以前进到新状态(例如,从初始状态0到状态1)。如果字符不是所关 心的,则状态机将(一般)通过在从状态表地址返回的状态表项目中 指定相同的状态(例如状态0)(或者通过不命令状态更新),来保持 相同状态。可能的行动包括但不限于,设置中断、存储标记以及更新 指针。然后,对后面的字符重复该过程。应该注意,当正在跟踪所关 心的串、并且FSM处于非O状态(表示还没有找到所关心的串或当前 正在跟随所关心的串的其它状态),可以找到与当前串不一致,但是是 另一个关心的串的初始字符的字符。在这种情况下,状态表项目将指 示适当的行动,以便指出和识别先前跟踪的串片段或部分,并跟踪可 能的新的所关心串,直到完全识别新串,或发现新串不是所关心的串 为止。换句话说,所关心的串可能被嵌套,并且状态机必须能够在另 一个关心的串内检测到所关心的串,等等。这可能要求CPU遍历许多 次XM1;m文档的各部分,以便对XML^文档进行彻底的语法分析。然而,可以容易理解,FSM的状态表必定是给定计算机语言及其 控制字和/或语法及句法所特有的。也可以理解,随着控制字和格式规 则数的增大,状态表的尺寸必定变得非常大。此外,目前通常的做法 是,产生制定完善,且使用日益频繁的工业标准语言的增强或扩展版 本,并且任何计算机语言的任何修订或扩展都必定需要用于对那种语 言文档进行语法分析的FSM状态表的相应修订。换句话说,由控制字 给出的所有允许符号组合都必定反映在状态表中,并且表面上控制字 组和/或语言语法的少量修订或扩展可能需要FSM状态表尺寸的大大 修正或增加。较实际的做法是,手动地产生这些状态表、并将它们装载到FSM
可存取的存储器中,以便在避免改变FSM硬件的同时适应语言的改变。 FSM所针对的语言以及FSM对那种语言文档进行语法分析的能力,有 时被称为FSM的"个性(personality):即使状态表的开发可能包括 计算机语言或采用那种语言的应用程序的大部分开发费用,也不存在 切实可行的备选方案来替换用于改变FSM个性的手动状态表产生过 程。进一步,关于所有手动过程,手动产生状态表常遭受错误,必须 在可以可靠使用FSM之前检测并校正这些错误。实际的效果是,在需 要文档语法分析的情况下,开发状态表所需的时间造成了软件应用和 修改及其扩展和升级的实施的延迟,即使在现代处理器和网络环境中 这种语言修改、扩展和升级正变得越来越频繁。而且,在文档语法分 析用作检测可能安全缺口的工具的情况下,当照这样识别出指示这种 可能安全缺口的串时,应该尽可能及时地将所关心的串添加到状态表 中,即使这种添加可能需要对用于这种用途的状态表进行大幅度修订。 更一般的是,可能需要修改FSM个性,以改变包括FSM的设备的功能 的任何情况,都可能受益于产生相应状态表的困难度、成本和错误灵 敏度的减小。发明内容因此,本发明的目的是提供一种用于简单且无差错地改变有限状 态机状态表的技术和设备。本发明的另一个目的是,提供一种技术和设备在不进行硬件修改 的情况下重新配置有限状态机,以及诸如包括有限状态机的硬件语法 分析程序加速器的装置,以便尤其适应计算机语言和应用修改与扩展、 或全新计算机语言和/或应用规范。本发明的又一目的是,提供一种用于产生状态转换表,并以诸如 XML?的自描述数据格式记录它们的方法和设备。为实现本发明这些及其它目的,本发明提供一种用于执行方法和 加载器的方法学和编译器,该方法和加载器优选地在诸如硬件语法分 析程序加速器的装备内用软件来实施,该硬件语法分析程序加速器能 够读取规范或概括预期可执行功能的规范,以产生输出,该输出能够
被加载到可以由诸如语法分析加速器的包括有限状态机(FSM)的设备访问的存储器中,以便定制FSM的个性,而该设备又包括FSM。优选 地,用形式记号如Backus-Naur形式(BNF)或其派生物、或其它正规 表达式,来写语言或其它规范。基于这种输入,根据本发明的编译器 产生相应的状态转换,来形成包括一个或多个状态表的状态转换规范。附图说明由以下参考附图的本发明优选实施例详细说明,将可以更好地理 解本发明上述及其它目的、特征及优点,其中: 图l是本发明的高级示意框图,图2A是代表对理解本发明有用处的状态表的图, 图2B是本发明一般化形式的基本操作的高级流程图, 图3是本发明优选实施例的操作的高级流程图, 图4是本发明优选实施例的高级上下文图,图5A、 5B、 5C、 5D、 5E、 5F、 5G、 5H和51显示了分组和识别语 法规则定义中的子表达式,以及包括图6A和6B的图6显示了完全用自描述数据格式表示的输出 状态表规范文件的例子。具体实施方式参考附图,尤其是参考图1,图1显示了根据本发明的、且被连 接以便向优选地为硬件语法分析加速器的设备中的有限状态机(FSM) 提供状态表的个性编译器的基本形式的高级示意框图。最初,应该注 意,可以把个性编译器100实施为可连接到存储器105的单独设备(例 如在硬件语法分析程序加速器离线的情况下),然后当基于请求方式而 需要时,可以访问存储器105以获得状态转换规范,以便由加载器110 将状态转换规范加载到FSM状态表中、或者使状态转换规范与任意设 备(由虚线120指示)中的FSM 140相结合,以部分地或完全控制该 状态转换规范,由此允许实时地或基本上实时地更新设备的个性。应 该理解,在后一种情况下,基本上是实时的本发明操作,尤其是通过
编译语言语法规范的替换版本加速实时操作而实现的基本上实时的本发明操作,允许本发明始终适于在输入流中遇到的模式和状态;由此 在个性编译器以及包括FSM的设备中提供基本学习能力。通过相同的 标记,应该理解,将在下面描述的产生中间结果的处理的一部分,如 语法规范预处理(例如直到图2B的步骤250的处理或用于提供被归档 存储的预产生状态表的处理),可以以单独的形式操作,并且当需要时 处理从存储的数据(例如有限自动机或状态表)起开始操作。本发明 的优选应用和环境连同如虛线130所示的硬件加速器一起被配置为集 成的形式、或完全或部分单独的形式。与本发明的实施无关,回顾FSM状态表的性质对于理解本发明是 有用的,尤其是就优选的硬件语法分析程序加速器环境而论。在全部 在日提交并且被委派给本发明代理人的美国专利申请 10/331,315, 10/331,879和10/334, 086 (事务所编号FS-00766、 FS-00767和FS-00768)中,分别公开了三种不同的硬件语法分析程序 加速器实施,它们在此整个被引入作为参考。图2A显示了其中公开的 示范性状态表的一部分。应该理解,图2A所示的状态表潜在地只是用于对文档进行语法分 析的状态表的很小一部分,并且其本质上意图作为示例。虽然至少在 所示的形式上、'完整的状态表通常在物理上不存在,并且图2A也可用 于方便理解公知软件语法分析程序的操作,但是图2A中没有一个部分 被认为是关于本发明的先有技术。应该注意,XMLTM文档在此用作可以利用根据本发明的加速器处理 的一种逻辑数据序列的例子。也可以根据意图被共享服务器计算机执 行的网络数据分组内容、如用户终端命令串,来构造其它逻辑数据序 列。(这种命令串经常由恶意用户产生,并且被发送给共享计算机作为 长期入侵企图的一部分。)根据本发明的加速器适合于处理多种这样的 逻辑数据序列。注意到图2A所示状态表的一部分是复制的也将是有用 的。方便且优选的是,将符号的十六进制表示用作状态表索引,并据 此将状态表的垂直列标定为"00"至"FF"。对行进行编号,以反映FSM可以呈现的各种状态。从而,将多行基地址分成与可以用于代表 文档中要被执行语法分析的字符的代码的数量相对应的许多列;在该 例子中,分成与字符的基本8位十六进制字节相对应的256列。可以 以这种形式提供和可能需要的、可打印或不可打印的字符一样多的字 符。注意到所示状态表项目的几个方面将是有用的,尤其是在理解图 2A所示示范性状态表的多小,分支持许多字检测的方面:1. 在所示的状态表中,在状态为O的行中只有两项包括不同于"保 持在状态0"的项,当正在测试的字符不和任何关心的串的初始字符 匹配时,"保持在状态O"项维持初始状态。为前进到状态l作准备的 单项对应于所有关心的串都以相同字符开始的特殊情况。将为前进到 另一种状态作准备的其它任何字符一般将、但不一定前进到不同于状 态1的状态,但是对可以通过另一个字符到达的相同状态的进一步参 考可能对例如检测嵌套串有用处。把{状态0, FD)所示的具有"保持在 状态0"的命令(例如"特殊中断")包括进来,将用于检测和操作特 殊单字符。2. 在状态0以上的状态中,"保持在状态n"项为通过例如可能在 命令数值变元中遇到的一个或多个字符的潜在长行程来维持状态作准 备。本发明提供对这种类型字符串的特殊处理,以便提供增强的加速, 如将在下面详细讨论的。3. 在状态0以上的状态中,"转到状态0"项表示检测到把串和任 何关心的串区分开的字符,而与先前已检测到多少匹配的字符无关, 并且"转到状态0"项使语法分析过程返回到初始/默认状态,以便开 始搜索另一个关心的串。(为此,到目前为止,"转到状态0"项一般 将是状态表中出现最频繁或最多的项。)返回到状态0可能需要语法分 析操作返回到文档中在检测到区别字符时跟踪的字符串的开始字符之 后的字符。4. 包括具有"转到状态0"的命令的项指示对所关心的完整串的 检测的完成。 一般来说,命令将要存储此后允许串被处理为对象的标 记(和标记的地址和长度)。然而,具有"转到状态n"的命令为起动 中间点操作、同时继续跟踪可能潜在地和所关心的串匹配的串,作准 备。5.为避免搜索在两个关心的串之间发生分支的任何点处的模糊性 (例如具有n-1个相同初始字符、但具有不同的第n个字符的两个串, 或具有不同初始字符的两个串), 一般需要继续进行到不同(例如不连 贯)状态,如(状态1,011和(状态1,FD)所示。除特殊字符所包括的串 和所关心的串具有共同初始字符的特殊情况以外,完全识别任意长度 n的串将需要n-l种状态。为此,即使对于较适度的所关心串的数量, 状态表的状态和行的数量通常也必定很大。7.与前一段相反,大多数状态都可以完全由一个或两个唯一的、 且默认值为"转到状态0"的项来表征。本发明利用图2A状态表的该 特征,以便相对于所关心的串的一般情况、获得硬件高度节约及语法 分析过程的大幅度加速。如常规地执行的语法分析操作以处于给定默认/初始状态如图2A 中状态0的系统开始,然后一旦重复过程,当找到所关心的字符串的 匹配字符时,语法分析操作就前进到编号更高的状态。当所关心的串 被完全识别、或者当在潜在地是匹配串的串中的中间位置指定了特殊 操作时,执行诸如存储标记或发出中断的操作。然而,每当对文档的 每个字符重复操作,都必须从CPU存储器中取出字符,必须取出状态 表项目(再次从CPU存储器中),并且必须在顺序操作中更新各种指针 (例如指向文档字符和状态表基地址的指针)和寄存器(例如寄存初 始匹配字符地址和累积串长度的寄存器)。以上引入的应用中所公开的 硬件语法分析程序加速器通过为并行执行这些操作中的许多操作作准 备、同时通过其中的有限状态机评定文档的后续字符,来加速语法分 析过程。总之,语法分析程序的基本功能是,唯一识别所关心的输入字符 (例如符号或二进制信号序列)串,并且一旦实现这种识别就发出唯 一标记和其它信息。在某些情况下为了某些目的,也必须检测和验证 所关心的嵌套串的识别。因此,重要的是认识到,能够导致标记发出 的所有字符串都是被执行语法分析的文档的语言的、如通过那种语言
的控制字和特征句法定义的事件。相反,就语言规范而论,由控制字 和/或它们的顺序排列表示的语言事件也可以被认为是标记。从而,语 言规范包含足够的信息,用于语法分析程序为给定语言或一组关心的 字符串定义能够导致标记发出的所有关心的字符串,从而足以产生要 识别所有关心的字符串的状态表。参考图2B,图2B显示了本发明一般化形式的操作流程图。 一旦调用过程,"下一个标记"就被调用,如210所示。假定,只有在按照表示语言规范的数据的连续顺序的语言规范中,才存在某种顺序。在 存在顺序的意义上,实际顺序可以是任意的,并且在任何情况下都不 影响将被开发的状态转换规范的可用性,因为语法分析程序被配置成 识别任何顺序的所关心串。标记的顺序可以影响所分配的状态号,但 是那些状态号没有实际意义。g卩,任何关心的串都将造成通过状态表 状态序列前进,以达到所关心的串将被唯一识别的终结状态,但是状 态和状态序列的数量对结果没有影响。从而,"下一个标记"的调用用于通过使整个过程循环直到所有标 记都被考虑为止,来提供一种促使考虑整个语言规范的机制。优选地,通过读取语法输入文件215、识别语法实体如字符/符号的控制字和句 法要求(例如分支语句、字符定界域等)、并通过将唯一标记分配给每 个被识别的实体来标记化它们,以执行该操作。在该过程中也可以考 虑和应用特殊匹配规则或准则(例如指定任意字符的数量)。在图2B 的220集体指出这些功能。该过程将导致如230所示的用于某些语法实体(如代表语言中提 供的命令的控制器)的一组转换图或有限自动机(以下可以通过该术 语来参考这种转换图),而其它语法实体如递归分支语句和定界符符号 将需要附加处理和变换,来获得可以在状态表中表示的字符串。具体 地说,在240,对还没有被变换为字符串的剩余语法规则进行测试, 以确定它们是递归的、还是表示其它性质如"排除"操作。如果需要, 根据该测试,在245简化语法规则,以便将语法规则表示为字符串、 或者将语法规则扩展为扩展语法规则。在这一点上,执行246的用于 复制如循环249所示的步骤的嵌套子过程,以便为递归符号产生一组
新有限自动机。该递归符号变为这组新有限状态机的起始状态,并且 嵌套子过程内遇到的任何附加递归符号将被处理为好像是文字符号。 文字符号是能够直接用作状态转换输入的符号。在返回到230的主处 理步骤之前,为递归符号产生的一组新有限自动机被保存在存储器中, 以便稍后进行处理,并且递归符号被标示为语法规则中的文字符号,使得当处理返回到步骤230时,它中断递归。然后,通过循环到210 来重复过程,如以上提到的循环249所示,直到所有语法实体都被考 虑到,并被处理以形成完整的有限自动机序列或状态转换图为止。现在,在获得被表示为有限自动机序列的完整语言语法之后,处 理继续以'250的起始状态开始。状态转换图由状态节点和转换标签边 缘组成。标签边缘识别两种信息:输入(例如转换条件)和下一状态。 如果相同输入(例如字符)可以造成转换到不同状态的多种转换,则 有限自动机被称为非确定性的。230的变换处理既产生非确定性有限 自动机(NFA)、又产生确定性有限自动机(DFA)。 NFA不适于构造硬 件加速器FSM的状态表。在260执行检査,以挑出NFA。然后,在265 通过使具有确定性质的状态退縮为闭集,来将NFA变换为DFA。从而,形成闭集的这些状态被组合,然后被代表闭集的新状态替 代。然后,在标签边缘进入和离开新状态的情况下,调节状态转换。 适于该变换的合适技术对于编译器设计领域的技术人员是周知的,在 "Principles of Compiler Design (编译器设计原理)"by Aho and Ullman, Addison-Wesley Publishing Co. , 1977, pp. 91-93中,给 出了教科书例子。通过268的循环,对附加状态重复变换。在所有NFA 都被变换为DFA之后,则可以在270优化DFA,并且在280,在把优化 的DFA加载到FSM之前将其变换为状态表数据存储在大容量存储器中, 或者将优化的DFA直接加载到FSM中。既然状态以及语言主要部分的状态转换完成了,则在循环292对 在245识别的每个递归符号都重复将有限自动机变换为状态表的过 程。在290,识别出具有还未被变换为状态表的有限自动机的递归符 号表中的每个递归符号。在295,专门为递归符号初始化新状态表。 该新状态表不一定是物理上分开的表。可以将该新状态表附加到早先
产生的语言主要部分的状态表上。在此为简化描述,在逻辑上把该新 状态表看作是分开的新状态表。在296,把先前为递归符号产生的有限自动机收集在一起,使得再次从步骤260开始执行将有限自动机变 换为状态表的相同过程。重复292的循环,直到所有递归符号都被变 换为状态表为止。上述描述作为本发明一般形式的概要,现在将参考图3至图6来 描述本发明的优选实施例。优选实施例针对于产生针对特殊XMLTM形式 的状态表。然而,应该理解,可以以各种形式、在各种实施例中,以 及为不同目的、如检测潜在安全缺口企图(潜在安全缺口企图可能使 用多种计算机语言中任一种语言的某些命令)或仅仅辨别特殊命令、 句法等,来使用本发明。本领域技术人员应该理解,图3所示的本发明优选实施例的操作 基本上是图2B —般化流程图的扩展。另外,图3的操作被显示为顺序 的、而没有分支操作,这对于快速执行是优选的,同时足以适应XMl/"。 为进一步加速处理,优选地通过在产生表中提供中间和临时存储器来 避免某些分支,使得只有需要进一步处理的语法实体才保持在处理流 中。一旦起动过程,就读取语法文件,并识别和标记化语法实体,如 310所示。然后,将标记化的语法规则存储在产生表中,如320所示。 然后,将语法规则操作尽可能地变换为字符串(字符集),如330所示。如以上提到的,优选地将语法文件表示为形式记号,如 Backus-Naur形式(BNF)或其派生形式,如扩展Backus-Naur形式 (EBNF)。环球网联盟以这种形式来使XM1/m文档化,并且普遍地可以 以电子形式得到它。EBNF记号的概要描述如下:语言由符号组成,该符号具有一组控制符号怎样能够被正确组合 在一起的规则(语法)。每条EBNF语法规则都被规定如下:符号::=表达式语言以起始符号开始,并且用右手边表达式来定义符号,如以上 使用附加符号、描述符、属性和算子的记号所示。在后续规则中定义 新的符号,直到为语言定义了所有符号为止。
可以出现在右手边表达式中的符号描述符、属性和算子被定义如下:#xN其中N是十六进制整数,表达式匹配IS0/IEC 10646中的,当 被解释为无符号二进制数时、其规范(UCS-4)码值具有所示值 的字符。ttxN形式中的前导零数目是无意义的;相应码值中的前导零数目由使用中的字符编码决定,并且不重要。 [a-zA-Z],[涵-麵]和具有所指示的包括范围中的值的任何字符匹配。 [abc], [fe斷N酬和具有所枚举的字符中的值的任何字符匹配。可以在一组括号 中混合枚举和范围。 [、-z], r共xN-ftxN]和具有不在所给出的字符中的值的任何字符匹配。可以在一组 括号中混合枚举和禁值范围。 "string"和双引号内的文字串匹配。 'string'和单引号内的文字串匹配。可以对这些符号进行组合,以匹配如下的更复杂模式,其中A和 B代表简单表达式: (表达式)表达式被处理为单元,并且可以如该列表所述那样组合表达式。 匹配A或什么都不匹配;A是任选的。A B匹配后面接着B的A。该算子具有比"择一 (alternation)"高 的优先权;从而A B I C D和(A B)
( C D)是相同的。A|B匹配A或B,但是不匹配A和B两者;也被称为"择一 (或)"。 A
- B和匹配A但不匹配B的任何串匹配;(从A中排除B)。A+匹配A的一次或多次出现。连接具有比"择一"高的优先权; 从而A十I B+和(A+)
I (B+)是相同的。A氺匹配A的零次或多次出现。连接具有比"择一"高的优先权; 从而A承i B碎口(A—
I (BHc)是相同的。 产生过程中使用的其它记号(或规则组):表示注释。使用以上记号来定义XML? "Name"的例子如下: Namechar: :二Letter|Digit i'. 'l'-'l'」i':' Name:: = (Letter | '」|':') (Namechar)氺假定'Letter'表示字母字符、'Digit'表示数字字符0 — 9,则XML? 'Name'是以字母、下划线或冒号开始、接着是零个或多个'Namechar'的 字符序列。'Namechar'是字母字符、数字字符、句号、破折号、下划 线或冒号。应该理解,上述一些记号指定了 "排除"操作(例如A-B)。在332 辨别这些记号,并在334将这些记号变换为能够被表示为字符集字符 串的简单规则。接着,在340识别递归语法规则。例如,考虑以下两 条XMI/H吾法规则:cp: : = (Name|choice|seq) ('?屮叫屮)?choice:: =' ('S?cp (S?' | 'S?cp) +S?')'"cp"和"choice"两者的扩展相互参考。将符号〃cp"或"choice〃的定 义代入语法规则表达式的右手边将导致无限长度的表达式,这是由于 cp和choice相互参考的语法规则所引起的递归造成的。优选地,在 342,在将语法变换为一组有限自动机之后可以丢弃的临时存储器中, 从起始符号起、从语法产生来扩展这些规则,将此刻的递归符号处理 为特殊文字符号。文字符号是一种被它自己用作状态转换输入的符号。
这将导致整个语言的完整连续语法规则。在此被临时处理为文字符号的递归符号将在344被处理。在344,先前识别的每个递归符号都用作新扩展的起始符号,新 扩展将以递归符号的完整连续语法规则结束。它使得能够专门为每个 递归符号产生一组新有限自动机。稍后,将在过程中根据该步骤所产 生的有限自动机来产生这些递归符号所关联的一组状态。为进一步说 明在将把递归符号变换为状态之后怎样处理递归符号,在此我们将简 要描述加载器(图1中的110)内的功能。加载器根据由硬件加速器 个性编译器(HAPC)产生的状态信息,来填充硬件加速器FSM内的状 态表。除状态识别和状态转换以外,HAPC还识别去往加载器的所有递 归符号,如图6所示。当加载器处理涉及递归符号的状态转换时,加 载器识别出递归符号。加载器不是使FSM立即转到下一状态,而是把 作为该特殊转换动作的命令加载到FSM中,以便将下一状态信息推进 硬件加速器内的堆栈中,并分支转到递归符号语法规则的起始状态。 对于递归符号语法中的每个终结状态,加载器都把作为终结状态动作 的命令加载到FSM中,以便从堆栈中托出状态信息,并转到从堆栈中 托出的下一状态。如果遇到了作为输入被嵌入递归符号语法规则的状 态内的递归符号,则加载器执行和刚才描述的操作相同的操作。作为 取得语法规则中递归定义的结果,硬件加速器内的堆栈使得能够处理 这些嵌套的状态转换。然后,根据扩展语法规则产生NFA,并将所产生的NFA变换为DFA, 如上述355所示。然后,可以优化DFA (360),并将优化的DFA变换 为状态表项目(370),然后存储该状态表项目,如上所述。优选地,把以上操作提供为根据面向对象编程概念的软件对象。 如本技术领域中容易理解的,对象实质上是把它们的操作(与程序整 体功能和对象自身之间交互作用的功能有关的操作)封装和隐藏起来 的较大程序,同时如果需要,对象能够调用其它对象来执行程序。也 可以将对象装配为具有形成图4所示上下文的关系的类。在以下对软 件对象类以及其中的对象的描述中,对象以及所提供的对象功能的描 述足以成功实行本发明,并且对象所封装的对象进一步细节对于本发
明的成功实行是不重要的。如图4所示,根据本发明的HAPC包括主HAPC类和十二个附加类:1. InputMgr2. Token3. RuleMgr4. ExpandedRule5. CharSet6. RecursiveSymbolMgr7. RSEntry8. NFAMgr9. StateMgr10. StateEntry11. TransitionEntry12. DFAMgr以下将按顺序对它们进行讨论。HAPC类包含用于命令从读取输入、执行编译处理、直到写输出的 执行的主程序和方法。I叩utMgr类对象负责对来自语法规则规范文件 的输入进行标记化。Token类对象定义所支持的标记种类,并对访问、 设置和更新标记提供支持。RuleMgr类对象把标记化的语法产生规则 组织在散列表中,以允许软件能够快速访问语法规则。CharSet类对 象对语法规则中的字符集实体提供专门支持。ExpandedRule类对象提 供一种用于从特定标记开始将语法规则改进为连续语言规则的工具。 RecursiveSymbolMgr类对象提供一种用于识别在语法规则定义中递 归使用的符号的仓库。RSEntry类对象定义递归符号仓库项目格式。 NFAMgr类对象对从语法规则创建非确定性有限自动机提供支持。 StateMgr类对象管理一种包含用于创建状态表的状态转换信息的仓 库。StateEntry类对象定义用于状态仓库中项目的格式。 TransitionEntry类对象提供一种用于存储状态转换信息的工具。 DF扁gr类对象对把非确定性有限自动机转换为适于产生状态表的确 定性有限自动机提供支持。HAPCHAPC类包含用于开始整个编译过程的主程序。除主方法以外, HAPC类还包含以下方法: genStateswiteStateTransitions timestampToStringgenStates方法是编译过程的主驱动程序。genStates方法创建其 它类对象、并与所创建的其它类对象对接,以便读取输入语法规范、 将语法规范信息处理为有限状态、并将状态转换信息写出到文件。writeStateTransition方法为HAPC所产生的状态转换规范创建输出流,并将信息写出到输出文件。timestampToString方法是——禾中支持writeStateTransition方 法、以便将ti迈estamp (时间戳)信息格式化为可打印串的实用方法。InputMgr硬件加速器个性编译器输入管理程序I叩utMgr负责读取包含语 言语法规则的输入文件、并将输入规则数据编码为标记。输入文件中 的信息被分解为标记,使得能够通过它们的种类来容易地识别它们。 InputMgr类支持以下构造程序和方法:I叩utMgrnext—tokenstartNewSectionnext—linepaxseCharLiteralI叩utMgr构造程序设置Java缓冲区头,以便读入输入语法规则 文件。输入语法规则文件由以下三个部分组成:用户指令,产生规则, 以及产生规则重载。这三个部分通过始于且只包含两个字符%%的行, 而相互分开。用户指令部分首先出现在文件的开头。所有用户指令关 键字都以"%"为前缀。当前,唯一支持的用户指令是具有一个变元的9&StartSymbol。该变元指定在产生规则部分中定义的语言的起始符号。 符号集内围起的注释:/*和*/可以出现在输入文件中的任何地方。产 生规则部分包含要处理的语言的语法规则。当前,假定用EBNF格式来 表示语法规则。产生规则的所有左手边符号都必须始于第l列。产生 规则可以跨越许多行。所有续行都必须始于第1列的至少空白字符。 产生规则重载部分是最后一部分,并且是任选的部分。产生规则重载 部分允许用户重新规定早先出现在产生规则部分中的某些产生规则。 当所有语法规则都由语言创建者定义时,这允许用户规定所有语法规 则、而不对产生规则部分进行任何改变。如果某些规则具有一些不能 被该软件自动处理的记号,用户可以仅仅利用产生规则重载部分中该 软件所支持的记号,来重新规定那些规则。在调用I叩utMgr构造程序之后,HAPC软件可以开始通过重复调 用next—token方法,每次一个标记从输入文件中提取整个输入语法产 生规则。最初,通过识别从输入文件创建的输入字符流中的定界符字 符,来形成每个标记。然后,将标记分类为不同的标记种类。在Token 部分中进一步详细描述这些标记种类。I叩utMgr透明地处理格式化信 息,并跳过输入文件中的所有注释。对于输入文件中被指定为数值的 字符文字,在对它们进行标记化之前,通过parseCharLiteral方法在内部将它们转换为字符值。startNewSection是一种允许调用程序使InputMgr从"规则部分结束"状态复位、由此允许软件读入附加产生规则来重载某些先前语 法规则规范的简单方法。构造程序、startNewSection禾卩next—token方法是I叩utMgr类 对象的主要外部接口。 InputMgr类中实施的其它私有方法有: next—line禾口 parseCharLiteral。禾厶有方法next—line从输入文件得 到一行字符,并将输入行的剪切型式返回给调用程序。next—line方 法保持输入文件的行计数,并剪掉输入文件开始和结尾处的空格。另 一禾A有方法是parseCharLiteral 。parseCharLiteral方法把被表示为 十六进制数的字符文字转换为内部ASCII字符。这允许以和可打印字 符相同的方式,来在软件内处理不可打印的字符。
TokenToken类提供一种创建和维护标记的工具。通过将输入字符流分 解为标记,软件可以容易地对输入文件中的每个逻辑字符序列进行分 类,并据此处理信息。有7种主要标记种类:控制;符号;算子;属 性;组;杂项(Misc);及未知。控制种类内的最重要标记是文件结束(E0F), EOF向软件指示到 达了输入文件结尾。控制种类中也定义了其它少数标记,然而,它们仅供软件内短暂使用。因为这些少数标记对根据本发明基本原理的本 发明实行不重要,所以在此将不详细描述它们。属于符号种类的标记包括:StrProd (开始产生)、Symbol (正规 语法符号)、RecursiveSymbol、 Literal、 Set禾口 CharSet。 StrProd 标记被创建用于存储新语法规则的名称。Symbol标记表示一般语法规 则符号。RecursiveSymbol是一种在软件确定在语法规则中递归使用 符号之后、从一般Symbol标记重新分类的标记。当对单字符、字符的 数字表示以及字符串进行标记化时,将它们标示为文字。在对字符的 数字表示进行标记化之前,将字符的数字表示转换为正规ASCII字符。通过这样做,用同样方式来处理所有字符。方括号围起的输入串被分 配给Set标记。Set标记可以具有某一离散字符集合、或某一字符范 围。当集合内的值被处理为标示属于该集合的每个单字符的位集合时,Set标记被转换为CharSet。利用语法规则中的"择一"算子关联在一 起的字符也被归合到CharSet中。算子标记是自明(self—explanatory)的。这些算子用于语法规 则中,用来组合和混合语言基本实体,以形成更复杂的实体。属于算 子种类的标记有:0pExpI 0p0r;及0pExclude。在EBNF记号中 0pExpInto是"::="符号。0pExpInto向软件指示,标记序列将紧接着该标记之后,并且它们将形成刚好在该标记之前出现的左手边符号的 扩展规则。OpOr是"或"算子,在EBNF记号中以"| "符号表示。OpExclude 是"排除"算子,在EBNF记号中以"-"符号表示。早先在形式语法 部分中描述了这两个算子。
属性标记用于描述语言特定规则中的符号的允许出现频率。属性禾中类中的标记包括:AttZero0r0 AttZeroOrM及Att0ne0rMany。 AttZero0r0ne在EBNF记号中以"?"字符来表示,并用于指示刚刚在该标记之前出现的符号是任选的符号。在语言内的该特殊上下文中, 那个任选符号可以出现0次,或刚好出现一次。AttZeroOrMany在EBNF 中以"*"字符来表示,并用于指示刚刚在该标记之前出现的符号可以 在当前上下文中出现O次或多次。同时,AttOneOrMany类似地允许先 前标记化的符号出现一次或多次,并且在EBNF中以"+ "字符来表示。组种类(Group category)具有两种定义的标记:LParen和RParen。 LParen表示组开始,而RParen表示组结束。通过左括号和右括号所 围起的表达式,来定义组。组内的整个表达式被处理为单元。组可以 被嵌入另一个组内。杂项种类(Misc category)包含元标记。这些标记包括: BlockS BlockE及RecExp。这些标记被插入内部产生表所存 储的语法规则中,主要供调试之用。作为状态转换产生过程的一部分, 从"语言起始符号"开始成行扩展语法规则,直到所有符号都变为终 结符号或递归符号为止。当然不成行扩展递归符号,这是因为递归扩 展将导致无限循环,如上所述。为帮助调试,将BlockStart和BlockEnd 标记插入在成行扩展期间得到的规则中,以识别扩展的规则内的规则 段的开始和结束。标记包含来自原始输入产生规则的左手边符号名, 以帮助识别。RecExp指示递归表达式。未知标记种类是一种在解析未知标记时、或者在把未知标记作为 错误报告给用户之前,被软件用来临时保存该未知标记的位置容器种 类。Token类提供构造程序和以下方法:TokenequalssetTokengetCategoryisCategoryControli sCat e gorySymbo1isCategoryOperatorisCategoryAttributeisCa/tegoryGroupisCategoryMiscprintToken构造程序和setToken方法允许调用程序从头开始构造标 记。调用程序可以利用getCategory、 equals和各种isCategoryXXXX 方法,来执行标记査询。print方法将向屏幕打印与标记有关的所有 信息。RuleMgrRuleMgr类提供一种在被称为ruleTable的散列表(hash table) 中创建并维护语法产生规则的工具。语法产生规则的右手边表达式被 存储为标记矢量。通过把产生规则的左手边符号用作散列关键字,将 矢量保存到散列表中。RuleMgr构造程序提供一种初始化RuleMgr类的普通机制。 RuleMgr类提供其它方法来帮助构造ruleTable,以便查询ruleTable、执行转换、以及支持调试。这些方法是: paxseEBNFRules checkRule compcmentLength extractCharSet replaceGroupsWithCharsets convertCharSetEnt i t ies findExclusion findAlternation gro叩RightAltParam goupLeftAltParam groupAltParamsprintRule replaceRuleparseEBNFRules是RuleMgr类提供的一种重要方法。 parseEBNFRules允许调用程序从输入语法文件中提取语法规则规范。 parseEBNFRules方法利用传入的I叩utMgr来读取语法文件。然后, parseEBNFRules方法将每条产生规则重新构造为标记矢量。规则被保 存到ruleTable中,并且通过规则的左手边符号来检索每条规则。checkRule方法允许调用程序确定ruleTable中是否已定义规则。 这消除了调用程序直接访问实施ruleTable的散列表的需要。给定语法规则的符号名,co即onentLength方法返回为定义语法 规则所需的标记数。该方法的典型用途是,确定在语法规则表达式中 规则是否只有单一组成部分(例如集合)。extractCharSet方法检查如作为输入的一对索引所指定的语法 产生规则的一段标记矢量,并确定是否可以将表达式子集分解为 CharSet。如果可以将表达式子集变换为CharSet,则extractCharSet 方法将把CharSet返回给调用程序。该方法支持 convertCharSetEntities方法。r印laceGro叩sWithCharsets方法遍历传入的包含标记序列的矢 量,并用字符集(CharSet)代替所有合适的表达式子集。该方法支持 convertCharSetEntities方法。convertCharSetEntities方法遍历整个ruleTable,并将所有集 合和符合条件的表达式子集变换为CharSet。f in犯xclusion方法遍历整个ruleTable,并找到包含"排除"算 子的所有语法产生规则。在完成后,该方法以矢量形式返回那些语法 规则。findAlternation方法遍历整个ruleTable,并找到包含"或"算 子的所有语法产生规则。在完成后,该方法以矢量形式返回那些语法如果还没有用括号来分组子表达式,groupRightAltParam方法在 语法规则中"或"算子的右手边子表达式周围添加一对括号。 如果还没有用括号来分组子表达式,groupLeftAltParam方法在 语法规则中"或"算子的左手边子表达式周围添加一对括号。如果还没有用括号来分组子表达式,gro叩AltParam方法在语法 规则中"或"算子两边的两个子表达式周围添加一对括号。printRule方法通过向屏幕打印用输入左手边符号命名为标记序 列的语法规则,来提供调试支持。r印laceRule方法代替如用输入符号命名的语法规则的标记矢里。ExpandedRuleExpandedRule类的主要用途是,提供一种从起始符号开始扩展语 法规则,并继续成行扩展所有产生规则、直到所有规则符号都被改进 为字符集、字符串文字或递归符号为止的工具。字符集和字符串文字 是能够被进一步改进的终结符号。由于递归符号递归进入相同状态的 性质,递归符号需要堆桟执行其状态转换。单独的特殊过程将被执行, 以处理递归符号。尽管为规则扩展起见,它们也被处理为好像是终结 符号。提供两个构造程序,来扩展传入的RuleMgr对象中包含的语法产 生规则。为提供对多个规则表的独立处理,RuleMgr成为构造程序的 输入变元。构造程序所需的另一个输入变元是"语言起始符号"。这向 构造程序提供扩展规则的起始点。两个构造程序之一还需要布尔标志 变元,以指示是否需要压縮所得到的扩展产生规则。通过避免产生主 要为调试目的而产生的标记、尤其是杂项标记,并积极将规则段变换 为字符集,来执行压縮。这些构造程序是调用程序需要用来扩展语法 规则的主要接口。构造程序将调用内部私有方法来成行扩展产生规则, 导致了覆盖整个语言的单一语法规则。在扩展规则的过程中,这些方 法也将识别递归符号。在扩展工作中,这些递归符号被处理为好像是 终结符号。构造程序也将递归符号保存到RecursiveSymbolMgr所维护 的表中,以便以后进行处理。在最高级产生规则已被扩展之后,调用 程序可以调用"expandAllRS"方法,来扩展被构造程序识别和保存的
所有递归符号。expandAllRS禾卩performSimpleExclude方法是ExpandedRule类 中的所有其它外部接口 。 expandAllRS方法从RecursiveSymbolMgr类 得到所有递归符号的列表,并且每次一个地扩展每个递归符号。类似 于最高级扩展,在扩展过程期间遇到的任何递归符号都将被处理为终 结符号。这些递归符号将造成在状态转换表生成期间产生特殊动作码, 使得该特殊动作码可以请求堆栈支持递归。performSimpleExclude方法遍历扩展的语法规则,以定位"排除 (-)"算子。对于performSimpleExclude方法所遇到的每个"排除"算子,如果确定"排除"操作的操作数是具有字符文字的字符集、或 两个字符集,则performSi卿leExclude方法将立即执行"排除"操作,并用所得到的字符集来代替语法规则中的操作表达式。ExpandedRule中的其余方法是私有方法。这些方法是: initisOnTheStackexpandexpandRSinit方法帮助构造程序初始化类变量,以及起动语法规则成行扩 展处理。isOnTheStack方法向构造程序提供内部支持,以确定语法符号是 否为递归符号。软件通过将每个被扩展的符号推进堆栈中,来记住沿 着扩展链的语法符号。 一旦符号被完全扩展,该符号就从堆栈被托出。 在扩展符号之前,代码检查符号是否已经在堆栈上。如果情况是这样 的,则将符号识别为递归符号。expand方法是一种通过获得它所遇到的每个非终结符号的右手 边表达式、并用表达式来代替符号,来执行语法规则成行扩展的递归 方法。expand方法从起始符号开始,并且继续代替被扩展的规则中的 每个符号,直到所有符号都变为终结符号或递归符号为止。堆栈用于 在isOnTheStack方法中识别所有递归符号,如上所述。expandRS方法和上述expand方法很类似。expandRS方法支持
expandAllRS方法专门为递归符号扩展语法规则。类似于expand方法, 通过复制代表用ruleMgr中的非终结符号命名的产生规则的标记矢 量、并用标记矢量代替被扩展的规则中的符号,来执行扩展。连续重 复该过程,直到被扩展的规则的所有符号都成为终结符号或递归符号 为止。如果在扩展期间遇到递归符号,包括正被扩展的递归规则符号 自己,则该递归符号被处理为好像是终结符号。CharSetCharSet类支持一种用于存储语法产生规则中的表达式中所使用 的有效字符集、或从语法规则中的子表达式得到的有效字符集的设置 工具。最初在产生规则中指定的EBNF形式的字符集被封入一对方括号 内。可以以多种方式表示方括号内的内容:包含所有有效离散字符的字符序列某一字符范围被表示为十六进制值的单字符利用十六进制值表示的字符范围范围记号之外以上的组合CharSet类所提供的方法将处理所有这些指定有效字符集的不同 方式,并将它们转换为相对于调用程序透明的CharSet对象。从 CharSet类可以得到允许调用程序维护CharSet对象的附加方法。可以得到两个CharSet构造程序。无参数的构造程序允许调用程 序设置一种要在稍后添加内容的CharSet对象。另一构造程序允许调 用程序设置CharSet,并通过指定用如上所述的信息格式化的串来初 始化CharSet对象内容。CharSet类中定义的方法有:addremoveislnisEqualprintcharCountiterator有三种重载"add"方法。每种add方法都允许调用程序将更多字 符添加到CharSet对象中。第一种变型允许调用程序利用如上所述的 串格式指定多个字符。第二种add方法允许调用程序向CharSet对象 添加字符。而第三种变型允许调用程序将另一 CharSet对象的内容复 制到当前对象中。有两种重载"remove"方法。第一种型式允许调用程序从当前 CharSet对象中删除字符。第二种型式接收CharSet对象作为输入参 数。它从当前CharSet对象中删除在输入CharSet中发现的所有字符。isln方法允许调用程序査明当前在CharSet对象中是否有特殊字符。isEqual方法把另一个CharSet对象和当前对象进行对比,以确 定它们是否具有相同内容。print方法是为调试目的而设的。print方法向屏幕打印CharSet 对象的当前内容。charCount方法返回CharSet中当前的字符数。iterator方法将迭代程序对象返回给调用程序,允许调用程序每 次一个地访问CharSet内的每个字符。为支持 iterator 方法,CharSet 类也包含内部类 CharSetlterator。 CharSetlterator是Iterator接口的实施。RecursiveSymbolMgrRecursiveSymbolMgr维护散列表,允许调用程序设置表,以包含 本质上递归的产生规则。递归符号表被I叩utMgr、 ExpandedRule和 NFAMgr类使用。RecursiveSymbolMgr类利用构造程序来生成Java散 列表。因为是利用Java散列表来实施表的,所以利用散列表方法来执 行对递归符号表的访问和维护。RecursiveSymbolMgr类不定义任何附 加方法。 RSEntryRSEntry类定义被实施为RecursiveSymbolMgr类中的散列表的递 归符号表的项目结构。RSEntry类的用途是定义数据结构。因而,只 提供构造程序来初始化类变量。数据结构中的所有字段都可以利用它 们的本来的(native)方法来直接访问。NFAMgrNFAMgr类对把扩展的语法产生规则变换为NFA提供支持。NFAMgr 类封装用于存储从扩展的输入语法规则产生的状态转换信息的 StateMgr类。用NFAMgr构造程序来例示StateMgr。除构造程序以外, NFAMgr类也定义以下方法:genStatesgenNFAf indLoopbackState checkAttributeNext eliminateDoubleEpsilons optimizeEpsilonTransitionsgenStates方法允许调用程序起动将扩展的语法规则变换为NFA 的处理。输入扩展语法规则作为标记矢量被传入。然后,genStates 方法调用递归genNFA方法,来将扩展的语法规则分解为可管理的段、 并将这些段转换为状态转换。genNFA方法每次以递归形式处理一段输入扩展语法规则,直到整 个语法规则被变换为完整的NFA为止。通过分组和识别语法规则定义 中使用的普通子表达式,来执行处理,如图5A至5I所示。图5A至51通过各个图中包含的标示显示了几种通常出现的被描 述为以上定义的NFA的语言模式。例如,图5A显示了代表"a"出现 零次或多次的模式"a*";图5B显示了代表"a"出现零次或一次的模 式"a?";等等。相应模式的这种记号和逻辑处理是编译器中用于具体 表示这些模式的众所周知技术。然而,因为一个输入,如s (印silon:
厄普西隆、空输入),可以造成多种状态转换,如图5D中的步骤2),所以最后必须将这种表示改变为DFA,如以上所提到的。优选地,在这一点上不以最优形式执行变换,以便产生普通状态 转换模式,使分组和组合语法规则子表达式的结果变得容易。 一旦生成完整的NFA状态转换序列,就将消除冗余状态,并将组合普通状态。 findLoopbackState方法支持checkAttributeNext方法中的属性 (即*+?)变换处理,以确定当前语法子表达式组的起始状态,使得可以正确地为每一属性添加一个或多个转换弧(transition arcs)。 checkAttributeNext方法查明是否为刚刚被变换为NFA序列的语法规则子表达式定义了属性。如果发现属性,则checkAttributeNext方法将在NFA中添加适当的转换,以满足属性规范。eliminateDoubleEpsilons方法优化NFA转换序列,以消除冗余状态转换。optimizeEpsilonTransitions方法消除完整NFA状态转换序列内 的外来转换。StateMgrStateMgr类支持状态转换表的创建和维护。StateMgr类对NFAMgr 类和DFAMgr类两者提供支持。类构造程序初始化类变量,并为状态转 换表分配内存。另外,构造程序创建将NFA状态(旧状态)映射到DFA 状态(新状态)的散列表,来支持DFA变换。StateMgr类中定义的其 它方法有:assignNewStaterecycleStateaddStateTransitionremoveStateTrans i t iongetA110utTransitionsgetAllInTransitionsgetEpsilonOutTransitionsgetEpsilonlrVTransitionsgetEpsilonArcsgetNonEps ilonOutTrans i t ionsgetNonEpsilonlnTransitionsge tNonEp s i1onArc sallocateEntryrecycleEntryupdateEntrygetEntrylocateStateprintStatisticsprintStateWithExtprintStatelistStatesWithNFAStateSet listStatesWithClosureStateSet peekNextNewStateNum writeXMLX)utputassignNewState方法保留状态表项目,并返回要用于新转换状态 的相应状态号。recycleState方法允许调用程序将状态表项目释放回到池中,以 便重新分配。addStateTransition方法根据输入转换信息,来创建从当前状态 到下一状态的转换弧。addStateTransition方法也创建相对于调用程 序透明的从下一状态返回到当前状态的反向链接。removeStateTransition方法删除两种状态之间的转换弧。 removeStateTransition方法删除关于两种状态之间的相同转换的正 向和反向链接。getA110utTransitions方法把与指定状态相关的所有外出转换 (outbound transition)列表返回给调用程序。getAllInTransitions方法把与指定状态相关的所有进入转换 (inbound transition)列表返回给调用程序。getEpsilonOutTransitions方法把与指定状态相关的、由"空" 输入造成的外出厄普西隆转换(outbound印lison transition)列表 返回给调用程序。getEpsilonlnTransitions方法把与指定状态相关的进入厄普西 隆转换(inbound印silon transition)列表返回给调用程序。getEpsilonArcs方法返回与从传入的转换列表中取出的厄普西隆输入相关的转换列表。该方法主要为支持 getEpsilonOutTransitions和getEpsilonlnTransitions方法而存在。getNonEpsilonOutTransitions方法向调用程序返回把与指定状 态相关的厄普西隆转换排除在外的所有外出转换列表。getNonEpsilonlutTransitions方法向调用程序返回把与指定状 态相关的厄普西隆转换排除在外的所有进入转换列表。getNonEpsilonArcs方法返回与从传入的转换列表中取出的厄普 西隆输入不相关的转换列表。该方法主要为支持 getNonEpsilonOutTransitions和getNonEpsilonlnTransitions方法 而存在。allocateEntry方法从本地控制的状态表项目矢量中分配状态表 项目。recycleEntry方法将状态表项目放到要重新使用的状态表项目 列表上。updateEntry方法将状态项信息复制到StateMgr类对象内部维护 的状态表矢量中的适当位置中。getEntry方法从内部状态表矢量检索与状态相关的信息。locateState方法对DFA变换提供支持。如果存在为匹配输入参 数的一组NFA状态而生成的匹配DFA状态,locateState方法将找到 该匹配DFA状态。printStatistics方法提供调试支持。printStatistics方法向屏 幕打印出与内部受控的状态表相关的使用信息。printStateWithExt方法提供调试支持。printStateWithExt方法 打印与具有为支持DFA变换而维护的附加信息的状态相关的所有信 阜printState方法提供调试支持。printState方法打印与状态相关 的所有信息。listStatesWithNFAStateSet方法返回包括指定NFA状态集的DFA 状态列表。listStatesWithClosureStateSet方法返回作为厄普西隆闭包 (印silon closure)—部分的状态列表。peekNextNewStateNum方法返回要分配给下一新状态的状态号。 writeXMLOutput方法支持以XML格式将状态表写出到输出文件流。StateEntryStateEntry类定义状态表项目的内容。状态项包含三个主要字 段:状态号、外出转换弧列表、以及进入转换弧列表。有两个为支持 DFA变换而定义的附加字段:被替代的NFA状态集,以及空输入转换 闭态集。类构造程序初始化字段,并创建关于外出弧和进入弧的矢量。 StateEntry类支持状态表项目的创建和维护,StateEntry类也定义以 下方法:addToArcaddFromArcremoveToArcrsmovsFromArcdoesTransitionExistremove人rcc ompar eNFAS t at e sprintToArcsprintFromArcsprintArcprintExtension isInNFAStateSetisInClosureStateSetwriteXMLOutputaddToArc方法把当前状态的外出转换项添加到外出转换弧矢量上。addFromArc方法把当前状态的进入转换项添加到进入转换弧矢 量上。removeToArc方法从外出转换弧矢量中删除当前状态的外出转换项。removeFromArc方法从进入转换弧矢量中删除当前状态的进入转 换项。doesTransitionExist方法允许调用程序执行查询,以确定指定 的转换是否和外出转换弧矢量中的任一转换项匹配。removeArc方法支持removeToArc和removeFromArc方法从传入 的转换弧矢量中删除特殊转换项。co即areNFAStates方法比较输入的NFA状态集是否和正被当前 DFA状态代替的NFA状态集匹配。printToArcs方法提供调试支持,以便打印出当前状态的所有外 出转换弧的信息。printFromArcs方法提供调试支持,以便打印出当前状态的所有 进入转换弧的信息。printArc方法支持printToArcs和printFromArcs方法向屏幕打 印出传入的转换弧矢量中存储的所有转换项信息。printExtension方法提供调试支持,以便向屏幕打印出状态项中 维护的DFA变换支持信息。isInNFAStateSet方法提供DFA变换支持,以检査在当前状态项 内维护的NFA状态集中是否已经包括特殊NFA状态。isInClosureStateSet方法提供DFA变换支持,以检查在当前状 态项内维护的空输入闭态集中是否已经包括特殊NFA状态。writeXMLOutput方法支持以XML格式将状态表项目写出到输出文TransitionEntryTransitionEntry类为用于描述从一种状态转到另一种状态的转 换弧的信息,定义数据字段。该信息包括造成状态转换的输入的类型; 造成状态转换的输入的实际值;以及该状态转换所造成的下一状态的 状态号。有六个类构造程序可用于初始化和设置适当数据字段中的输 入数据信息,使得转换项已准备好使用。这些构造程序具有不同的输 入参数来匹配转换输入数据类型。为TransitionEntry类定义了以下 允许调用程序访问和更新数据字段的方法:setSymbolNamesetl叩utsetTransitionsetCheckedFlaggetlnputTypegetCharSetgetl叩utChargetTransitiongetSymbolNamegetCheckedFlagisEqualcompare I叩utcopylnputprintwriteXM!Xharlnput writeXMLOutputclear方法将所有数据字段都设置为一种初始已知状态。 setSymbolName方法将转换输入类型设置为"RELOCATE",以指示 可能需要分支转到另一状态表来处理递归符号。符号名作为输入参数
被传入,并且被保存在符号名字段中以便以后参考。setlnput方法由三种重载方法组成,它们的不同之处仅在于输入 参数。第一种setl叩ut型式不需要任何输入。它把转换项的转换输入 类型设置为空(厄普西隆)输入。第二种型式需要字符输入参数。该 方法将转换项输入类型设置为字符类型,并保存输入字符值。第三种 型式需要CharSet输入参数。它将转换项输入类型设置为CharSet, 并保存CharSet值。setTransition方法允许调用程序指定要转到的转换状态号。 setCheckedFlag方法支持DFA变换。它允许DFA变换处理标明该转换项,使得该项只被处理一次,以便加速变换。getl叩utType方法把该转换项的输入类型返回给调用程序。 getCharSet方法把该转换项的输入CharSet值返回给调用程序。 getlnputChar方法把该转换项的输入字符值返回给调用程序。 getTransition方法返回该转换项中指定的转换状态号。 getSymbolName方法把该项中存储的输入符号值返回给调用程序。getCheckedFlag方法把该项中的CheckedFlag当前标志设置返回 给调用程序。isEqual方法对包括作为输入参数传入的转换项中存储的转换状 态信息的所有值和该转换项中存储的那些值进行比较。如果这些值相 同,贝lj isEqual方法返回真;否则,返回假。comparelnput方法对作为输入参数传入的转换项中存储的输入 类型及输入值和该转换项中存储的输入类型及输入值进行比较。如果 这些值相同,则co即arelnput方法返回真;否则,返回假。copyl叩ut方法允许调用程序把输入类型和输入值信息从作为输 入参数传入的转换项复制到当前项。print方法提供调试支持,以便向屏幕打印出该转换项的内容。writeXMLCharl叩ut方法通过确定输入字符是否为可打印ASCII 字符,来支持writeXMLOutput方法,并以适当的XML格式将输入字符 输出到输出文件流。writeXMLOutput方法支持以XML格式将状态转换信息写出到输出 文件流。DFAMgrDFAMgr类支持将NFA变换为DFA。 DFAMgr类构造程序接收包含要 被变换为DFA的NFA状态表的NFAMgr,作为输入。DFAMgr类构造程序 还需要两个附加参数来指定NFA起始状态和NFA最终状态,使得 DFAMgr能够将它们映射为DFA起始状态和DFA最终状态。构造程序创 建新StateMgr,来维护要产生的新DFA状态。在DFAMgr类对象被构 造之后,调用程序可以调用NFA2DFA方法来执行DFA变换。以下是 DFAMgr所定义的方法列表:createDFAStateNFA2DFAaddEpsilonOutStates eClosuregetNFATransitionSetextractNFAI叩utSetextractNFATargetStateSetfindDFAFirmlStatesprintFinalStateswriteXMLOutputcreateDFAState方法支持NFA2DFA方法执行DFA变换。 createDFAState方法为新DFA状态创建状态表项目。在创建状态项之 后,createDFAState方法用关联的NFA状态集和厄普西隆闭集来初始 化状态项。NFA2DFA方法是用于执行将NFA变换为DFA的主要方法。NFA2DFA 方法使用某些公知编译器构造技术来将NFA变换为DFA。addEpsilonOutStates是一种为支持eClosure方法而存在的递归 方法。addEpsilonOutStates方法以一种递归方式将厄普西隆(空输 入)转换状态添加到来源于被映射到DFA状态的NFA状态集的闭集。
eClosure方法建立并返回与作为输入参数传入的NFA状态集关联的厄普西隆闭态集。getNFATransitionSet方法建立并返回与作为输入参数传入的状态集关联的非厄普西隆转换项集合。extractNFAInputSet方法査看作为输入参数传入的转换项集合, 并把从这些转换项中提取的输入集返回给调用程序。extractNFATargetStateSet方法査看作为第一输入参数传入的 转换项集合,并返回具有与作为该方法第二输入参数传入的转换项中 指定的输入匹配的输入的目标状态集。findDFAFinalStates方法返回被指定为DFA状态表中允许最终状 态的DFA状态集。该DFA状态集是根据作为输入参数传入的原始NFA 最终状态来确定的。printFinalStates方法提供调试支持,以便向屏幕打印出如通过 NFA2DFA方法确定的DFA最终状态集。writeXMLOutput方法支持以XML格式把与DFAMgr创建的DFA相 对应的状态表写出到输出文件流。参考图6,图6显示了被表示为XML文件的状态转换规范输出的 例子。600的文件头识别文件内容、产生文件的日期、以及语法规则 输入源。610的文件下一部分提供某些关于被指定的状态表的身份和 布局的一般信息。在611,它识别该文件中描述的逻辑状态表数。加 载器可以通过把来自后续逻辑状态表的状态附加到第一逻辑状态表 上,并据此调节它们的转换,来把这些逻辑状态表组合成一个单物理 状态表。(例如,如果物理状态表中的当前最后状态是1205。物理状 态表中的下一可用状态项是1206。为了将下一逻辑状态表附加到物理 状态表上,把在逻辑上被标定为状态0的初始状态加载到物理状态表 项1206上。从逻辑状态表的所有状态转换都将被调节1206的偏移量。 因此,如果有到逻辑状态表的状态5的转换,则在物理状态表中该转 换将变为+5)。)在612,它识别逻辑表的名称。递归符号 它们自己用作递归符号逻辑状态表的名称。在613,它提供用于标定 物理状态表列(状态输入)的信息。620的文件下一段提供关于每个
逻辑状态表的详细规范。621的部分提供对该文件所指定的逻辑状态表的完整描述。它通过622的名称来识别表。然后,它在623识别该 状态表的逻辑初始状态。624列出了允许最终状态。625指定了该逻辑 状态表的状态数。626的文件部分识别该逻辑状态表的所有不同状态 及其转换的详细信息。它首先提供如627所示的逻辑状态号。然后, 它在628列出在各种输入的情况下,来源于该状态的所有转换。在629 识别具有到该逻辑状态的转换的状态。对逻辑状态表中的每种状态都 重复626的文件部分。并且,对每一逻辑状态表都重复在621指定的 信息。这向加载器提供用于使硬件加速器个性化的完整信息。由以上描述来看,可以看到,本发明能够优选地以诸如BNF或其 派生物的形式记号,直接自动地从语言或功能规范、为任何计算机语 言或其它目的提供无差错状态表数据。过程可以迅速地执行,并以低 成本产生无差错状态表。从而,本发明允许随意迅速地改变FSM的个 性,以适应或提供不同功能、或反映所关心的不同语言或字符串。虽然用单个优选实施例描述了本发明,但是本领域技术人员应该 认识到,可以在所附权利要求的精神和范围进行修改来实施本发明。
发表评论:
馆藏&20411
TA的最新馆藏

我要回帖

更多关于 青蛙加速器怎么用 的文章

 

随机推荐