人工智能机\n技术领域本发明属于计算机智能领域,具体涉及一种人工智能机 背景技术人工智能,作为一门研究"让机器具有类人思维"的前沿学科,\n自1956年夏季首次提出来后,迄今为止,已经吸引了无数的研究者为之努力 奋斗,在提出了许多重要的相关理论的同时,也建立了一些相应的系统,有 一些系统己逐步进入了一定的实用阶段。比如在专家系统、机器翻译、用于 信息査询的简单的人机对话系统、机器定理证明等等方面都取得了令人瞩目 的成绩。\n但是,目前已经建造的人工智能机虽然在某一方面可以帮助人们解决一\n定的问题,但是离人们期望的智能水平还是差距甚远,还很难能够做到:通\n过与人进行了一段自然的顺畅的"对话"以后,就可以轻松"理解"人所表 达的意愿,继而按照人们的意愿去完成某些相关的任务。如果机器不能做到 完全地很好地"理解"人们所表述的问题,就很难有很好的解决问题的能力。\n研究表明:若是让机器具有比较高级的智能水平,首先必须让机器具有知识; 其次机器必须具有不断的学习能力。只有在基于知识的处理系统之上,人工 智能机才能够有更强的解决问题的能力,从这一点出发,目前的专家系统应 该是基于知识的处理系统的典型代表。虽然专家系统在某一方面具有专家级 的知识,并可以解决一定领域的问题,但是机器并不能做到真正地"理解" 其内部知识库的内容,对知识库的访问只是简单的事实和规则的"匹配"过 程,并且当知识库中规则数量越多,则会导致系统庞大,搜索费时,运行效\n率下降,从而限制了专家系统能力的提高。尽管采取了 "RETE"算法、对知\n识库进行编译、并行处理等各种措施来提高性能,但都不能从根本上解决在 整个知识库进行盲目搜索的问题。\n由此可见,现有的智能系统存在以下影响其整体水平提高的问题:目前 人工智能机大多釆用低级层次的语言表示知识,知识的表示能力有一定的局 限性,很难去比较完整地表示真实世界,由此造成以现有的知识表示形式所 建立起来的知识库,受到只有专业人员才能操作的限制,同时对采用低级层 次的知识表示语言所建立起来的庞大的知识库的也很难维护管理。由于没有 采用很好的知识表示形式,自然也就无从谈起基于高级层次语言表示形式的 理解系统,也就很难有效地解决机器理解语言时各个层次间相互协调的问题。 发明内容针对上述问题,本发明的目的是提供一种基于自然语言理解的人 工智能机,及其实现自然语言理解的方法,该人工智能机能够理解人类用自 然语言表达的问题,且能够通过联系上下文的背景知识和常识知识来进行理 解,从而可以解决比较复杂的问题,具有较高的智能水平。\n为实现此目的,本发明的技术方案如下:\n一种人工智能机实现自然语言理解的方法,其特征在于:它以面向自然语言的汇编语言——ANL语言为基础,以扩展词指令的方式对外部输入的自 然语言描述的文本内容进行理解,扩展词指令是针对词、句子、句式的由若 干个ANL语言指令构成的描述体,工作过程如下:\n(1) 向人工智能机输入用ANL语言描述的有关自然语言的知识,建造ANL 语言描述库,主要包括三个部分,句子的ANL语言描述库、句式的ANL语言 描述库、词的ANL语言描述库;\n(2) 向人工智能机输入用自然语言直接描述的各种内容,建造自然语言 描述库,包括句子的自然语言描述库、句式的自然语言描述库、词的自然语 言描述库三部分,这些库是按知识块形式进行组织的,每个知识块包括头部 标题和体部,体部是由若干个自然语言句子构成的对头部标题的解释;\n(3) 人工智能机对送来的经过分词后的句子暂时先去掉分词分隔符后合 成原句;\n(4) 在句子的ANL语言描述库中,进行查找该合成的原句,如果査找成功, 就把该扩展词指令的ANL内容从句子的ANL语言描述库中调出来,从第一行 开始逐条地执行每条指令,当该描述该扩展词指令的所有相关的ANL指令执 行完毕,那么人工智能机对这个句子的理解过程结束;\n(5) 如果在句子的ANL语言描述库中査找失败,就执行按常规逐个词的理 解方式;首先取出送来的经过分词后的句子中的第一个词,如果该词是数字, 机器能够自动地生成对应的关于数字的ANL语言描述:如果该词不是数字, 则在词的自然语言描述库中进行查找匹配该词,如果查找成功,则直接执行 知识块体部的对该词的自然语言解释的句子,否则,则进入词的ANL语言描 述库中进行查找:\n(6) 如果在词的ANL语言的描述库中査找成功,就把该扩展词指令的ANL 内容从词的ANL描述库中调出来,按指令逐条执行,当该扩展词指令的所有 相关的ANL指令执行完毕,人工智能机对这个句子中的这个词的理解过程结 束;如果查找失败,人工智能机则终止当前处理过程,必须先在词库中建立 对应的词的描述,系统才能处理;\n(7) 按步骤5,依次读取当前句子的下一个词并执行,直至当前句子的所 有的词,包括标点都执行完毕,那么当前的句子按照逐个词的理解结束;下 一步进行句式处理:\n(8) 将上述逐个词理解的句子的每个词的词性所生成的相应的句式,先 在句式的自然语言描述库中进行査找,如果查找成功,那么直接执行知识块 体部中的对该句式的自然语言解释的句子,否则,则在句式的ANL语言描述 库中进行査找该句式,如果查找成功,就把该扩展词指令的ANL语言描述的 内容调出来,按指令逐条执行,当该操作的所有相关的ANL指令执行完毕时, 人工智能机对这个句子的附加的句式的理解过程结束;如果在句式的ANL语 言描述库中查找失败,句式处理过程结束:此时人工智能机对当前句子的理 解结束。\n其中ANL语言的指令如下:DEFINER\n格式:DEFINER自定义寄存器名称(操作数l)内部寄存器号(MEMxx) (操作数2)\n该指令是对自定义名称的寄存器,与内部的寄存器区空间编号建立相应 的映射; TEXT\n格式:TEXT描述性的文字(操作数l)\n该指令是声明这是陈述一个说明性的内容,不执行任何操作,只是便于 理解程序而设置的; IF\n格式:IF直接寻址的内容(操作数l)运算符立即数(操作数2)跳 转-真跳转-假\n该指令是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如 果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果 条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\nIFR\n格式:IFR直接寻址的内容(操作数l)运算符寄存器(操作数2)跳 转-真跳转-假\n该指令是一个对当前直接寻址的内容与寄存器内容进行逻辑判断的指 令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址: 如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\nIFRK\n格式:IFRK寄存器(操作数l)运算符立即数(操作数2)跳转-真 跳转-假\n该指令是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果 条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址; IFRR\n格式:IFRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真 跳转-假\n该指令是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令, 如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址: 如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;\nAND\n格式:AND直接寻址的内容(操作数l)运算符立即数(操作数2) 跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令, 功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的 指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地 址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;A隨\n格式:ANDR直接寻址的内容(操作数l)运算符寄存器(操作数2) 跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令, 功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断 的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的 地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;\nANDRK\n格式:ANDRK寄存器(操作数l)运算符立即数(操作数2)跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令, 功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的 指令,如果条f^为真,就跳转到该指令的跳转-真这个列中的所指明的地址;\n如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址; ANDRR\n格式:ANDRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令, 功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判 断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指 明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址:\nOR\n格式:0R直接寻址的内容(操作数l)运算符立即数(操作数2)跳 转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令, 功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的 指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址; 如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\n格式:ORR直接寻址的内容(操作数l)运算符寄存器(操作数2) 跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令, 功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断 的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地 址,;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\nORRK\n格式:ORRK寄存器(操作数l)运算符立即数(操作数2)跳转-真 跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令, 功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址; 如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址; 0RRR\n格式:ORRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真 跳转一假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令, 功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判 断的指令,如果是条件为真,就跳转到该指令的跳转-真这个列中的所指明的 地址;'如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;\nENDIF\n格式:ENDIF标号(操作数l)\n该指令接着IFxx类指令之后,完成一个IFxx…THEN—xx…ELSE—xx… ENDIF,来表明这样一个IFxx类语句体的结束; END\n格式:END\n说明:该指令是表明对一个描述扩展词指令的ANL语言描述体的结束的 指令,每一个ANL描述体必须有一个END指令:当系统执行到该指令就从当 前的扩展词指令执行中退出;\nLETT\n格式:LET直接寻址的内容(操作数l)运算符立即数(操作数2)\n该指令是一个对当前直接寻址的内容通过立即数进行赋值的指令; LETR\n格式:LETR直接寻址的内容(操作数l)运算符寄存器(操作数2)\n该指令是一个对当前直接寻址的内容通过寄存器进行赋值的指令;\nLETRK\n格式:LETRK寄存器(操作数l)运算符立即数(操作数2)\n该指令是一个对当前寄存器中的内容通过立即数进行赋值的指令;\nLETRR\n格式:LETRR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前寄存器中的内容通过寄存器进行赋值的指令; TRIM—LEFT\n格式:TRIM—LEFT直接寻址的内容(操作数1)运算符立即数(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从左边删除与立即数(操 作数2)相同的部分的操作指令; TRIM一LEFTR\n格式:TRIM_LEFTR直接寻址的内容(操作数l)运算符寄存器(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令; TRIM—LEFTRK\n格式:TRIM—LEFTRK寄存器(操作数1)运算符立即数(操作数2)\n该指令是一个对当前寄存器寻址的内容(字符串)从左边删除与立即数 (操作数2)内容相同的部分的操作指令;\nTRIM—LEFTRR\n格式:TRIM_LEFTRR寄存器(操作数l)运算符寄存器(操作数2)\n该指令是一个对当前的寄存器寻址的内容(字符串)从左边删除与寄存 器(操作数2)中内容相同的部分的操作指令; TRIM—RIGHT\n格式:TRIM_RIGHT直接寻址的内容(操作数1)运算符立即数(操 作数2)\n该指令是一个对当前直接寻址的内容(字符串)从右边删除与立即数(操 作数2)相同的部分的操作指令; TRIM一RIGHTR\n格式:TRIM一RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从右边删除与寄存器(操 作数2)中内容相同的部分的操作指令; TRIJOIGHTRK\n格式:TRIM—RIGHTRK寄存器(操作数l)运算符立即数(操作数2)\n该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与立即数 (操作数2)内容相同的部分的操作指令: TRIM_RIGHTRR\n格式:TRIM_RIGHTRR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与寄存器 (操作数2)中内容相同的部分的操作指令; GET一LEFT\n格^: GET_LEFT直接寻址的内容(操作数1)运算符立即数(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从左边截取到立即数(操 作数2)个字符长度的部分的操作指令; GET一LEFTR\n格^: GET—LEFTR直接寻址的内容(操作数l)运算符寄存器(操作数\n2)\n该指令是一个对当前直接寻址的内容(字符串)从左边截取到寄存器(操 作数2)中数值指定的字符长度的部分的操作指令: GET—LEFTRK\n格^: GET_LEFTRK寄存器(操作数l)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到立即数 (操作数2)中的数值指定的字符长度的部分的操作指令; GET—LEFTRR\n格^: GET—LEFTRR寄存器(操作数l)运箅符寄存器(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到寄存器 (操作数2)中的数值指定的字符长度的部分的操作指令; GET—RIGHT\n格^: GET_RIGHT直接寻址的内容(操作数1)运算符立即数(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从右边截取到立即数(操 作数2)个字符长度的部分的操作指令; GET—RIGHTR\n格^: GET_RIGHTR直接寻址的内容(操作数1)运箅符寄存器(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从右边截取到寄存器(操 作数2)中数值指定的字符长度的部分的操作指令; GET—RIGHTRK\n格^: GET一RIGHTRK寄存器(操作数l)运算符立即数(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到立即数 (操作数2)中的数值指定的字符长度的部分的操作指令; GET_RIGHTRR\n格^: GET_RIGHTRR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到寄存器 (操作数2)中的数值指定的字符长度的部分的操作指令; GOTO\n格式:GOTO标号(操作数l)\n该指令是完成直接地无条件跳转到指定行号的位置开始执行的操作; G0T0R\n格式:G0T0R寄存器(操作数l)\n该指令是完成直接地无条件跳转到寄存器寻址的寄存器的值指定行号的 位置开始执行的操作; CALL\n格式:CALL标号(操作数l)\n该指令是同RETURN指令配合使用的,共同完成直接地无条件调用指定的 以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的 下一个指令的位置;\nRETURN\n格式:RETURN标号(操作数l)\n该指令是同CALL指令配合使用的;共同来完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的 下—个指令的位置:\nPUSH\n格式:PUSH寄存器(操作数l)\n该指令是同POP指令配合使用的:完成将当前寄存器寻址的寄存器的内 容进行压栈操作; POP\n格式:POP寄存器(操作数l)\n该指令是同PUSH指令配合使用的;完成将当前寄存器寻址的寄存器的内\n容进行出栈操作: SETON\n格式:SETON直接寻址的内容(操作数l)\n该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的直接 寻址的内容(操作数l)所指定的位置上的操作指令: SETONR\n格式:SETONR寄存器(操作数l)\n该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的寄存 器寻址的内容(操作数l)所指定的位置上的操作指令; GOBACK 格式:GOBACK\n该指令是将当前的可能已经是访问到上下文的其他某个位置的浮动指针 恢复到当前的扩展词指令的主指针的位置上的操作指令 SEND\n格式:SEND直接寻址的内容(操作数l)运算符寄存器(操作数2) 该指令是一个对当前直接寻址的内容发送到寄存器(操作数2)中的操作 指令;\nSENDPOS\n格式:SENDPOS直接寻址的内容(操作数l)运算符寄存器(操作数2) 该指令是一个将当前的直接寻址的内容所在的位置发送到寄存器(操作 数2)中的操作指令; SENDLENGTH\n格式:SENDLENGTH直接寻址的内容(操作数l)运算符寄存器(操作 数2)\n该指令是一个将当前的直接寻址的内容所占的字符的个数发送到寄存器 (操作数2)中的操作指令; SENDLENGT冊\n格式:SENDLENGT服寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前寄存器的内容所占的字符的个数发送到寄存器(操 作数2)中的操作指令;FIND\n格式:FIND立即数(操作数l)运算符寄存器(操作数2) 该指令是一个根据立即数(操作数1)中的内容对当前的扩展词指令的浮 动指针的直接寻址的内容所在的句子的每一个词进行査找的操作指令; FI,\n格式:FINDR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个根据寄存器(操作数1)中的内容对当前的扩展词指令的浮 动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令; NOP\n格式:NOP\n该指令是一个不执行任何操作的空操作指令,仅是占有一个指令行;该 指令主要用于调试使用,或是对准备取消的指令临时用该指令代替,而不会 改变指令行的数目;\nERROR\n格式:ERROR描述性的文字(操作数l)\n该指令是将根据操作数l内容(描述性的文字),生成一个错误提示窗口, 窗口显示的内容就是该指令后面的操作数1的内容; ILET一RAM\n格式:ILET_RAM直接寻址的内容(操作数l)运算符寄存器(操作数\n2)\n该指令是一个通过寄存器间接寻址的寄存器对当前直接寻址的内容进行 赋值的操作指令; ILET一REG\n格式:ILET_REG寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个通过寄存器间接寻址的寄存器对当前寄存器(操作数1)的 内容进行赋值的操作指令; MAKE_0UTPUT\n格式:MAKE—OUTPUT属性名(操作数l)运算符描述性的文字(操 作数2)\n该指令是一个把该指令后面的操作数2的内容写入到系统的输出窗口的 操作指令;\nMAKE—OUTPUTR\n格式:MAKEJXJTPUTR属性名(操作数l)运算符寄存器(操作数2) 该指令是一个把寄存器(操作数2)的内容写入到系统的输出窗口的操作 指令;\nMAKE一隨\n格式:MAKE—ROM标号(操作数l)\n该指令是完成将当前正在执行的扩展词指令进行悬挂处理,也即将当前 的扩展词指令执行的现场,保存进悬挂工作区缓存中,以便下一次执行处于悬挂中的该扩展词指令; MAKE一ROMR\n格式:MAKE一ROMR标号(操作数l)\n暂时保留的^令,用于以后扩展; MAKE-KNOWS\n格式:MAKEJ(NOWS描述性的文字(操作数l)\n该指令是一个通过该指令后面的立即数的(操作数1)的内容产生一个新\n的自然语言句子的并到知识库中查找匹配并执行的操作指令,• MAKE—KNOWSR\n格式:MAKE一KNOWSR寄存器(操作数l)\n该指令是一个通过该指令后面的寄存器的(操作数1)的内容产生一个新 的自然语言句子的并到知识库中查找匹配并执行的操作指令; READ—RESULT\n格式:READ—RESULT属性名(操作数l)运算符寄存器(操作数2) 该指令是一个把由ANL语言的MAKE—KNOWS或MAKE—KNOWSR指令生成的句 子,在执行完后,生成的在生成句工作^的结果,通g该指令把相应的内容 通过指定的属性名(操作数l)读取送到寄存器(操作数2)的操作指令,是 与MAKE—KNOWS或MAKE_KNOWSR指令配合使用的; THEN—LET\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一 样;\nTHEN一LETR\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是LETR的话,则使用该指令; THEN_LETRK\n仅用SlFxx…THEN…ELSE… 个指令是LETRK的话,则使用该指令; 全一样;\nTHENJJETRR\n仅用SlFxx…THEN…ELSE… 个指令是LETRR的话,则使用该指令; 全一样;\nTHEN—TRIM—LEFT\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM一LEFT的话,则使用该指令;其他的格式和功能都同TRIM—LEFT 指令完全一样;\nTHEN—TRIM—LEFTR\n仅用ilFxx…THEN…ELSE"' ENDIF语句,如果在THEN位置的第一\nENDIF语句,如果在THEN位置的第一 其他的格式和功能都同LETRK指令完\nENDIF语句,如果在THEN位置的第一 其他的格式和功能都同LETRR指令完个指令是TRIM—LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR 指令完全一样;\nTHEN—TRIM—LEFTRK\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM一LEFTRK的话,则使用该指令;其他的格式和功能都同 TRIM—LEFTRK指令完全一样;\nTHENJTRIM一LEFTRR\n仅用^IFxx…THEN'" ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM—LEFTRR的话,则使用该指令;其他的格式和功能都同 TRIM一LEFTRR指令完全一样;\nTHENJTRIM—RIGHT\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM—RIGHT的话,则使用该指令;其他的格式和功能都同TRIM—RIGHT 指令完全一样;\n仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM—RIGHTR的话,则使用该指令;其他的格式和功能都同 TRIM—RIGHTR指令完全一样;\nT腳一TRIM一RIGHTRK\n仅用^IFxx"' THEN…ELSE"' ENDIF语句,如果在THEN位置的第一 个指令是TRINLRIGHTRR的话,则使用该指令;其他的格式和功能都同 TRIM_RIGHTRR指令完全一样:\nTHEN—TRIM—RIGHTRR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM—RIGHTRR的话,则使用该指令;其他的格式和功能都同 TRIM—RIGHTRR指令完全一样:\nTHEN一GET一LEFT\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET—LEFT的话,则使用该指令;其他的格式和功能都同GETJLEFT 指令完全一样;\nTHEN—GET—LEFTR\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET—LEFTR的话,则使用该指令;其他的格式和功能都同GET—LEFTR 指令完全一 样;\nTHEN—GET_LEFTRK\n仅用^IFxx…THEN…ELSE'" ENDIF语句,如果在THEN位置的第一 个指令是GET_LEFTRK的话,则使用该指令;其他的格式和功能都同GET—LEFTRK 指令完全一样;\nTHEN—GET— LEFTRR\n仅用ilFxx… THEN… ELSE… ENDIF语句,如果在THEN位置的第一个指令是GET一LEFTRR的话,则使用该指令:其他的格式和功能都同GET—LEFTRR 指令完全一^;\nTHEN—GET—RIGHT\n仅用^IFxx…THEN…ELSE"' ENDIF语句,如果在THEN位置的第一 个指令是GET—RIGHT的话,则使用该指令;其他的格式和功能都同GET_RIGHT\n指令完全一样;\nTHEN—GET—RIGHTR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET—RIGHTR的话,则使用该指令;其他的格式和功能都同GET—RIGHTR\n指令完全一-;\nTHEN一GET一RIGHTRK\n仅用^IFxx…THEN…ELSE- ENDIF语句,如果在THEN位置的第一 个指令是GET一RIGHTRK的话,则使用该指令;其他的格式和功能都同 GET一RIGHTRK指令完全一样;\nTHEN—GET—RIGHTRR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET—RIGHTRR的话,则使用该指令;其他的格式和功能都同 GET一RIGHTRR ?旨令完全一样;\nTHEN—GOTO\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全\n一样:\nT服N—GOTOR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GOTOR的话,则使用该指令;其他的格式和功能都同G0T0R指令完 全一样;\nTHEN—CALL\n仅用ilFxx…THEN…ELSE"* ENDIF语句,如果在THEN位置的第一 个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全\n一样;\nTHEN—RETURN\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令 完全一样;\nTHEN_PUSH\n仅用ilFxx…THEN… ELSE…ENDIF语句,如果在THEN位置的第一 个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全 一样;\nT服N一P0P仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一 样:\nTHEN_SETON\n仅用^IFxx…THEN…ELSE… ENDIF语句,如果在THEN位置的第一 个指令是SETON的话,则使用该指令:其他的格式和功能都同SET0N指令完 全一样;\nTHEN—SETONR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是SETONR的话,则使用该指令;其他的格式和功能都同SETONR指令 完全一样;\nTHEN一GOBACK\n仅用^IFxx,,, THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GOBACK的话,则使用该指令;其他的格式和功能都同GOBACK指令\n完全一样;\nTHEN一SEND\n仅用^IFxx…THEN… ELSE…ENDIF语句,如果在THEN位置的第一 个指令是SEND的话,则使用该指令;其他的格式和功能都同SEND指令完全 一样:\nTHEN_SENDP0S\n仅用^IFxx…THEN…ELSE*"柳DIF语句,如果在THEN位置的第一 个指令是SENDPOS的话,则使用该指令;其他的格式和功能都同SENDPOS指 令完全一样;\nTHEN一SENDLENGTH\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH 指令完全一样;\nTHEN一SE亂ENGTHR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是SENDLENGT冊的话,则使用该指令:其他的格式和功能都同 SENDLENGTHR指令完全一样;\nTHEN_FIND\n仅用ilFu…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全 —样;\nTHENJFINDR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是FINDR的话,则使用该指令;其他的格式和功能都同FINDR指令完 全—样;THEN—NOP\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是NOP的话,则使用该指令;其他的格式和功能都同NOP指令完全一 样:\nTHEN—ERROR\n仅用^IFxx'" THEN…ELSE"' ENDIF语句,如果在THEN位置的第一 个指令是ERROR的话,则使用该指令;其他的格式和功能都同ERROR指令完\n全一样;\nTHEN_ILET—RAM\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是ILET—RAM的话,则使用该指令;其他的格式和功能都同ILET一RAM\n指令完全一样;\nTHEN—ILET_REG\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是ILET—REG的话,则使用该指令;其他的格式和功能都同ILET一REG 指令完全一样;\nTHEN—MAKE—OUTPUT\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKEJ)UTPUT的话,则使用该指令;其他的格式和功能都同 MAKE—OUTPUT指令完全一样;\nTHEN_MAKE_OUTPUTR\n仅用^EIFxx…THEN…ELSE"* ENDIF语句,如果在THEN位置的第一 个指令是MAKE—OUTPUTR的话,则使用该指令;其他的格式和功能都同 MAKEJ)UTPUTR指令完全一样;\nTHENJ1AKE_,\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKE—ROM的话,则使用该指令;其他的格式和功能都同MAKE—ROM 指令完全一样;\nT旭OAKE一ROMR\n仅用iEIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKE—ROMR的话,则使用该指令;其他的格式和功能都同MAKE—ROMR 指令完全一样;\nTHEN— MAKE—KNOWS\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKE—KNOffS的话,则使用该指令;其他的格式和功能都同MAKE—KNOWS 指令完全一样;\nTHEOAKE一聽WSR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKEJWOWSR的话,则使用该指令;其他的格式和功能都同MAKE—KN0WSR指令完全一样; THEN_READ_RESULT\n仅用^EIFxx"' THEN'" ELSE'" ENDIF语句,如果在THEN位置的第一 个指令是READ一RESULT的话,则使用该指令;其他的格式和功能都同 READ—RESULT ^S令完全一样:\nELSE—LET\n仅用i IFxx…THEN… ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是LET的话,则使用该指令:其他的格式和功能都同LET指令完全一 样;\nELSE_LETR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是LETR的话,则使用该指令;其他的格式和功能都同LETR指令完全\n一样;\nELSE_LETRK\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完 全一样:\nELSEJLETRR\n仅用^IFxx… THEN… ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完 全一样:\nELSE一TRIM一LEFT\n仅用^IFxx…THEN…ELSE"' ENDIF语句,如果在ELSE位置的第一 个指令是TRIM—LEFT的话,则使用该指令;其他的格式和功能都同TRIM—LEFT 指令完全一样;\nELSE—TRIM—LEFTR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIM—LEFTR的话,则使用该指令;其他的格式和功能都同TRIM—LEFTR 指令完全一样:\nELSE_TRIM_LEFTRK\n仅用ilFxx…THEN… 个指令是TRIM一LEFTRK的话 TRIM—LEFTRK指令完全一样:\nELSE_TRIM—LEFTRR\n仅用ilFxx…THEN… 个指令是TRIM一LEFTRR的话 TRIM—LEFTRR ji令完全一样;\nELSE—TRIM_RIGHT\n仅用ilFxx'" THEN…\nELSE…ENDIF语句,如果在ELSE位置的第-则使用该指令;其他的格式和功能都同\nELSE…ENDIF语句,如果在ELSE位置的第-则使用该指令;其他的格式和功能都同\nELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM—RIGHT的话,则使用该指令;其他的格式和功能都同TRINLRIGHT\n指令完全一样;\nELSE一TRIM一RIGHTR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRDLRIGHTR的话,则使用该指令;其他的格式和功能都同 TRIM—RIGHTR ^令完全一样:\nELSE一TRIM一RIGHTRK\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIM—RIGHTRK的话,则使用该指令;其他的格式和功能都同 TRIM_RIGHTRK i^令完全一样;\nELSE一TRIM一RIGHTRR\n仅用^EIFxx…THEN…ELSE," ENDIF语句,如果在ELSE位置的第一 个指令是TRDLRIGHTRR的话,则使用该指令;其他的格式和功能都同 TRIM_RIGHTRR指令完全一样;\nELSE一GET一LEFT\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET一LEFT的话,则使用该指令:其他的格式和功能都同GET—LEFT\n指令完全一样:\nELSE一GET一LEFTR\n仅用^EIFxx'" THEN…ELSE"' ENDIF语句,如果在ELSE位置的第一 个指令是GET一LEFTR的话,则使用该指令;其他的格式和功能都同GET一LEFTR 指令完全一样;\nELSE一GET一LEFTRK\n仅用ilFxx…THEN…ELSE…M)IF语句,如果在ELSE位置的第一 个指令是GETLLEFTRK的话,则使用该指令;其他的格式和功能都同GET_LEFTRK 指令完全一样;\nELSE_GET—LEFTRR\n仅用glFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET丄EFTRR的话,则使用该指令;其他的格式和功能都同GET一LEFTRR 指令完全一样;\nELSE—GET—RIGHT\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET—RIGHT的话,则使用该指令;其他的格式和功能都同GET_RIGHT 指令完全一样:\nELSE一GET一RIGHTR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET—RIGHTR的话,则使用该指令;其他的格式和功能都同GET—RIGHTR 指令完全一样;\nELSE—GET—RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET—RIGHTRK的话,则使用该指令;其他的格式和功能都同 GET-RIGHTRK i&令充全一样;\nELSE_GET—RIGHTRR\n仅用^EIFxx…T旭N…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET一RIGHTRR的话,则使用该指令:其他的格式和功能都同 GET一RIGHTRR i^令完全一样;\nELSE—GOTO\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全 一样;\nELSE—G0T0R\n仅用ilFxx…THEN… ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GOTOR的话,则使用该指令;其他的格式和功能都同G0T0R指令完 全一样;\nELSE_CALL\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全\n一样;\nELSE—RETURN\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令 完全一样;\nELSE_PUSH\n仅用^IFxx… THEN… ELSE… ENDIF语句,如果在ELSE位置的第一\n个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全\n一样;\nELSE一POP\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一 样;\nELSE_SET0N\n仅用^IFxx…THEN…ELSE*" ENDIF语句,如果在ELSE位置的第一 个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完\n全一样;\nELSE—SET0NR\n仅用^IFxx'" THEN*" ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SETONR的话,则使用该指令;其他的格式和功能都同SETONR指令\n完全一样;ELSE—GOBACK\n仅用glFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GOBACK的话,则使用该指令;其他的格式和功能都同GOBACK指令\n完全一样;\nELSE—SEND\n仅用^IFxx…THEN'" ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SEND的话,则使用该指令:其他的格式和功能都同SEND指令完全\n1,、/:\n一样:\nELSE_SENDPOS\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SENDPOS的话,则使用该指令;其他的格式和功能都同SENDPOS指\n令完全一样;\nELSE—SENDLENGTH\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH 指令完全一样;\nEUE一SENDLENGTHR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同 SENDLENGTHR指令完全一样;\nELSE—FIND\n仅用ilFxx…THEN'" ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全\n—样:\nELSE_FINDR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是FINDR的话,则使用该指令;其他的格式和功能都同FINDR指令完\n全一样;\nELSE—NOP\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是NOP的话,则使用该指令:其他的格式和功能都同NOP指令完全一 样;\nELSE—ERROR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是ERROR的话,则使用该指令;其他的格式和功能都同ERROR指令完 全一样;\nELSE_ILET-RAM\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是ILET一RAM的话,则使用该指令;其他的格式和功能都同ILET—RAM指令完全一样;\nELSE—ILET_REG\n仅用ilFM…THEN'" ELSE'" ENDIF语句,如果在ELSE位置的第一 个指令是ILET—REG的话,则使用该指令;其他的格式和功能都同ILET_REG 指令完全一样:\n仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKEJ)UTPUT的话,则使用该指令;其他的格式和功能都同 MAKE—OUTPUT ^令完全一样;\nELSE—MAKE—OUTPUTR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKE—OUTPUTR的话,则使用该指令;其他的格式和功能都同 MAKE—OUTPUTR ^令完全一样;\nELSE—MAKE—ROM\n仅用^IFxx…THEN…ELSE"' ENDIF语句,如果在ELSE位置的第一 个指令是MAKE—ROM的话,则使用该指令;其他的格式和功能都同MAKE—ROM\n指令完全一样;\nELSE—MAKE_ROMR\n仅用ilFxx…THEN… ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是MAKE一ROMR的话,则使用该指令;其他的格式和功能都同MAKE—ROMR\n指令完全一样;\nELSE—MAKE—KNOWS\n仅用^IFxx'" THEN'" ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKEJ(NOWS的话,则使用该指令;其他的格式和功能都同MAKE—KNOWS 指令完全一样;\nELSE—MAKE一KNOWSR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKE—KNOWS的话,则使用该指令;其他的格式和功能都同 MAKE一KNOWSR指令完全一样;\nELSE_READ—RESULT\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是READ—RESULT,则使用该指令;其他的格式和功能都同READ—RESULT 指令完全一样。\n一种人工智能机,其特征在于:它主要包括面向自然语言处理的中央处 理单元NLPU和以此为核心的外围设备,其中包括:\n中央处理单元NLPU以ANL语言为其汇编语言,面向符号处理,支持对 自然语言文本的上下文访问,支持符号地址总线、符号数据总线等多种总线;\n文本输入接口:用于对预先分词处理过的外部输入文本进行接收: 文本输出接口:用于将处理的中间结果及最终结果以文字数据流的格式 向外输出;输入/输出设备扩展接口:用于输入外部的传感信息和驱动外部设备; 自然语言描述的知识库:存储媒介是硬盘,包括分别存储句子的自然语\n言描述库、句式的自然语言描述库、词的自然语言描述库的三块;每块硬盘 分别带有各自的硬件检索机;\n双口RAM作为文本缓存器:用于暂存通过文本输入接口获取的文本数\n据;\n'框架缓存器:是按表格方式分配的RAM存储器,其中的内容包括句子、 词名称、定位序号、相关属性名及属性值的物理空间,中央处理单元NLPU 可直接通过符号地址总线,以字符串形式的序号为地址直接访问该存储器: 框架缓存器的地址译码器:用于中央处理单元NLPU通过直接数据总线\n和读写控制来操作地址译码器的编码,直接将框架式缓存的序号译码成框架 缓存器的物理地址;\n句子缓存器:存放中央处理单元NLPU依据句子指针的序号形式的值从\n框架缓存器中提取的句子,该句子缓存器直接输出到通过硬件检索机连接的 句子的自然语言描述库,和通过地址译码器连接的句子的ANL语言描述库; 句式缓存器:存放中央处理单元NLPU在依据句子指针的序号形式的值\n从框架缓存器中提取的句式,该句式缓存器直接输出到通过硬件检索机连接\n的句式的自然语言描述库,和通过地址译码器连接的句式的ANL语言描述库;\n词缓存器:存放中央处理单元NLPU在依据词指针的序号形式的值从框 架式缓存中提取的词,该词缓存器直接输出到通过硬件检索机连接的词的自 然语言描述库,和通过地址译码器连接的词的ANL语言描述库;\n综合工作区缓存:为RAM存储器,包括当前执行的扩展词指令的工作现 场暂存、悬挂工作区、生成句的工作区;\n生成句工作区缓存:保存生成的句子的内容,包括句子的名称、序号、 生成句的属性名对应的值;\n生成句的地址译码器:在NLPU输出的某一个生成句的字符串形式的序号 时,直接在生成句工作区缓存中定位到该生成句的开始物理地址;\n生成句属性地址产生器:将在生成句工作区缓存中的开始物理地址,与 生成句属性名的编号的相对地址进行相加运算,得到该产生生成句属性名的 绝对物理地址;\n句子的地址译码器:为直接内容寻址存储器CAM,该地址译码器直接将来 自于句子缓冲器中的句子的字符串译码成句子的ANL语言描述库中映射该句 子的开始物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来完 成;\n句式的地址译码器:为直接内容寻址存储器CAM,该地址译码器直接将来 自于句式缓冲器中的句式的字符串译码成在句式的ANL语言描述库中映射该 句式的开始物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来 完成;\n词的地址译码器:为直接内容寻址存储器CAM,该地址译码器直接将来自于词缓冲器中的词的字符串译码成在词的ANL语言描述库中映射该词的开始 物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来完成;\nANL指针地址产生器:将通过句子、句式、词的地址译码器译码后的对于 在ANL语言描述中的句子、句式、词的相应描述库中映射句子、句式、词的 字符串的开始物理地址,与中央处理单元NLPU的ANL行指针数据相加,得到 它们在对应的ANL语言描述库中的ANL指令行的地址;\nANL语言描述库:为可擦写的ROM存储器,主要包括三个部分,句子的 ANL语言描述库、句式的ANL语言描述库、词的ANL语言描述库,直接为中央 处理单元NLPU提供ANL语言指令;\n符号地址总线:直接传输以字符串形式的序号作为地址的数据,通过文 本上下文的位置数据完成对框架缓存器的访问;\n符号数据总线:主要是完成中央处理单元NLPU与框架缓存器,以及还有 其他的外围缓存器件的以符号串形式的数据的信息传递;\n直接地址总线:用于NLPU访问外围的直接以2进制数据为地址的直接地 址寻址的器件;\n直接数据总线:直接传送2进制数据,用于中央处理单元NLPU完成需要 以直接数据进行传递的器件的访问;\nANL指令数据总线:该总线主要是用于中央处理单元NLPU直接从ANL语 言描述库中读取ANL指令,每读一次ANL库的信息,该总线就加载了一条ANL 指令;\nANL行指针数据线:主要用于产生中央处理单元NLPU对ANL语言描述库 进行访问时所需要的ANL指令行的相应物理地址。 其中ANL语言的指令如下: DEFINER\n格式:DEFINER自定义寄存器名称(操作数l)内部寄存器号(MEMxx) (操作数2)\n该指令是对自定义名称的寄存器,与内部的寄存器区空间编号建立相应 的映射: TEXT\n格式:TEXT描述性的文字(操作数l)\n该指令是声明这是陈述一个说明性的内容,不执行任何操作,只是便于 理解程序而设置的; IF\n格式:IF直接寻址的内容(操作数l)运算符立即数(操作数2)跳 转-真跳转-假\n该指令是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如 果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果 条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;IFR\n格式:IFR直接寻址的内容(操作数l)运箅符寄存器(操作数2)跳 转-真跳转-假\n该指令是一个对当前直接寻址的内容与寄存器内容进行逻辑判断的指 令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址:\n如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址; IFRK\n格式:IFRK寄存器(操作数l)运算符立即数(操作数2)跳转-真 跳转-假\n该指令是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果 条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址; IFRR\n格式:IFRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真 跳转-假\n该指令是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令, 如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;\n如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址: AND\n格式:AND直接寻址的内容(操作数l)运算符立即数(操作数2) 跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令, 功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的 指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地 址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\nANDR\n格式:ANDR直接寻址的内容(操作数l)运算符寄存器(操作数2) 跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令, 功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断 的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的 地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址:\nANDRK\n格式:ANDRK寄存器(操作数l)运算符立即数(操作数2)跳转-真跳转-\n该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令, 功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的\n指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址; 如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\n腾RR格式:ANDRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令, 功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判 断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指 明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;\n0R\n格式:OR直接寻址的内容(操作数l)运算符立即数(操作数2)跳 转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令, 功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的 指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址; 如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\n格式:ORR直接寻址的内容(操作数l)运算符寄存器(操作数2)\n跳转-真跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令, 功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断 的指令,如果条件为真,就眺转到该指令的跳转-真这个列中的所指明的地 址,;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\nORRK\n格式:ORRK寄存器(操作数l)运算符立即数(操作数2)跳转-真 跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令, 功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的 指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址: 如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;\nORRR\n格式:ORRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真 跳转-假\n该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令, 功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判 断的指令,如果是条件为真,就跳转到该指令的跳转-真这个列中的所指明的 地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址:\nENDIF\n格式:ENDIF标号(操作数l)\n该指令接着IFxx类指令之后,完成一个IFxx…THEN_xx…ELSE—xx… ENDIF,来表明这样一个IFxx类语句体的结束; END\n格式:END说明:该指令是表明对一个描述扩展词指令的ANL语言描述体的结束的 指令,每一个ANL描述体必须有一个END指令:当系统执行到该指令就从当\n前的扩展词指令执行中退出; LET"\n格式:LET直接寻址的内容(操作数l)运算符立即数(操作数2)\n该指令是一个对当前直接寻址的内容通过立即数进行赋值的指令;\nLETR\n格式:LETR直接寻址的内容(操作数l)运算符寄存器(操作数2) 该指令是一个对当前直接寻址的内容通过寄存器进行赋值的指令; LETRK\n格式:LETRK寄存器(操作数l)运算符立即数(操作数2)\n该指令是一个对当前寄存器中的内容通过立即数进行赋值的指令:\nLETRR\n格式:LETRR寄存器(操作数l)运算符寄存器(操作数2)\n该指令是一个对当前寄存器中的内容通过寄存器进行赋值的指令; TRIM_LEFT\n格式:TRDLLEFT直接寻址的内容(操作数1)运算符立即数(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从左边删除与立即数(操 作数2)相同的部分的操作指令; TRIM—LEFTR\n格式:TRIM_LEFTR直接寻址的内容(操作数l)运算符寄存器(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从左边删除与寄存器(操 作数2)中内容相同的部分的操作指令; TRIM—LEFTRK\n格式:TRIM_LEFTRK寄存器(操作数1)运算符立即数(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从左边删除与立即数 (操作数2)内容相同的部分的操作指令; TRIM一LEFTRR\n格式:TRIMJLEFTRR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前的寄存器寻址的内容(字符串)从左边删除与寄存 器(操作数2)中内容相同的部分的操作指令; TRIM—RIGHT\n格式:TRIM_RIGHT直接寻址的内容(操作数1)运算符立即数(操 作数2)\n该指令是一个对当前直接寻址的内容(字符串)从右边删除与立即数(操 作数2)相同的部分的操作指令; TRIM一RIGHTR格式:TRDLKIGHTR直接寻址的内容(操作数1)运算符寄存器(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从右边删除与寄存器(操 作数2)中内容相同的部分的操作指令; TRIM—RIGHTRK\n格式:TRIM—RIGHTRK寄存器(操作数l)运算符立即数(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与立即数 (操作数2)内容相同的部分的操作指令; TRIM—RIGHTRR\n格式:TRIM-RIGHTRR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与寄存器 (操作数2)中内容相同的部分的操作指令; GET一LEFT\n格^: GET—LEFT直接寻址的内容(操作数1)运算符立即数(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从左边截取到立即数(操\n作数2)个字符长度的部分的操作指令;\nGET—LEFTR\n格^: GET一LEFTR直接寻址的内容(操作数l)运算符寄存器(操作数\n2)\n该指令是一个对当前直接寻址的内容(字符串)从左边截取到寄存器(操 作数2)中数值指定的字符长度的部分的操作指令; GET一LEFTRK\n格^* GET—LEFTRK寄存器(操作数l)运箅符立即数(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到立即数 (操作数2)中的数值指定的字符长度的部分的操作指令; GET—LEFTRR\n格^: GET_LEFTRR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到寄存器 (操作数2)中的数值指定的字符长度的部分的操作指令; GET一RIGHT\n格^: GET_RIGHT直接寻址的内容(操作数1)运算符立即数(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从右边截取到立即数(操 作数2)个字符长度的部分的操作指令; GET_RIGHTR\n格^: GET—RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作 数2)\n该指令是一个对当前直接寻址的内容(字符串)从右边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令; GET一RIGHTRK\n格g: GET_RIGHTRK寄存器(操作数l)运算符立即数(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到立即数 (操作数2)中的数值指定的字符长度的部分的操作指令: GET一RIGHTRR\n格^: GET—RIGHTRR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到寄存器 (操作数2)中的数值指定的字符长度的部分的操作指令: GOTO\n格式:GOTO标号(操作数l)\n该指令是完成直接地无条件跳转到指定行号的位置开始执行的操作: G0T0R\n格式:G0T0R寄存器(操作数l)\n该指令是完成直接地无条件跳转到寄存器寻址的寄存器的值指定行号的 位置开始执行的操作; CALL\n格式s CALL标号(操作数l)\n该指;是同RETURN指令配合使用的,共同完成直接地无条件调用指定的 以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的 下一个指令的位置;\nRETURN\n格式:RETURN标号(操作数l)\n该指令是同CALL指令配合使用的;共同来完成直接地无条件调用指定的 以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的 下一个指令的位置:\nPUSH\n格式:PUSH寄存器(操作数l)\n该指令是同POP指令配合使用的;完成将当前寄存器寻址的寄存器的内\n容进行压栈操作; POP\n格式:POP寄存器(操作数l)\n该指;是同PUSH指令配合使用的;完成将当前寄存器寻址的寄存器的内\n容进行出栈操作: SETON\n格式:SETON直接寻址的内容(操作数l)\n该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的直接 寻址的内容(操作数l)所指定的位置上的操作指令; SETONR格式:SETONR寄存器(操作数l)\n该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的寄存 器寻址的内容(操作数l)所指定的位置上的操作指令: GOBACK 格式:GOBACK\n该指令是将当前的可能已经是访问到上下文的其他某个位置的浮动指针 恢复到当前的扩展词指令的主指针的位置上的操作指令 SEND\n格式:SEND直接寻址的内容(操作数l)运算符寄存器(操作数2) 该指令是一个对当前直接寻址的内容发送到寄存器(操作数2)中的操作 指令;\nSENDPOS\n格式:SENDPOS直接寻址的内容(操作数l)运算符寄存器(操作数2) 该指令是一个将当前的直接寻址的内容所在的位置发送到寄存器(操作 数2)中的操作指令; SENDLENGTH\n格式:SENDLENGTH直接寻址的内容(操作数l)运算符寄存器(操作 数2)\n该指令是一个将当前的直接寻址的内容所占的字符的个数发送到寄存器 (操作数2)中的操作指令; SE亂ENGT服\n格式:SENDLENGTHR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个对当前寄存器的内容所占的字符的个数发送到寄存器(操 作数2)中的操作指令; FIND\n格式:FIND立即数(操作数l)运算符寄存器(操作数2) 该指令是一个根据立即数(操作数1)中的内容对当前的扩展词指令的浮 动指针的直接寻址的内容所在的句子的每一个词进行査找的操作指令; FINDR\n格式:FINDR寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个根据寄存器(操作数1)中的内容对当前的扩展词指令的浮 动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令; NOP\n格式:NOP\n该指令是一个不执行任何操作的空操作指令,仅是占有一个指令行;该 指令主要用于调试使用,或是对准备取消的指令临时用该指令代替,而不会\n改变指令行的数目: ERROR\n格式:ERROR描述性的文字(操作数l)该指令是将根据操作数1内容(描述性的文字),生成一个错误提示窗口,窗口显示的内容就是该指令后面的操作数1的内容; ILET一魏格式:ILET—RAM直接寻址的内容(操作数l)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前直接寻址的内容进行 赋值的操作指令; ILET_REG格式:ILET一REG寄存器(操作数l)运算符寄存器(操作数2) 该指令是一个通过寄存器间接寻址的寄存器对当前寄存器(操作数1)的 内容进行赋值的操作指令; MAKE—OUTPUT格式:MAKE_OUTPUT属性名(操作数l)运算符描述性的文字(操 作数2)该指令是一个把该指令后面的操作数2的内容写入到系统的输出窗口的操作指令;MAKE—OUTPUTR格式:MAKE—OUTPUTR属性名(操作数l)运箅符寄存器(操作数2) 该指令是一个把寄存器(操作数2)的内容写入到系统的输出窗口的操作 指令;MAKE一R0M格式:MAKE—ROM标号(操作数l)该指令是完^将当前正在执行的扩展词指令进行悬挂处理,也即将当前 的扩展词指令执行的现场,保存进悬挂工作区缓存中,以便下一次执行处于 悬挂中的该扩展词指令;MAKE—ROMR格式:MAKE—ROMR标号(操作数l) 暂时保留的i^令,用于以后扩展; MAKE_KNOWS格式:MAKE—KNOWS描述性的文字(操作数l)该指令是一个通过该指令后面的立即数的(操作数1)的内容产生一个新 的自然语言句子的并到知识库中查找匹配并执行的操作指令; MAKE—,WSR格式:MAKE—KNOWSR寄存器(操作数l)该指令是一个通过该指令后面的寄存器的(操作数1)的内容产生一个新 的自然语言句子的并到知识库中查找匹配并执行的操作指令; READ—RESULT格式:READ_RESULT属性名(操作数l)运算符寄存器(操作数2) 该指令是一个把由ANL语言的MAKE—KNOWS或MAKE—KNOWSR指令生成的句子,在执行完后,生成的在生成句工作区的结果,通过该指令把相应的内容通过指定的属性名(操作数l)读取送到寄存器(操作数2)的操作指令,是 与MAKE—KNOWS或MAKE一KNOWSR指令配合使用的: THEN—LET仅用^EIFxx…THEN…ELSE'" ENDIF语句,如果在THEN位置的第一 个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一 样:THEN LETR仅用在IFxx… THEN… ELSE… 个指令是LETR的话,则使用该指令; T冊N一LETRK仅用^EIFxx…THEN…ELSE…个指令是LETRK的话,则使用该指令;全一样;THEN_LETRR仅用i IFxx…THEN… ELSE… 个指令是LETRR的话,则使用该指令; 全一样;THEN— TRIM—LEFT仅用S IPxx…THEN… ELSE…ENDIF语句,如果在THEN位置的第-ENDIF语句,如果在THEN位置的第一 其他的格式和功能都同LETRK指令完ENDIF语句,如果在THEN位置的第一 其他的格式和功能都同LETRR指令完ENDIF语句,如果在THEN位置的第一个指令是TRIM一LEFT的话,则使用该指令;其他的格式和功能都同TRIM—LEFT 指令完全一样;THEN—TRIM—LEFTR仅用^EIFxx…THEN…ELSE"' ENDIF语句,如果在THEN位置的第一 个指令是TRIM—LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR 指令完全一样;THEN_TRIM—LEFTRKELSE…ENDIF语句,如果在THEN位置的第一 则使用该指令;其他的格式和功能都同ELSE…ENDIF语句,如果在THEN位置的第一 则使用该指令:其他的格式和功能都同仅用在IFxx…THEN*" 个指令是TRIM—LEFTRK的话, TRIM_LEFTRK指令完全一样;THEN一TRIM一LEFTRR仅用i IFxx… THEN… 个指令是TRIM一LEFTRR的话, TRIM—LEFTRR指令完全一样;THEN—TRIM—RIGHT仅用^IFxx…THEN"' ELSE"' ENDIF语句,如果在THEN位置的第一 个指令是TRIJLRIGHT的话,则使用该指令;其他的格式和功能都同TRI1LRIGHT 指令完全一样;仅用在IFxx…THEN"' ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM—RIGHTR的话,则使用该指令;其他的格式和功能都同 TRIM一RIGHTR ^令完全一样: f冊N—TRIM—RIGHTRK仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM—RIGHTRR的话,则使用该指令:其他的格式和功能都同 TRIM—RIGHTRR ^t令完全一样;THEN一TRIM一RIGHTRR仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM一RIGHTRR的话,则使用该指令;其他的格式和功能都同 TRIM一RIGHTRR i^令完全一样;THEN一GET一LEFT仅用ilFxx… THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是GET一LEFT的话,则使用该指令;其他的格式和功能都同GET_LEFT 指令完全一样;THEN_GET—LEFTR仅用^IFxx… THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是GET—LEFTR的话,则使用该指令:其他的格式和功能都同GET—LEFTR指令完全一样;THEN_GET—LEFTRK仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET—LEFTRK 的话,则使用该指令;其他的格式和功能都同GET—LEFTRK指令完全一样;THEN一GET一LEFTRR仅用^IFxx… THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是GET一LEFTRR的话,则使用该指令;其他的格式和功能都同GET—LEFTRR 指令完全一样;THEN—GET—RIGHT仅用ilFxx… THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是GETJ?IGHT的话,则使用该指令;其他的格式和功能都同GET—RIGHT 指令完全一样;THEN—GET_RIGHTR仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET—RIGHTR的话,则使用该指令;其他的格式和功能都同GET—RIGHTR 指令完全一样;THEN一GET一RIGHTRK仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET一RIGHTRK的话,则使用该指令:其他的格式和功能都同 GET-RIGHTRK指令完全一样;THEN_GET—RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET一RIGHTRR的话,则使用该指令;其他的格式和功能都同 GET—RIGHTRR i旨令完全一样; THEN一GOTO仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GOTO的话, 则使用该指令;其他的格式和功能都同GOTO指令完全—样;T服N一GOTOR仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GOTOR的话,则使用该指令:其他的格式和功能都同GOTOR指令完全一样;THEN一CALL仅用^EIFxx…THEN*" ELSE…ENDIF语句,如果在THEN位置的第一 个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全—样;THEN—RETURN仅用^IFxx…THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是 RETURN 的话, 则使用该指令;其他的格式和功能都同RETURN指令 完全一样;THEN一PUSH仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;THEN—POP仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一 样;THEN—SETON仅用^EIFxx… THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完 全一样:THEN_SETONR仅用^EIFxx…THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是SETONR的话,则使用该指令;其他的格式和功能都同SETONR指令 完全一样;THEN一GOBACK仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GOBACK的话,则使用该指令:其他的格式和功能都同GOBACK指令 完全一样;THEN—SEND仅用^IFxx… THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是SEND的话,则使用该指令;其他的格式和功能都同SEND指令完全一样:THEN—SENDPOS仅用^IFxx…THEN'" ELSE… ENDIF语句,如果在THEN位置的第一 个指令是SENDPOS的话,则使用该指令:其他的格式和功能都同SENDPOS指令完全一样;THEN—SENDLENGTH仅用ilFxx… THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是SENDLENGTH的话,则使用该指令:其他的格式和功能都同SENDLENGTH 指令完全一样;THEN_SENDLENGTHR仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同 SENDLENGTHR指令完全一样;THEN— FIND仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样:THEN一FINDR仅用^EIFxx," THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是FINDR的话,则使用该指令;其他的格式和功能都同FINDR指令完 全一样;THEN—NOP仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是NOP的话,则使用该指令;其他的格式和功能都同NOP指令完全一 样;THEN—ERROR仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是ERROR的话,则使用该指令:其他的格式和功能都同ERROR指令完 全一样:THEN—ILET一画仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是ILET一RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM 指令完全一样;THEN一ILET一REG仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是ILET—REG的话,则使用该指令;其他的格式和功能都同ILET—REG指令完全一样;\nTHEN—MAKE—OUTPUT\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKE—OUTPUT的话,则使用该指令;其他的格式和功能都同 MAKE—OUTPUT指令完全一样;\nTHEN_MAKE—OUTPUTR\n仅用^IFxx…THEN… ELSE… ENDIF语句,如果在THEN位置的第一 个指令是MAKE—OUTPUTR的话,则使用该指令;其他的格式和功能都同 MAKE—OUTPUTR指令完全一样;\nTHEN一MAKE一ROM\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是猷腿_肪》4的话,则使用该指令:其他的格式和功能都同MAKE_R0M 指令完全一样:\nTHEOAKE一R0MR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是皿£_1«)做的话,则使用该指令;其他的格式和功能都同MAKE—RQMR 指令完全一样:\nTHEN一駆E一KNOWS\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKEJ(NOWS的话,则使用该指令;其他的格式和功能都同MAKE一KNOWS 指令完全一样;\nT冊OAKE一訓WSR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKE一KNOWSR的话,则使用该指令;其他的格式和功能都同 MAKE_KN0WSR指令完全一样;\nTHEN—READ—RESULT\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是READ一RESULT的话,则使用该指令;其他的格式和功能都同 READ—RESULT指令完全一样;\nELSE_LET\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一 样;\nELSE_LETR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是LETR的话,则使用该指令;其他的格式和功能都同LETR指令完全\n一样;\nELSE一LETRK\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完 全一样;\nELSE_LETRR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一\n个指令是LETRR的话,则使用该指令:其他的格式和功能都同LETRR指令完\n全一样;\nELSE—TRIMJLEFT\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIM一LEFT的话,则使用该指令;其他的格式和功能都同TRIM—LEFT\n指令完全一样;\nELSE一TRIM一LEFTR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR 指令完全一样;\nELSE—TRIM_LEFTRK\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRDLLEFTRK的话,则使用该指令:其他的格式和功能都同 TRIM_LEFTRK指令完全一样;\nELSEJTRIM—LEFTRR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIJLLEFTRR的话,则使用该指令;其他的格式和功能都同 TRIM—LEFTRR指令完全一样;\nELSE—TRIM_RIGHT\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIM—RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RTGHT 指令完全一样:\nELSE—TRIM—RIGHTR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIMLRIGHTR的话,则使用该指令;其他的格式和功能都同 TRIM—RIGHTR指令完全一样;\nELSE—TRIM_RIGHTRK\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在F丄SE位置的第一 个指令是TRIM一RIGHTRK的话,则使用该指令;其他的格式和功能都同 TRIM_RIGHTRK指令完全一样;\nELSE—TRIM_RIGHTRR\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRINLRIGHTRR的话,则使用该指令;其他的格式和功能都同 TRIM—RIGHTRR指令完全一样:\nELSE一GET一LEFT仅用在IFxx…THEN"' ELSE"' ENDIF语句,如果在ELSE位置的第一\n个指令是GET_LEFT的话,则使用该指令;其他的格式和功能都同GET—LEFT\n指令完全一样;\nELSE一GET一LEFTR\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是 GET_LEFTR 的话, 则使用该指令:其他的格式和功能都同GET.一LKFTR 指令完全一样;\nELSE一GETJLEFTRK\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第--个指令是GET丄EFTRK的话,则使用该指令;其他的格式和功能都同GET—LEFTRK 指令完全一样;\nELSE—GET_LEFTRR\n仅用^IFxx… THEN… ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET—LEFTRR的话,则使用该指令;其他的格式和功能都同GET—LEFTRR 指令完全一1^:\nELSE_GET—RIGHT\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET—RIGHT的话,则使用该指令;其他的格式和功能都同GET—RIGHT\n指令完全一样;\nELSE—GET—RIGHTR\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET—RIGHTR的话,则使用该指令;其他的格式和功能都同GET—RIGHTR\n指令完全一样-,\nELSE—GET—RIGHTRK\n仅用^IFxx… THEN… ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET一RIGHTRK的话,则使用该指令;其他的格式和功能都同 GET一RIGHTRK指令完全一样:\nELSE一GET一RIGHTRR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET—RIGHTRR的话,则使用该指令:其他的格式和功能都同 GET一RIGHT服指令完全一样;\nELSE—GOTO\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全 一样:\nELSE—GOTOR\n仅用^IFxx…THEN…ELSE"' ENDIF语句,如果在ELSE位置的笫一 个指令是GOTOR的话,则使用该指令:其他的格式和功能都同GOTOR指令完 全一样;ELSE_CALL\n仅用^EIFxx… THEN… ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是CALL的话,则使用该指令:其他的格式和功能都同CAL丄指令完全\n一样;\nELSE—RETURN\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令\n完全一样:\nELSE_PUSH\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是PUSH的话,则使用该指令:其他的格式和功能都同PUSH指令完全\n一样;\nELSE_POP\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一 样:\nELSE_SET0N\n仅用^IFxx…THEN… ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是SETON的话,则使用该指令:其他的格式和功能都同SETON指令完\n全一样;\nELSE_SETONR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SETONR的话,则使用该指令;其他的格式和功能都同SETONR指令\n完全一样:\nELSE一GOBACK\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GOBACK的话,则使用该指令;其他的格式和功能都同GOBACK指令 完全一样-,\nELSE—SEND\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SEND的话,则使用该指令;其他的格式和功能都同SEND指令完全 一样;\nELSE一SENDPOS\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SENDPOS的话,则使用该指令:其他的格式和功能都同SENDP0S指 令完全一样;\nELSE—SENDLENGTH\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;\nELSE一SENDLENGTHR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SENDLENGT服的话,则使用该指令:其他的格式和功能都同 SENDLENGTHR指令完全一样;\nELSE—FIND\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全 一样;\nELSE—FINDR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是FINDR的话,则使用该指令;其他的格式和功能都同F1NDR指令完 全一样:\nELSE—NOP\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是NOP的话,则使用该指令;其他的格式和功能都同NOP指令完全一 样;\nELSE—ERROR\n仅用ilFM…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是ERROR的话,则使用该指令;其他的格式和功能都同ERROR指令完\n全一样;\nELSE—ILET—RAM\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是ILET一RAM的话,则使用该指令:其他的格式和功能都同ILET一RAM\n指令完全一样;\nELSE一ILET一REG\n仅用^IFxx…THEN… ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是ILET—REG的话,则使用该指令:其他的格式和功能都同ILET_REG 指令完全一样:\n仅用在IFxx", THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKE一OUTPUT的话,则使用该指令;其他的格式和功能都同 MAKE—OUTPUT指令完全一样:\nELSE_MAKE_OUTPUTR\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKEJ)UTPUTR的话,则使用该指令:其他的格式和功能都同 MAKE—OUTPUTR指令完全一样;\nELSE—MAKE—ROM\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKE—ROM的话,则使用该指令:其他的格式和功能都同MAKE—ROM指令完全一样;\nELSE—MAKE一ROMR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE一ROMR 指令完全一样;\nELSE— MAKE—KNOWS\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKE—KNOWS的话,则使用该指令;其他的格式和功能都同MAKE—KNOWS 指令完全一样;\nELSE—MAKE—KNOWSR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKE—KNOWS的话,则使用该指令;其他的格式和功能都同 MAKEJCNOWSR指令完全一样:\nELSE一READ一RESULT\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是READ一RESULT,则使用该指令:其他的格式和功能都同READ—RESULT 指令完全一样。\n所述的面向自然语言处理的中央处理单元NLPU,主要完成自然语言的符 号处理,其内部包括:\nANL指令数据的缓存器:存放NLPU通过ANL指令数据总线从外部的ANL 语言描述库读取的ANL语言指令数据;\n指令译码器:对通过ANL指令数据总线送到指令码缓冲器中的指令码进 行译码,并直接控制整个NLPU的所有与ANL指令执行过程相关的工作部件;\n时序控制单元:以外部的时钟脉冲为驱动,为指令译码器的操作和其它 的在操作过程中需要时序的控制部件提供操作时序;\n算术运算器:主要完成算术运算操作,包括加、减、乘、除,以及与、 或、非等的逻辑基本运算;\n字符运算器:用来完成字符运算的各种操作,包括比较字符串判断,字 符串的加操作、提取指定个数的字符串、清除字符串某一端的指定个数的字 符、计算字符串长度等;\n运算操作数寄存器1:用于暂时存放进行数值或是符号运算的第一个运算 操作数:\n运k操作数寄存器2:用于暂时存放进行数值或是符号运算的第二个运算 操作数;\n结果寄存器:用于暂时存放进行数值或是符号运算的结果,以及暂存其 ^!l的在处理过程中的信息;\n字符-数值变换器1:在进行算术运算时,对存放在运箅操作数寄存器1 中的字符型数据转换为数值型的数据:\n字符-数值变换器2:在进行算术运算时,对存放在运算操作数寄存器2中的字符型数据转换为数值型的数据;\n数值-字符变换器:在进行算术运算时,对运算后的数值型数据再转换为\n字符型的数据;\n行号编解码器:在对产生悬挂或者产生生成句的扩展词指令所保护的现 场进行恢复时,将保护的扩展词指令的指针所在行的符号型的数据解码为数 值型的数据,并加载到ANL指令行指针产生器中;\n多路选择器l:该多路选择器受指令译码器控制,对送到NLPU的字符型 数据线上的数据,选择算术运算器或字符运算器的结果进行输出;\n句子指针产生器:根据当前句的指针值,生成下一个句子指针的值;\n句子指针缓存器:该缓存器直接存放由句子指针产生器生成的有效的句 子指针值:\n词指针产生器:根据当前的词指针的值,生成下一个词的指针的值; 词指针缓存器:该缓存器直接存放由词指针产生器所生成的有效的词指 针值;\n目标译码器:对需要访问框架缓存器的ANL指令中的操作数1进行译码, 并根据上下文访问的句位置、词位置以及属性名所合成的内容产生符号地址 总线的地址值;\n主指针:是目标译码器中的一个缓存单元,保存当前所处理的扩展词指 令的序号:\n浮动指针:是目标译码器中的一个缓存单元,动态地保存当前所处理的 扩展词指令的以主指针为基础的序号;\n直接地址总线缓存器:对寄存器寻址操作时,直接输出指定寄存器编号 的直接地址,及存放其他的需要进行直接地址驱动操作的地址数据;\n直接数据总线缓存器:暂时存放2进制数据:\n符号地址总线缓存器:存放NLPU在以符号型数据作为地址进行外部访问 的符号地址信息:\n符号数据总线缓存器:主要是存放NLPU在以符号型数据作为数据进行外 部访问的符号数据信息;\n输出文本接口:在处理过程中的把需要产生输出结果的信息通过该接口 输出:\n外部通讯接口:用于与外部的传感器和驱动器的信息传递,及输出人工 智能机的运行信息;\nANL指令行指针产生器:自动依次加1产生执行ANL指令时的行地址信息, 其内容是数值的地址:\n主流程/悬挂流程控制部件:用于切换主流程和悬挂流程的扩展词指令的 执行;\nk本转写器:用于将人工智能机的文本缓存中的内容按照句子序号、词 的序号和框架缓存器的格式写入到框架缓存器中,及对地址译码器的编码工 作;句子提取器:根据当前的句子指针产生器中的指针值,从框架缓存器中 提取该指针指定的句子;\n句式提取器:根据当前的句子指针产生器中的指针值,从框架缓存器中 提取该指针指定的句式;\n词提取器:根据当前的词指针产生器中的指针值,从框架缓存器中提収 该指针指定的词;\n地址译码的编码写入器:对不同的句子序号,不同的词序号及其在框架 缓存器或生成句工作区缓存的物理地址编码操作后写入到地址译码器中:\n当前流程状态标志:表明当前的处理状态是处在主执行流程还是悬挂执 行流程;\n当前内容标志:表明当前处理的扩展词指令ANL描述体的对象是句子、 句式或者词;\n生成句标志:表明当前执行的生成句是由句子、句式、或是词引导的; 当前扩展词指令的工作区地址指针:表明主流程中的当前扩展词指令在\n综合工作区的物理地址,及执行悬挂流程中产生的生成句的扩展词指令在综\n合工作区的物理地址;\n扩展词指令的工作区长度参数量单元:该单元中保存每一个扩展词指令\n在综合工作区中所占的物理空间长度:\n词指令的工作区长度参数量单元的内容相加,得到在综合工作区中当前扩展 词指令的工作区指针的下一个扩展词指令的工作区指针;\n加法器2:将当前扩展词指令工作区地址指针值与来自不同偏移量单元的 值相加,得到寄存器在综合工作区中的绝对物理地址的值;\nIF偏移量单元:保存扩展词指令的在综合工作区中所占的物理空间中的 IF堆栈区最开始地址相对于该扩展词指令的最开始物理地址的偏移量;\nCALL偏移量单元:保存扩展词指令的在综合工作区中所占的物理空间中 的CALL堆栈区最开始地址相对于该扩展词指令的最开始物理地址的偏移量;\nPUSH偏移量单元:保存扩展词指令的在综合工作区中所占的物理空间中 的PUSH堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移 量;\n'自定义寄存器偏移量单元:用于保存扩展词指令的在综合工作区中所占 的物理空间中自定义寄存器区的最开始地址相对于该扩展词指令的最开始的 物理地址的偏移量:\n通用寄存器偏移量单元:保存扩展词指令在综合工作区中所占的物理空 间中通用寄存器区的最开始地址相对于该扩展词指令的最开始的物理地址的 偏移量;\nIF调转地址堆栈指针产生器:产生当前扩展词指令执行中所需的IF堆 栈区的指针值;\nCALL调转地址堆栈指针产生器:产生当前扩展词指令执行中所需的C:ALL堆找区的指针值;\nPUSH调转地址堆栈指针产生器:产生当前扩展词指令执行中所需的PUSH\n堆栈区的指针值;\n零数据产生器:对加法器2上的来自堆栈指针的数据赋值为零: 产生悬挂的扩展词指令地址堆栈区:该堆栈区为NLPU内部的一个支持堆\n栈操作的存储区,保存产生悬挂的扩展词指令在综合工作区缓存中的物理地\n址;\n产生悬挂的扩展词指令地址堆栈指针:该堆栈指针用来指明产生悬挂的 扩展词指令地址堆栈区中当前的最后进入堆栈保存的那个扩展词指令的地址 所在单元的位置;\n产生悬挂的扩展词指令计数器:记录在整个处理过程中产生的悬挂的扩 展词指令的个数;\n比较器:该比较器用于在执行悬挂工作区的内容时,判断产生悬挂的扩 展词指令地址堆栈指针通过不断加1的值,是否等于产生悬挂的扩展词指令 计数器中的值;\n产生生成句的扩展词指令地址堆栈区:为NLPU内部支持堆栈操作的存储 区域,用于保存出现生成句的扩展词指令在综合工作区缓存中的物理地址:\n产生生成句的扩展词指令地址堆栈指针:指明产生生成句的扩展词指令地 址堆栈区中当前的最后进入堆栈保存的那个扩展词指令的地址所在单元的位 置,及最后堆栈弹出的那个扩展词指令的地址所在单元的下一个单元位置: 根句比较器:用于判断当前的外部输入文本的内容是否全部执行完毕: 当前内容标志缓存器:用于进入悬挂执行流程时保存当前句子、句式、 词的内容标志;\n悬挂消除控制部件:用于在执行悬挂流程中向对应地址单元写入清除标\n采用上述技术方案后,由于本发明的人工智能机的知识库中的知识是直 接用自然语言来进行描述的,并通过该人工智能机中的自然语言理解系统来 "理解"知识库中各种知识,因而机器能够在不断地"学习"过程中,逐渐 丰富机器自身知识库中的内容,从而使机器解决问题的能力得到增强,并且 可以在知识库的建造、使用、扩展和修改上,做到简便易行,人人可为。 附图说明\n图1是本发明的硬件结构示意图。\n图2是本发明中中央处理单元NLPU的结构示意图。\n图3是本发明工作的总体流程图。\n图4是本发明中知识块的结构示意图。\n图5是本发明中自然语言理解系统的内部框图。\n图6是本发明中框架式缓存的内部结构图。\n图7是本发明中属性名的动态扩展示意图。\n图8—图17是本发明中执行一个句子时综合工作区缓存的状态示意图。图18是本发明中扩展词指令的ANL语言描述体的内部结构图。\n图19是本发明中悬挂工作区的内容执行流程图。\n图20是本发明中一个句子的带有悬挂工作区的执行的流程图。\n具体实施方式本发明的基于自然语言理解的人工智能机从原理上讲可分为\n两大部分:自然语言描述的知识库和自然语言理解系统。\n1、 自然语言描述的知识库,这里简称知识库,该知识库包括词的自然语 言描述库、句子的自然语言描述库、句式的自然语言描述库三部分。其内容 包括一定的关于人类语言的知识和世界知识,世界知识又包括常识知识和专 业知识。该知识库中的知识是按"知识块"的形式来组织的,每个知识块中 都包括"头部"和"体部"两个部分。如图4所示,箭头指向为知识块的头 部,指向为知识块的体部。"头部"也即说明该知识块的标题,可以是陈 述句,比如"文稿检査的步骤";也可以是疑问句,比如"什么是鲤鱼?"或 是其他类型的句子,还可以是高级的词汇比如"意识","哲学"等;还可以 是用自然语言直接解释的句式,比如"名+动+名+数+量+吗+?"等。"体部" 则是用自然语言直接描述的具体解决"头部"所描述的问题的全过程。对于 汉语而言,体部内容中的句子是以"人工"分词后的结果填写的,比如\n"AABBCC。"写成"AA朋CC 。",由于目前机器"分词"的准确性还不能 达到百分之百,若是句子的某个分词结果不正确,就会导致机器在"理解" 知识块体部的自然语言描述的句子的过程出错,所以,在建造知识库时,需 人为地将句子进行分词,比如用空格或其他的分隔符来标示,以保证机器"理 解"知识库中的内容时,不会因为分词不准确而出现错误,同时也由于机器 在"理解"知识库中的内容时没有机器分词这个过程,因此,也避免了在分 词处理时造成的时间消耗,提高了运行效率。\n句子的自然语言描述库,主要是以描述相关问题的句子或是能够再"分 解"为低一层的若干个自然语言句子解释的为知识库块头部标题的句子,体 部则是直接用自然语言对该头部标题句子进行陈述、解释、回答或过程处理 的若千个自然语言句子构成的描述体。词的自然语言描述库,主要用于以高 级词汇为头部标题,体部则是直接用自然语言对该头部标题词汇进行解释、 说明的若千个自然语言句子构成的描述体。句式的自然语言描述库,主要用 于以构成句子的句式(句型)为头部标题,体部则是直接用自然语言对该标 题句式进行分析处理的若千个自然语言句子构成的描述体。\n2、 自然语言理解系统,用来完成对自然语言描述的句子、篇章的内容进 行"理解"。自然语言理解系统在理解过程中会适当地"调用"自然语言描述 的知识库中一些相应的知识,来保证"理解"过程的正确性。自然语言理解 系统所"理解"的自然语言既包括通过外部接口输入的文本句子,也包括自 身知识库中的自然语言句子。该自然语言理解系统是整个人工智能机的核心。\n只有自然语言才是最好的知识表示方法,因为人们对于知识的获取,很 多都是通过语言文字的形式来实现的。自然语言本身是分层次的,从低级到 高级逐渐递增,层层相套,高级层次总是包含着低级层次的语言。机器的自然语言"理解"必须从低级层次的自然语言开始。出于不同的目的考虑,对 自然语言层次的划分也可能是多种多样的,这里只是从为了实现机器理解自 然语言而如何釆用自然语言进行知识表示这一点来出发,划分为两个层次: 高级层次,低级层次。高级层次的自然语言可通过逐层"降级"到低级层次 的自然语言。实际中的自然语言的使用是这两个层次的各种混合,并没有明 显的界限。这里定义低级层次是基本层次,除了基本层次之外的层次都一概 称为髙级层次,而不再对高级层次再进一步区分为一级高层,二级高层,三 级高层,,,…等等,尽管人们在使用中是存在这种蕴含关系,这里只是为了便 于说明,而统称为高级层次。低级层次的自然语言的"理解"是通过执行"扩 展词指令"来实现。扩展词指令包含词、句子、句式;扩展词指令的内容是 对词、句子、句式进行解释的一些指令微操作。\n自然语言的句子可以说都是由不同的词组成的,关于词的定义也有不同 的说法,对于汉语来说,这里基本上是按常规词典的方式来区分,有的一个 字是一个词,比如"打"、"放";有的是两个字词,比如"蕃薇"、"葡萄", 还有四个字的词,比如"成吉思汗"、"孜孜不倦"(成语);以及更多字的词 的,比如"埃塞俄比亚"等。这里词的定义是按照在机器上能处理的方式来 进行划分的。\n"词指令" 一词是由计算机术语"指令"引申而来的。意思是指机器理 解一个自然语言的句子,就象计算机执行一小段的程序一样。"词指令"的 外部表现也就是一个词的字符串,但执行时却能够完成"理解"自然语言的 句子的某些相关操作。机器对于一个句子的理解过程基本上就是执行一遍该 句子的所有"词指令"的过程。\n大多数句子都可以"分解"为词指令来执行,但是有些句子本身属特例 情况,若是将该句子通过"分解"为词指令来执行的话,就有可能出现错误, 或者是甚为麻烦,对于这样的句子是不适合按常规的词指令方式来执行的。 这样的句子要么是属于浑然一体的句子,应该作为一个固定特殊句子来处理, 或者说相当于一个宏"词指令";要么本身并不属于特殊句子,并且也可以按 词指令"分解"来执行,但是却不能很好地完成理解过程。比如"河里有4 条小船,",因为有一个"有"字,那么,就可以通过按"xx有xx"进行"分 解"词指令处理,但是对于像"河里4条小船"这样的句子,因为没有"有", 若按照逐个执行词指令的方式,肯定会造成信息不全,甚至会出现错误。所 以这里引入了 "句式"的概念,先将当前的句子"分解"为词指令的方式, 并逐个执行这些词指令,然后再在执行完这个句子的最后一个词指令后,根 据这些词指令执行的词性结果生成对应的"句式",在句式库中进行匹配,比 如当"河里4条小船,"这个句子执行完最后一个词指令","后,生成的句 式就是"名+介+数+量+名+ ,",这里也假设在句式库中匹配到了该句式,该 句式的具体内容,同"河里有4条小船,"的"有"的功能是相近的。这样, 先把句子"分解"为词指令执行,然后再将该句子的句式在句式库中进行匹 配并执行的方式,既能做到比较合理地分配任务,且又不会遗漏什么。所以,句式匹配处理的过程是句子"分解"为词指令执行的有力补充,也避免了单 独由词指令来进行处理的不方便和很难处理的问题。对于上述的特殊句和句 式的情况,都是在词指令的基础上进行的扩展,它们与词指令一起统称为"扩 展词指令"。\n自然语言理解系统执行时是按照"逐句"或"逐词"这样的一个顺序来 执行的,每个扩展词指令执行时都有一个对应的指针位置,以表明当前的扩 展词指令是属于哪一层句子,哪一个句子,第几个词这样的信息,这是全程 执行过程中唯一定位的,是通过"序号"来确定的。这种标明当前扩展词指 令所在位置的指针称之为该扩展词指令的"主指针"。当执行该扩展词指令的 某些微操作时,该扩展词指令的某些访问可能又会"跑"到别的其他位置, 这种随时变动的指针就称之为"浮动指针"。扩展词指令也正是通过浮动指针 来完成上下文的信息的访问的,当系统刚执行到某一个扩展词指令时,浮动 指针的值先初始化为主指针的值,当在以后执行该扩展词指令的微操作时, 可能随着不同的指令,浮动指针值会发生改变,并且执行过程中,也可以重 新再回到自己的起先位置,也即其值等于该扩展词指令的主指针的值。\n以上叙述了通过扩展词指令的模式来理解自然语言的句子,扩展词指令 的运行依赖于相应的运行环境,主要是依据框架式的数据缓存结构来实现。\n如图6所示,框架式知识表示是人工智能领域中知识表示形式的一种。 —般具有对象、属性、值这基本三元组。这里延用对象、属性、值的概念, 用来表示人工智能机工作过程中相关数据的状态。整个人工智能机工作时, 除了一些状态数据采用堆栈形式保存的外,另外大部分的中间数据都是在这 个"内存"中存放,所以称之为"框架缓存"。框架缓存中存放的属性的值是 由"值\地址码"两部分构成,可以有4种情况,包括"空值(没有值也没 有地址码)","只有值而没有地址码","没有值但却有地址码","既\n有值又有地址码"o\n(1) 框架缓存中的对象主要是指在对象的"名称"那一列所能列出的内 容,包括词,标点。\n(2) 框架缓存中的"序号"是表示对象所在的句子所在的层号、句子号 和词号。比如对象AOl (词)的序号是"1/1",表明是第一句子中的第一个 词,对象B03 (词)的序号是"2/3",表明是第二个句子中的第三个词。其 他序号表明的内容,依此类推。\n(3) 框架缓存中的对象的属性名分为基本属性名和扩展属性名两种。基 本属性名是每次运行都存在的那些常用的属性名,比如像"名称"、"数量"、\n"颜色"……等等:除了基本属性名之外的属性名都称之为扩展属性名。\n(4) 框架表格的行数:\n框架缓存表格中的行数是动态增加的,不同的输入文本的句子内容和运 行中不同的知识库中的句子的内容,就会占有不同的行数,比如句子数,句 子中包含的词的个数。同时不同的处理,也会使框架缓存器的表格中的行数 发生变化,比如知识库中的知识块中体部句子的复杂嵌套执行等。(5)框架缓存中的"序号"能够使每一个对象都有唯一的地址码,也是 对象的"户口"。该序号使对象在整个处理过程中都能找到自己的"家",也 是机器能够有条不紊地运行的基本保障比如"他\3/1"表示的三句的第一个 词的"他","他\5/3"表示第五句的第三个词的"他"等等。"唯一地址 码"能够使机器做到在上下文的"哪一句,哪一词"的位置上进行"寻址", 当然以后还可以扩展到"哪一章,哪一段"的寻址能力。扩展词指令的微操作通过执行ANL语言描述库中的描述体来实现的,ANL 语言描述库是自然语言理解系统中的一个重要组成部分,主要包括三个用ANL 语言描述库。分别是词的ANL语言描述库、句子的ANL语言描述库、句式的 ANL语言描述库。词的ANL语言描述库:自然语言中的大部分基础词汇都是在此词库中用 ANL语言进行描述的,另外一些高级词汇的描述则是在词的自然语言描述库 中,在知识块的体部通过自然语言句子来描述的。句子的ANL语言描述库:有些不能通过"分解"为词来执行的句子,而 是整个句子属于需要直接用ANL语言来描述的那些特例句子,凡是这样的特 殊句子都是在句子的ANL语言描述库中进行描述的。句式的ANL语言描述库:关于构成自然语言句子的各种句式(句型),比 如"名+介+有+名+ ,"等,都是在句式的ANL语言描述库中通过ANL语言来 描述的。扩展词指令的微操作是在相应环境中,通过执行"ANL语言"来实现底层 级操作的。自然语言理解系统中执行每一个扩展词指令的操作是通过执行该 扩展词指令对应的用ANL语言描述的描述体来进行的。ANL语言,是面向自然语言的汇编语言(Assembly for Natural Language)的縮写词,该语言是为机器理解自然语言而专门创建的一种语言,ANL语言 和相关的运行环境是完成机器理解自然语言的根本基础。ANL语言的格式为:名称 行号 标号 指令码 操作数l 运算符 操作数2 "争其中"••••••"部分为指令操作的附加项,除了注释外,其余的则为编译后自动生成的部分。ANL语言的特点,(1)、通过ANL指令中的"操作数1"内容的不同,可以具有不同的访问 能力。比如,可以在各个词之间进行访问,像"该句.该句.上一词.名称"、 该句.该句.下一词.数量"、该句.该句.最后词.名称"等:可以在各个句子之间进行相关访问,像"该句.上一句.最前词.名称"、"该句.下一句.最后词.名称"、"该层.最后句.最前词.名称"等等;还可以在不同的嵌套层之间(包 括高级层次句,一〉次高级层次句…-〉基本层次句-〉词指令-〉ANL指令)进行访问,像"上一层.最前句.最前词.名称"等等。下面简单介绍几个比较重要的指令,SET0N, SETONR, GOBACK; SET0N指令是以当前扩展词指令的浮动指针位置为基础,根据的当前直接寻址的内容(操作数1)而进行新的访问位置的设定。比如"SETON该句. 该句.最后词.名称"-一直接就可以将当前的正在执行的扩展词指令的浮动指 针的位置,暂时设定到该句子的最后一个词的位置上,然后可以进行该词的所 有属性的访问操作,甚至可以根据这个暂时的位置进入到该词的前一词位置 或其它可访问的位置进行访问,这也就是通过浮动指针的上下文访问过程。SETONR指令作用同SETON,只不过是根据寄存器的内容来进行浮动指针 的位置设定。比如寄存器"位置REG"(可以随意设定寄存器名称,目前每个 词指令的寄存器个数为40个,也可以调整到更大的范围)记录了某一个句子 中的某一个词的位置,通过"SETQNR位置REG"指令就可以暂时地设定浮动 指针进入到该"位置REG"寄存器所指定的句子或词的位置,从而进行各种相 关的"访问"。G(BACK指令则是将已经设定到其他的执行位置的浮动指针,重新"招回" 当前正在执行的扩展词指令的位置。也即浮动指针的值重新被赋值为当前ANL 语言描述的扩展词指令的主指针的值。 ,针暂时设i到其他^J的位置,便于进行各种上下文的"访问",还有FIND, FINDR 指令,也是能够将当前浮动指针的位置暂时设定到其他别的位置。除此之外 的其他的ANL语言指令,都是在当前的浮动指针的位置不变的情况下,来访 问其他位置的信息的,比如"LET该句.上一句.最前词.数量=100",仅是 将上一句最前词的数量属性赋值为"100",而自身浮动指针的位置还是当前 的位置,并没有被重新设置到上一个句子的第一个词的位置,当然也不用 GOBACK指令来返回到当前扩展词指令的主指针位置,也即该类型的ANL指令 不会使浮动指针的值发生改变。由于ANL语言的这种可以在外部输入的文本句子和知识库中的知识块体 部句子这样的一个全范围内进行"访问",致使ANL语言具有"可以通过上下 文的信息来方便地处理自然语言"的特性。(2).可以通过1^腿_1«011, MAKE一ROMR指令将当前的正在执行的扩展词 指令进行"悬挂"处理,^且每时都g"观察"致使产生"悬挂"的因素是 否改变。因为在很多情况,"理解"一个句子并不是简单地依次顺序执行完句 子中的每一个词就告结束的,而是很可能当前这个词的"理解"需要该句子 的后面的词的说明,甚至是后面的句子的说明,可此时后面的部分还没有来 得及执行到,这就需要"等待"当前这个词后面的部分都得到了处理之后, 再来接着继续处理当前这个词,只有这样才能保证"理解"的正确性,这个 "等待"过程就是通过将当前这个词暂时"悬挂",并随时"观察"后面部分 的执行情况来确定当前"悬挂"的词指令的执行,当然也会存在后面的词的 执行可能需要"观察"前面的词的处理,而前面的被"观察"这个词的执行 可能又需要"等待"更后面的词的处理的这样复杂的协同"观察"情况,这 些也都是通过"悬挂"机制来处理的。若只是属于单纯地后面的词"观察" 前面的词的话,那么,只要通过词指令的上下文访问功能就可以实现了,而没有必要进入"悬挂"来处理。关于"悬挂"处理这部分功能主要是通过"悬 挂工作区缓存"("综合工作区缓存"的一部分)来完成的,该缓存用于保 存所有的产生"悬挂"的扩展词指令的各种信息,包括当前扩展词指令正在执行的ANL语言指令所在的行位置(ANL语言的行指针),各种寄存器的数据 等现场信息。如果当前"悬挂工作区缓存"的内容为不空时("悬挂"的扩展 词指令,目前个数最多为100个,也可以通过设置到更大的范围),那么,每 向后执行一个扩展词指令,都要将"悬挂工作区缓存"中的从第一个开始, 向后的每一个"悬挂"的扩展词指令,根据当时保存的产生"悬挂"时的信 息,重新调出来执行,从那个致使产生"悬挂"的ANL指令的指定位置来继 续执行,如果执行的过程中有新的改变,比如当"悬挂"的词指令的产生"悬 挂"的因素撤销,则将该"悬挂"的词指令,从"悬挂工作区缓存"清除, 或者是虽然继续产生"悬挂",但是产生悬挂的因素有所改变,比如从原来的 产生悬挂的ANL指令行号(MAKE一ROM, MAKE一ROMR指令)是"20",现在已经 变化为"50",那么"综合工作区、存"的执行,则要重新再从第一个"悬挂" 的扩展词指令开始执行,直到"悬挂工作区缓存"中的每一个"悬挂"的扩 展词指令的执行过程中都没有新的改变,那么,此次的"悬挂工作区缓存" 的"悬挂"扩展词指令的执行才算结束。这个过程也就是被"悬挂"的那些 扩展词指令随时都在"观察"致使产生"悬挂"的因素是否改变的过程。因 为有的时候霈要彼此"观察"和彼此执行这种协同工作的情况,只要当"悬挂工作区缓存"的内容为不空,那么每执行一个外部输入文本中的或知识库 文本中的扩展词指令之后,都要将进入"悬挂工作区缓存"的每一个"悬挂" 的扩展词指令执行一遍,直到"悬挂工作区缓存"中的每一个"悬挂"的扩 展词指令在执行过程中都再也没有新的改变为止。悬挂工作区的内容执行情 况见图19。可以说,在"悬挂工作区缓存"中的每一个"悬挂"的扩展词指 令在整个输入文本的处理过程中一直都是处于一种"观察"自己所霈要的信 息的状态。当然,当输入文本全本执行结束,可能ROM问题阵列区还会存在"悬挂"的扩展词指令, 一方面,扩展词指令的ANL语言的描述块可能还需 要进一步的修改和完善,才能够有正确的结果输出;另一方面,可能已经有 正确的结果输出了,但是仍然还是会有一些多余的未被解决的问题(致使产 生"悬挂"的因素),这些问题可以视为多余部分,不予理会。由于在"悬挂工作区缓存"每一个"悬挂"的扩展词指令在整个输入文 本的处理过程中一直都处于一种"活"地"观察"状态,所以,这个"悬挂" 等待功能可以使系统在进行上下文访问时,不会因为当前的信息不全,比如, 可能系统还没有执行到需要关联的位置,致使相关联的位置的相关信息现时 为空,那么可以一直"等到"后续的处理都完成后,再去处理,而且是随时"观察"地随时处理,可以使每个扩展词指令同上下文其他的部分的联系都 可以得到相应的完整的信息,从而使上下文的生成的语境信息完整,除非句 子本身的信息不全,或者扩展词指令的ANL语言描述不完善,或者对当前输 入文本中描述的问题来说是属于多余的"悬挂"问题之外,都可以通过彼此"互相"影响地建立一个相关的语境信息,前面的词可以随时"观察"该词 后面的词或者后面的句子的有关信息,后面的词可以"观察"前面的词或者 前面的句子的信息,使之都能"协同前进"。比如第一个词的执行需要倒数第 二个词的信息,倒数第三个词则又需要开始的第一个词的信息,也都会使第 一个词一直"观察"并"等待"到倒数第二个词的信息完整后,倒数第三个 同一直"观察"并"等到"第一个词的信息完整后再处理,从而使整个系统 旳运行过程都能做到有条不紊地进行,虽然一时没有取到信息,但是通过"悬 S"等待都能够各自取到所需信息,以避免系统因为信息不完整而无法正确 运行下去的问题。 一(3).通过MAKEJ(NOWS, MAKE—KNOWSR指令可以完成在ANL指令执行过 程中,随时访问知识^中的直接用自—然语言描述的内容,可以是人类关于自 然语言的知识和世界知识(常识知识和专业知识),这个过程就是自动"问题 句生成"。若使机器能够很好地"理解"自然语言,那么必须具备一些背景知 识,并以此进一步确定一些语用信息,以保证更准确的自然语言处理。举个 伊J子说明,比如"河里有4条小船,5条大船,河里一共有几条船?",如果 裕"河里一共有几条船?""条"换成"只"就成了 "河里一共有几只船?" 我们的常识是作为"小船"的量词可以是"条"也可以是"只"。这里"条" 和"只"是等同的。自然的,机器在处理到"河里一共有几只船? " B寸,就 露要有一个判断"条"是不是与"只"等同的过程,否则,系统无法进行以 后的运行。当系统执行到这里的时候,系统通过指令"MAKE一KNOWSR问题 一REG"来自动生成知识库中的问题句,这里的寄存器"问题寄存器一REG"是 保存了在执行过程中的通过量词寄存器一REG1 (其值为"条")和量词寄存器 _REG 2 (其值为"只")生成的"条和只是什么关系?"这样的句子字符串。 这个字符串的生成是这样的:由于需要知道二者的关系,所以必须通过指令"LETRR寄存器X ~+= 寄存器Y "实现字符串相加,直至得到"问题 寄存器一REG-量词寄存器一REGl+"和"+量词寄存器一REG2+"是什么关系?", 另外是"只"在前,还是"条"在前,还要通过内部自动的根据"统一的先 后次序标准"来确定的,比如拼音顺序,或标准汉字库的编码号顺序,因为"条和只是什么关系?"也许在知识库中的句子本身就可以检索到,但是若 是"只和条是什么关系?"就不可能在知识库中检索到,尽管内容一样,但 是检索查找的过程是一个严格的字符串匹配的过程,必须是严格等同的,机 器在检索时并不知道"尽管这种次序颠倒,但仍还是同一个问题"的情况, 至于是三者,四者以上的排列关系就会有更多的组合情况,所以先后顺序必 须是按照"统一的标准"来进行的,通过统一标准能够把各种不同的顺序总 能表示成一种在知识库中能够唯一的顺序,这样可以不会对本是同一个问题, 仅是因为内容描述的先后顺序的原因而造成检索失败;另外,也没有必要把 所有各种组合成的句子都作为知识库的内容, 一方面加大了不必要的容量上 的开销,另一方面也会加大维护的工作量,当然这里只是对知识库中的属于 并列关系的内容所排列的标题句子实行"统一标准",因为这个过程是对句子的匹配查找,而不是对句子进行"理解"。"MAKEJKN0WSR问题_1^1"指令的 执行过程是这样的,首先根据"条和只是什么关系?"的句子进入知识库中 查找,如果没有,则输出"系统不知道'条和只是什么关系?',不能继续执 行,请建立这样的知识库后再执行!"这样的提示。若在知识库中已经建立了 这样的问题句和答案,那么就能在知识库中检索出来,并执行这个答案知识 库的句子,可能是一个句子,也可能是若干个句子,也可能是高级层次句, 也可能是低级层次句(基本层次句),当都执行完后就会有一个结果输出,通 过OUTPUT, OUIPUTR指令输出到"生成句工作区缓存"中的上述的MAKE—KNOWSR 指令所生成的句子"条和只是什么关系?"的工作区的属性名对应的区域进 行赋值。这里需说明一点,OUTPUT, OUIPUTR指令当判断当前所在的句子是通 过MAKE—KNOWS, MAKE—KNOWSR指令而生成的句子时,就会向生成句子的工作\n区对应^性名区域赋i而不是直接输出到系统的输出窗口。反之,贝値接 输出到系统的输出窗口 "RESULT OUTPUT"中,因为这是把OUTPUT, OUTPUTR 所在的扩展词指令所在的句子直接作为文本输入句子,或者是知识库的直接 执行句子的,而不是通过MAKE—KNOWS , MAKE_KNOJTSR指令生成的。再提到一 点,通过MAKE—KNOWS, MAKE一KNOWSR生成的^]子的工作区属性名也是按"统 一标准"来进行的,包括属性名。因为只有统一了,才能使系统按照这个"统 一标准"有条不紊地进行下去,否则会造成错乱,这样的属性名是否是标准 属性名?在系统编译时都能够检查出来,以保证系统运行的正确性。再比如上 个例子,OUTPUT, OUTPUTR指令在对应"等同"的属性名的赋值,为"是"。 同时说明一点,OUTPUT, OUTPUTR指令在MAKE—KNOWS, MAKE_KNOWSR生成句子 输出时总是赋值到最近的那个生成句所在的虑性名区域,g为可能还会有 MAKE—KNOWS, MAKE—KNOfSR生成句子的嵌套,这种情况是逐层完成的,还有一 点是,必须是与指定的扩展词指令的ANL指令行号对应的,因为也会存在同 一个扩展词指令的执行中会有好几处MAKE—KNOWS, MAKE_KNOWSR生成句子的 情况,为了不造成错乱,行号指定是必须Sj。尽管他们i可能再有"等待" 和"观察"的情况。必须保证那些处于"悬挂"的扩展词指令在处理过程中 都能准确地找到自己的"归宿",而不会出现"走错家门"的情况。系统会为 每一个MAKE—KNOWS, MAKE—KNOWSR生成句子都建立了相应的堆栈区,每次启 动系统时都会自动清空。对于生成的句子的工作区在处理过程中一直保持有 效,并没有像悬挂工作区缓存中的扩展词指令需要有"清除"的情况,同时 其内容大小也是可以调整的,目前最大是50个MAKE—KNOWS, MAKE—KNOWSR生 成句的区域,必要时可以重新再设置,每一个生成5工作区中包^生成句子 的各种相关信息,也有很重要的属性名区域。当扩展词指令执行了 MAKEJCNOWS, MAKE—KNOWSR生成句后,随后紧接着的指令就应该是 "READ_RESULT属性名:寄存器REGx"指令,该指令将指定的属性名的值 读到自定义的寄存器REGx中,以便于处理,若是该寄存器的值为空,也可以 通过"MAKE—ROM"指令将该扩展词指令的处理进行"悬挂",直等到有结果为\n止。就上面的例子来说,当在"MAKEJNOISR问题一REG"指令之后,紧接着就应该是指令"READ一RESULT等同:寄存器REGx",然后最好也有"鹏腿_1?(»!" 指令将该扩展词指^^用于判断当该寄存器"寄存器REGx"的值为空值时进 行"悬挂",以便于直到有了结果再往下执行,这里假设"READ—RESULT等同: 寄存器REGx"的读结果为不空,并且"寄存器REGx"的内容等于"是"。那 么机器在处理"河里一共有几只船?"时,因为"分析"了 "条和只是什么 关系?",也即引入了常识性知识进行处理,知道了 "条"和"只"在这里是 等同的,所以也就可以很从容地进行后面的处理,以便得出正确的答案。\nANL语言的这种能够根据霜要适时地引入语言知识、常识知识和专业知识 进行处理,从而使机器的"理解"具有了在一定背景知识的情况下进行处理 的能力,减少了只能在语言学知识的层面上进行处理的局限性,随着世界知 识的不断扩充完善,机器的"理解"能力就会更加强大;而这种知识的描述 又是自然语言形式的,所以更便于修改,维护和发展,也避免了因所有知识 都用纯ANL语言进行描述所造成的复杂性,而难以维护。因此,这种用自然 语言直接描述知识的表示方式,在很大程度上解决了知识库越庞大,维护越 难的问题。\n(4).通过ANL语言可以在运行过程中对扩展词指令的属性名进行自动 地"动态"扩展,也即随时可以根据需要进行扩展,而不去对属性名的个数 进行限制(可以近乎任意,只要系统的存储容量允许),可以使系统在处理时, 不会因为缺少相应的属性名而造成错误,从而保证相关信息完整性,以使处 理过程能够正确进行。参照图7。是在对象"A04"对应的基本属性名的那个 行的下一行开始,插入了一个扩展属性名的新的两个行,即从最上行数第六 行,为了表明这是对象"A04"的新属性名扩展行,在该对象"A04"的名称 列内容"A04"的前面加入了 "■"称为"BA04",并在该行的属性列可以 扩展其他的除基本属性名之外的属性名,比如这里的"加工时间","材 料","公差级"这些扩展属性名。紧接该行的下一行则为扩展属性值的行, 在该对象的名称"A04"加入了 "□"称为"口A04",可以在该行的对应单 元写入对应上一行的新扩展属性名的值。比如,这里的对应扩展属性名"加 工时间"的值是"2002年",对应扩展属性名"材料"的值是"黄铜",对 应扩展属性名"公差级"的值是"2",若是某一个新扩展的属性名的行的一 行都写满了,那么可以再在该扩展属性名的紧接着的下两行(因为下一行是\n用于写入该行扩展名的对应值的行)再插入新的扩展属性名行和扩展属性名 的值的这两个行,以此类推,直到该词的所有需要的属性名都扩展完毕,对 于一个对象的扩展属性名的命名,系统还支持同名加数字的格式,比如"存 在物l","存在物2","存在物3"等等。比如在对象"D02"扩展的动态 属性就有两行, 一个是以扩展属性名"批号"开头的那一行,另一个则是以 扩展属性名"验证数"开头的那一行,表明是扩展属性名所在的行,扩展属 性名行的紧接下一行就是对应的属性值的所在的行,比如对象"D02"的扩展 属性名"批号"对应的值是"CC0088",对象"D02"扩展属性名"验证数" 的对应的值是"10"等等。对象属性名的"动态"扩展是根据执行不同的扩展词指令的具体情况,通过运行扩展词指令的微操作描述库的内容来实现扩 展属性名的行和对应的扩展属性名的值的行的插入的。在这里,框架缓存区 只是为实现这种"动态"扩展操作提供了一个物理平台而已。\n(5) . ANL语言通过编译过程,可以将ANL语言中的每一条指令"一一对 应"地翻译成面向自然语言的CPU硬件结构(后面详述)的一条机器指令, 也即系统的最底层机器语言,这种直接定位于硬件执行的语言,在处理速度 上,更适合机器处理人类自然语言,因为若是在传统CPU上将ANL语言通过 某种计算机编程语言(中间语言)的若干次变换后的得到的传统CPU的机器 代码的话,那么,整个执行效率必然会因为太多次变换而降低。编译过程除 了检査ANL语法是否正确外,主要是将指令码、操作数、运算符,还有转移 的地址以及标号这样的助记符换成硬件对应的能够直接译码的二进制数,指 令的操作数中可以直接支持像"计算机科学"这样的词,甚或小短句的操作, 只不过是二进制形式表示而已。该ANL语言是直接为硬件实现来定做的,比 如"IF…THEN…ELSE…"描述中的,直接是采用"THEN—"前缀和"ELSE—" 前缀形式来描述指令的,这样虽然指令的个数增加了,但执行的效率提高"^, 因为一条汇编指令就完成了 "THEN"或"ELSE"紧接着的那条指令,而不是 分为两个步骤来进行。另外,还有指令码、操作数、运算符在指令中的位置 都是为了考虑硬件实现而确定的。\n(6) . ANL语言必须依赖于相应的运行环境才能执行。每一个扩展词指令 都有一个对应的ANL语言的描述,ANL语言在系统的运行环境中可以完成各种 层次的复杂的嵌套情况的执行。整个系统执行的关键主线是序号,这个序号 在整个执行过程中一直是唯一的,也正是基于这样的对每个词指令的唯一地 址,才使系统的运行都会层次分明,句和词的操作都有唯一的定位而不致错 乱,尽管可能有相同的词,相同的句子,但是由于定位在不同的空间,所以 都能很好的区分开来,保证系统有条不紊地执行。系统支持各种嵌套的层次 的处理,高级层次句……->次高级层次句"->低级层次句(基本层次句)-> 扩展词指令-〉ANL语言指令。基本理解过程是这个顺序,但是在ANL指令的执 行中可能又会生成高级层次句,然后再嵌套前面的过程来执行。总之,是一 个各种层次的嵌套都会各有其位,甚至这之间又会有各种"悬挂"的"等待"。 尽管如此,系统也都能有机地彼此协调地工作,从而为自然语言理解系统的\n"理解"处理提供尽可能的复杂过程的支持。\nANL指令行指针就是在执行一个扩展词指令的ANL语言描述体中一条ANL指 令时,表明当前执行的指令所在的位置。ANL指令行指针的值是通过ANL指令 所在的行号来确定的,因为每一个扩展词指令的描述,都是由一个包含了若 干个ANL指令构成的描述体来完成的,所以当每执行一个扩展词指令的ANL 语言描述体时,就是通过ANL指令的行指针从开始第一行开始逐行执行的, 如果不碰到眺转和调用之类的分支转移指令,那么该ANL指令行指针值会逐 行递增执行下去。否则,就直接跳转到指定的行号去开始执行。每当开始执 行一个扩展词指令的ANL语言描述体时,系统总是将ANL指令行指针的值,初始化为在ANL语言描述体中的第一个行的位置。\n根据以上分析,通过采用ANL语言描述的"扩展词指令"的执行方式, 系统可以对一个属于低级层次(基本层次的)的简单句子的进行"理解"。继 而之后,可以再"理解" 一个稍微髙级一点的高级层次句子(也许仅比基本 层次句高一个层次),因为这样的句子可以"分解"为若干的简单的低级层次 (基本层次的)的句子,而这些低级层次的句子又都是属于机器已经能"理 解"的句子。那么再髙一层的高级层次句子,又可"分解"为若干个次高级 层次的句子,若干个次高级层次的句子又可以再"分解"为再低一层的次高 级层次的句子,直至到最后,都"分解"到了最低级层次(基本层次)的可 由ANL描述的扩展词指令描述的句子,这些句子可能是属于通过"分解"为 逐个ANL描述的词方式来执行的,也可能是属于ANL描述的特殊句这样的一 个直接整句执行的。因为ANL语言描述的内容都是机器实际可操作的,因此, 机器对整个自然语言的"理解",也就可以通过对自然语言进行不断地逐层"分 解"来实现了。\n综上所述,通过在相应的自然语言运行平台下的ANL语言的底层处理, 能够有效地完成机器"理解"自然语言所需要的各个条件,包括采用高级的 知识表示,介入常识知识和专业知识,可以动态地扩展属性名,以及可以很 好地管理维护知识库等。因自然语言具有自然、灵活、人人都懂等特点,那 么系统在不断发展的过程中可逐渐延伸,而不是停留在单一的狭窄领域,可 适应不同任务,可以具有更多综合的知识,以便解决更复杂的问题,使人工 智能机具有越来越高的智能水平。\n如图1所示,本发明从硬件方面来讲主要包括面向自然语言处理的中央 处理单元NLPU和以此为核心的外围设备。外围设备有文本输入接口、文本缓 存(双口 RAM)、框架缓存器、地址译码器(框架缓存)、自然语言描述的知识 库、句子缓存器、句式缓存器、词缓存器、文本输出接口、输入/输出设备扩 展接口、综合工作区缓存、生成句工作区缓存、地址译码器(生成句)、生成 句属性地址产生器、地址译码器(句子)、地址译码器(句式)、地址译码器 (词)、ANL指针地址产生器、ANL语言描述库。总线包括符号地址总线、符 号数据总线、直接地址总线、直接数据总线、ANL指令数据总线、ANL指针数 据线。\n现有的传统CPU结构都是面向数值计算,而不是面向符号处理。由于其 结构本身的限制,在对符号处理时很难达到非常高的工作效率,因此必然会 因为现有的CPU本身存在的在处理人类语言信息时的不合理性,从而造成以\n此为核心的整个智能系统的工作水平不高。\n本发明中的中央处理单元NLPU,是一种根据自然语言的处理要求设计的 全新型的面向自然语言处理的CPU结构,本发明采用新的命名以示与传统的 CPU区别开来,称之为NLPU (Natural Language Processing Unit,自然语言 处理单元)。它是整个人工智能机工作的核心部件。其特点在于:\n1、以ANL语言直接作为NLPU的汇编语言,可以访问自然语言文本中的句、词和段等语言单位的位置上的信息,能够直接支持上下文的处理,可以\n支持ANL指令中的"悬挂","生成句"等处理。\n2、 具有更宽的数据宽度,在汉语的处理中,可以一次直接处理一个ANL 指令中包含像"布宜诺斯艾利斯"这样长度的词的数据宽度,指令码的总宽 度可以是320Bit以上(数据宽度的位数与不同的语种有关系)。\n3、 直接支持多种总线操作,比如符号地址总线,符号数据总线,直接地 址总线,直接数据总线,ANL行指针数据总线,ANL指令数据总线。\n4、 由于NLPU所支持的总线的数据宽度都是很大,所以,整个芯片的总 引脚数可能超过1000个,为了芯片封装的工艺考虑,也支持通过总线加锁存 的方式,来分时完成总线的数据操作,引脚数目可以大大减少,以支持现有 的芯片封装工艺。\n文本输入接口 :用于通过该接口来接收以固定格式的外部输入文本的文 字数据流,外部输入的内容必须是进行预先分词处理过的文本,对于是属于 机器分词的文本,还要加入一个人工校对的环节。\n文本缓存:该缓存为双口 RAM,该缓存有两个用途。第一,把通过输入文 本接口输入的文本数据在此缓存区中暂存,以便于自然语言处理单元(NLPU) 通过直接地址总线和直接数据总线把该文本缓存的文本内容,以句子、词为 单位按照框架缓存器的排列格式写入到框架缓存器(RAM)的存储器中。第二, 也用于系统在自然语言"理解"过程中,对于某个自然语言的句子、句式、 词在自然语言描述库中匹配成功后,在执行其对应的体部中的若干个自然语 言句子时,暂时存放这些体部中的句子,以便于NLPU把自然语言描述的知识 库中的体部中的这些句子写入到框架缓存器中。该文本缓存是使用双口 RAM 实现的,以保证在向文本缓存写入文本的过程中,NLPU也可以把已经写入到 文本缓存中的内容读出来并写向框架缓存器中,以避免那种因"等文本全部 都写完后,才可以向框架缓存器写入"所造成的等待时间过长而影响运行效 率的问题。\n框架缓存器:主要是按表格方式分配的RAM存储器,其中的内容包括句 子、词名称、定位序号、相关属性名、还有属性值的物理空间。这里直接以 对象、属性、值的概念来表示人工智能机工作过程中相关数据的状态的。整 个人工智能机工作时,除了一些状态数据采用堆栈形式保存的外,另外一些 大部分的中间数据都是在这个"内存"中存放。同时这里的"内存"中存放 的属性的值是由"值\地址码"两部分构成,可以有4种情况,包括"空值 (没有值也没有地址码)","只有值而没有地址码","没有值但却有地 址码","既有值又有地址码"。\n该框架缓存器的数据宽度是按照一个词或短句的宽度来设定的,对于汉 语来说, 一个存储单元的字长可能是256Bit (16个汉字的长度),长的数据 宽度是为了提高处理数据的速度,如果是64Bit字长的话,那么256Bit的吞 吐量就会提高四倍。该存储器虽然使用通用RAM实现的,需要2进制的物理 地址总线,但是配上地址译码器(框架缓存)后,NLPU就可以直接通过符号地址总线以序号(字符串)为地址直接访问框架缓存器。假设,某个句子的\n词"老虎"在框架缓存器的序号是"1-2-3/1",那么,NLPU要是访问这个词 "老虎"的"数量"属性的话,直接在符兮地址总线上输出"1-2-3/1.数量",\n在一个存储器读操作周期过后,NLPU就可以从符号数据总线得到"老虎"的 "数量"属性的值,比如得到"100"。这样,NLPU对框架缓存器的读写操作\n就可以看作是直接基于序号(字符串)的寻址操作,从而更便于NLPU的处理。 框架缓存器的地址译码器:即地址译码器(框架缓存器),该译码器是采\n用直接内容寻址存储器(CAM)来实现的,直接将框架缓存器的序号译码成框 架缓存器的物理地址,该译码器的编码只是在NPLU向框架缓存器写入新增加 的句子的时候才随机写入的,因为随着每次外部输入文本不同(注意,外部 输入文本的句子的写入不同于处理过程中的知识库中的嵌套的句子的写入, 前者是在处理新的外部输入文本时,先要清除所有编码后重新写入新编码, 而后者则只是在巳有的基础上增加新的编码),所以词的名称和序号以及物理 地址的对应都不同,不是固定的,是随机的。对于地址译码器编码的操作是 由NLPU通过直接数据总线和读写控制来完成的。另外,当该译码器的模式端 为"0"时,则用于将输入端与输出端直接"直通",不经过译码环节,这专 门用于在NLPU的模式被设置为"00"(外部访问)时,直接通过符号地址总 线以2进制的地址形式来完成对框架缓存器中的每一个存储单元的访问,这 主要用于调试时,将框架缓存器中的信息通过NLPU的输入/输出扩展接口完\n成对框架缓存器的"观察,,o\n自然语言描述的知识库:主要包括三个部分。句子的自然语言描述库、 句式的自然语言描述库、词的自然语言描述库。它们都是以硬盘作为存储媒 介的,因为自然语言的知识库霈要不断增加大容量的知识内容,且应是非易 失性的。当然,为了更高的速度,采用巨大容量的半导体存储器也是可以的。 它们本身分别都是通过各自的硬件检索机来完成快速的句子、句式、词的查 找,硬件检索机是一种通过与存储器相连,具有"在检索信息时,检索速度 与存储器中信息数量无关"的特性,从而解决了 "信息数量越多,检索速度 越慢"的瓶颈问题,该硬件检索机为已授权专利(98108581.4)。每个硬盘接 口除了与硬件检索机相连来完成査找功能之外,还通过该接口与外部进行通 讯,以完成对硬盘的知识库中的内容进行维护更新。\nANL语言描述库:主要包括三个部分,句子的ANL语言描述库、句式的 ANL语言描述库、词的ANL语言描述库。这些库都是以可擦写的RQM形式存储 器实现的。可以是各种非易失性的半导体存储器,比如EPROM、 EPROM、 FLASH、 FRAM等等。这里之所以以ROM称谓,是因为在系统工作时该存储器中的内容 从不发生写操作,也即没有更新,所起到的作用是只读型存储器ROM的作用。 只是在NLPU设置在工作模式"01"(外部写库)时,才通过外部接口来对这 些存储器进行库内容的更新修改,甚至是经过若干时间的完善,该ANL语言 描述库的存储器的内容以掩码ROM形式作为统一的应用标准。短期时间内不\n再作更改,而只是在使用过程中只对自然语言描述库中的内容进行不断地修改。由于该存储器是直接为NLPU直接提供ANL语言指令,而一个ANL指令中 可以直接包括一个词或小短句,所以该ANL语言描述库的存储器的字长具有 很长的数据宽度,对于汉语来说,除了能包括操作数2 (16个汉字的词或短 句外),还有指令码,操作数l (上下文目标和属性)还有判断条件的跳转地 址等,总的数据宽度可能超过320Bit。这只是为了提高系统处理效率而考虑\n的,并不是为了增加字长而增加的,况且并不是越长越好,应该是以最佳的 利用率为基准,对于不同的语言,数据宽度也会有一定的区别。这里NLPU的 处理数据宽度比通常的CPU目前主要是64Bit的数据宽度,是一个比较明显 的差别。\n句子缓存器:主要是存放NLPU在依据内部处理过程中的句子指针的值(序 号形式)从框架缓存器中提取的句子,比如框架缓存中的一个句子是包括六 个词"1/1 (猫),1/2 (爱),1/3 (吃),1/4 (鱼),1/5 (吗),1/6 (?)", 对于系统来说,句子指针总是指向每个句子的第一个词,像这里是"1/1", 那么NLPU可以根据该句子指针直接提取句子为"猫爱吃鱼吗?",并将其写 到句子缓存器。句子缓存器的输出则直接输出到通过硬件检索机连接的句子 的自然语言描述库,和通过地址译码器连接的句子的ANL语言描述库,用于 处理当在句子的自然语言描述库中匹配査找失败后,再直接进入到句子的ANL 语言描述库中进行匹配查找的情况。\n句式缓存器:主要是存放NLPU在依据内部处理过程中的句子指针的值(序 号形式)从框架缓存器中提取的句式,比如框架缓存中的一个句子是包括六 个词"1/1 (猫),1/2 (爱),1/3 (吃),1/4 (鱼),1/5 (吗),1/6 (?)", 因句子指针总是指向句子的第一个词,这里的"1/1",那么根据该句子指针 可以直接提取句式为"名+动+动+名+吗+?"。句式缓存器的输出则直接输出 到通过硬件检索机连接的句式的自然语言描述库,和句式的ANL语言描述库, 用于处理当在句式的自然语言描述库中匹配查找失败后,再直接进入到句式 的ANL语言描述库中进行匹配査找的情况。\n词缓存器:主要是存放NLPU在依据内部处理过程中的词指针的值(序号 形式),从框架缓存器中提取的词,比如框架缓存中的一个句子是包括六个词 "1/1 (猫),1/2 (爱),1/3 (吃),1/4 (鱼),1/5 (吗),1/6 (?)",当前 的词指针是指向句子的第3个词,这里是"l/3",那么,根据该词指针可以 直接提取词为"吃"。词缓存器的输出则直接输出到通过硬件检索机连接的词 的自然语言描述库,和词的ANL语言描述库,用于处理当在词的自然语言描 述库中匹配査找失败后,再直接进入到词的ANL语言描述库中进行匹配査找 的情况。\n文本输出接口:该接口用于将人工智能机处理的中间结果以及最终结果 以文字数据流的格式来向外输出,便于通过其它设备来观看运行状态和结果 或是根据该输出直接驱动其他设备。\n输入/输出设备扩展接口 :该接口用于人工智能机输入外部的传感信息, 比如温度、日期、湿度等。另外,还要通过该接口完成对一些外部设备的驱动。\n综合工作区缓存:该工作区包括当前执行的扩展词指令的工作现场缓存 区、悬挂工作区、生成句的工作区。当前执行的扩展词指令的工作现场缓存\n区(注意,当前处理的扩展词指令的寄存器,IF, CALL等的堆栈区域,并不 在NLPU中,这是考虑悬挂操作霈要保护现场的原因,因为在当前的扩展词指 令悬挂操作完后,只要在移动一个工作区域地址长度就可以再做下一个当前 扩展词指令的工作区域,因此前一个区域的现场自然就保护了,不需要为了\n保护现场而做太多的转写现场数据的操作,这样就直接提高运行效率,对于 这一点,与常规的CPU的寄存器都是在CPU芯片之内是有很大的不同)与悬\n挂工作区,还有生成句的工作区共同存在同一个RAM缓存中的,所以该工作\n区称之为综合工作区缓存。当一个扩展词指令在处理过程中又产生了新的生\n成句,那么也需要保护当前的现场,当产生的生成句子处理完后,还要再接\n着原来使产生生成句的那个指令的下一个指令来执行,所以生成句的现场也\n需要保护和恢复,而这个过程同悬挂工作区的现场保护是一样的。\n生成句工作区缓存:该工作区专门保存那些生成的句子的内容,包括句\n子的名称、序号、生成句的属性名对应值的单元。因为大部分情况下, 一个\n生成的句子执行完后,是要有一个结果输出在指定的属性名的对应值的单元,\n比如生成的句子是"鲸鱼是鱼吗?",如果在知识库中匹配成功该标题句子并\n执行完后,该生成句子的"判断"属性就应该被赋值为"不是",再比如,生\n成的句子是"英国首都是哪里?",那么该生成句子的"地点"属性应该被赋\n值为"伦教"。所以每一个生成句都有一个属性的工作区,以表明执行了生成\n句子后的结果。该生成句子的所在区域不会在系统执行当前这个外部输入文\n本的处理过程中消除,直到系统在处理下一个新的外部输入文本时,才会清\n除所有的生成句的工作区为止,这是由于生成的句子在处理过程中可能还会\n有"悬挂"的扩展词指令,必须为"悬挂"的那些扩展词指令在以后的输出\n属性操作时,找到指定的写属性的位置。所以在处理过程中不清除生成句的\n工作区。\n生成句的地址译码器:该译码器的功能是完成NLPU在输出的某一个生成\n句的序号(字符串)时,能够直接在生成句工作区缓存中定位到该生成句的\n开始地址,NLPU对生成句工作区缓存的访问也是属于基于符号的寻址。关于 该译码器的编码设置也是随机进行的,其操作可参见框架缓存器的地址译码\n器的内容。\n生成句属性地址产生器:在"综合工作区缓存"中,已经讲述了每一个 生成句都有一个固定的属性区,以便将生成句的执行结果输出到指定的属性 名单元。该生成句地址产生器实际上就是一个加法器,将其序号经过地址译 码器(生成句)译码后的生成句在生成句工作区缓存中的开始物理地址,与 生成句属性名的编号的相对地址进行相加运算,相加结果就是该生成句属性 名的绝对的物理地址。说明:由于系统的生成句的属性名的编号是统一管理 的,所以其编号的数据可以由直接地址总线直接指明,通过地址译码器(生成句)对生成句的序号译码后的在生成句工作区缓存中的开始物理地址,再 加上属性编号的相对地址就可以在生成句工作区缓存中完成指定的生成句的 属性的访问。\n句子的地址译码器:即地址译码器(句子),该译码器可以采用直接内容 寻址存储器(CAM)来实现,但需确保其内容不能丢失,可以采用后备电池, 或是直接采用非易失性存储器的CAM,或者是硬件检索机同非易失性RAM存储 器来共同来实现,最好不是每次启动系统,都需要重新调取该译码器的内部 数据。该句子的地址译码器直接将来自于句子缓冲器中的句子的字符串,译 码成在句子的ANL语言描述库的存储器中映射该句子的开始的物理地址,该 译码器的编码只是在NPLU工作在工作模式"01"(外部写库),当外部接口通 过NLPU向ANL语言描述库中增加新的内容时,也即写入新增加的用ANL语言 描述的句子的时候同时写入的,因为该地址译码器的编码写入,必须是与句 子的ANL语言描述库建造同期来完成,才能保证二者的一一映射,地址译码 器编码的操作是NLPU通过直接数据总线和读写控制来完成的。\n句式的地址译码器:即地址译码器(句式),结构和功能同句子的地址译 码器类似,只不过该地址译码器是针对句式的字符串,完成在句式的ANL语 言描述库存储器中映射句式的开始物理地址的译码。\n词的地址译码器:即地址译码器(此),其结构和功能同句子的地址译码 器类似,只不过该译码器是针对词的字符串,完成在词的ANL语言描述库存 储器中映射词的开始物理地址的译码。\nANL指针地址产生器:结构和功能同生成句属性地址产生器类似,只不过 完成将通过地址译码器(句子、句式、词)译码后的句子、句式、词的相应 ANL语言描述中的中映射它们的字符串的开始物理地址,与NLPU的ANL行指 针数据相加,得到它们在对应的ANL语言描述中的扩展词指令的ANL指令行 的地址。当开始执行一个扩展词指令时,ANL行指针数据是零,此时ANL指针 地址产生器完成相加的结果就是指定的句子、句式、词在ANL语言描述的知 识库存储器的最开始的ANL指令行,也即第O行(BEGIN行),之后,NLPU随 着ANL指令的不断执行,ANL行指针数据也会不断的改变,要么自动加一,要 么跳转到ANL指令指定的行数据,这样,ANL指针地址产生器就会不断地产生 当前描述的句子、句式、词的ANL描述的指令行在ANL描述库存储器中的实 际的物理地址。从而完成对一个扩展词指令的相关的ANL语言描述体的执行。 换句话说,地址译码器(句子、句式、词)输出的是扩展词指令的在ANL语 言描述库的存储器的高位段地址,而ANL行指针数据线输出的是剩余的低位 段地址,二者共同作用,完成了对一个扩展词指令的所有ANL语言描述体在 ANL语言描述库映射的物理地址的生成。\n符号地址总线:直接以序号(字符串)作为地址来寻址,从而可以根据 上下文的位置数据直接对框架缓存器进行信息的访问。\n符号数据总线:主要是完成NLPU与框架缓存器,以及还有其他的外围缓 存器件的以符号串形式的数据的信息传递。直接地址总线:用于NLPU访问外围的直接以2进制数的数据为地址的直 接地址寻址的器件,比如,以编号地址访问的在综合工作区缓存中的寄存器, 以及对外围器件进行参数数据进行设置,比如,对地址译码器的编码写入等。\n直接数据总线:直接传送2进制数的数据,用于NLPU以直接数据的形式 访问相关器件。\nANL指令数据总线:该总线主要是完成直接从ANL语言描述库中读取ANL 指令,每读一次ANL库的信息,该总线就加载了一条ANL指令,该数据宽度 比较宽,对于汉语处理,该数据宽度将超过320Bit。另外,当NLPU被设置在 工作模式"01"(写库模式)时,该总线也用于对ANL库进行添加内容时数据 传递。\nANL指针数据线:主要用于产生NLPU对ANL语言描述库进行访问时所需 要的ANL指令行的相应的物理地址。\n如图3所示,本发明的工作流程如下:\n1. 外部文本首先经过分词环节进行分词后,再通过文本输入接口送入文 本缓存(双口RAM)中暂时存放。考虑目前的分词技术还不能达到百分之百的 准确率,所以,这里加入一个人工校对的环节,以便于对少量的文本内容的 分词结果进行校对\n2. 文本缓存接受到了经过分词的文本后,NLPU就通过直接地址总线和直 接数据总线将文本缓存中的内容,按句、词为单位逐个地写入到框架缓存器 中。在每次对框架缓存器进行写入之前,都要将根据NLPU内部自动生成的序 号和一一对应在框架缓存器的物理地址,来对地址译码器(框架缓存器)进 行编码的写入操作,便于系统在工作时,可以根据序号(字符串)直接进行 符号地址寻址。\nNLPU在将文本缓存中的内容写向框架缓存器时,可以对当前的句子或词 的位置自动产生相应的序号,比如文本中的第3个句子的第5个词的序号为 "3/5",当然还可以有嵌套的序号比如"1-2-4-8/5"等(这种嵌套序号的写 入情况主要是在处理过程中完成的,而不是在开始时外部文本句子的写入过 程中,因为外部文本句子是属于"根句",它的序号只能是"x/x",而不可能 是"x-x-x/x" ), NLPU是按照框架缓存器的排列格式,将句子、词写入到框 架缓存器指定的地址单元中。\nNLPU除了要完成按指定的格式向框架缓存器(RAM)写入文本缓存中的 内容之外,还要对地址译码器(框架缓存器)进行编码设置操作。该地址译 码器是采用CAM (直接内容寻址存储器),来完成译码的,每次从文本缓存向 框架缓存器写入时,或是把处理过程中NLPU自动生成的句子写入到框架缓存 器时,都要进行译码器的编码设置,以建立序号同存储器的物理地址的一一 映射,比如"1-2-4-3-6/5"对应的地址码是"00022400H", "3-4/6"对应的 地址码是"00022800H"等等。这样在NLPU在进行按符号地址寻址时,就可 以直接以硬件方式通过立即译码,能快速地访问指定的框架缓存器中的指定 单元,而不是通过软件的比较耗时的程序査找过程。由于每次处理的外部输入文本内容不同,所以句、词结构的摆列也不相同,在处理一个外部输入文 本时建立的编码,在处理下一个外部输入文本时就会毫无用处,所以,每次 对新的外部输入文本进行处理时,都要同时建立新的编码操作,当然,在处 理过程中的嵌套的句子的写入,是属于在现有的编码的补充,而不是对当前\n译码器中的编码的刷新重写。比如运行时某一个时刻的编码对应的个数是200 个,后来因为有嵌套句子的原因,又在原来200个的基础上补充建立了300 个,那么,此时对框架缓存器中序号进行符号地址译码的个数就是500个。\n3. 当外部输入文本以框架缓存器的指定格式写入框架缓存器后,NLPU内 部自动初始化的句子指针的值为"1/1",也即指向第一句的第一个词。然后 根据该句子指针从框架缓存器中,提取一个句子。句子提取器的工作是通过 NLPU内部的当前的句子指针来完成的,比如,当前的句子指针是"1/1",句\n子提取器则依次根据凡是"l/"前缀的后面只是数字的情况进行提取,比如 符合当前的前缀"l/"的只有"1/2", "1/3", "1/4", "1/5"这样五个对象, 那么此时提取的句子就是分别由这五个词构成的,提取的句子为"AOl A02 A03 A04 。",而这是根据对应情况"A01 (1/1)", "A02 (1/2)", "A03 (1/3)" "A04 (1/4)", "。 (1/5)"而提取的。\n4. 对于提取的句子,首先通过硬件检索机进入自然语言描述的知识库中 的"句子的自然语言描述库"中进行标题句子匹配,如果匹配成功,那么该 标题句子对应的体部的句子又会再写向文本缓存(双口RAM)中,NLPU接着 再把该文本缓存中的内容写向框架缓存器,该过程与步骤2类似,只不过是 又对地址译码器(框架缓存器)和框架缓存器(RAM)写入了新的内容。然后, NLPU的句指针值就指向当前句子的嵌套的子句的第一个句子的位置,比如\n"1-1/1"。这里,关于自然语言描述的知识库中的内容都是属于系统工作之 前预先输入的内容,硬盘与硬件检索机配合完成的译码地址都是事先建立好 的,而不是在系统运行过程中建立的。与此类似的还有"句式的自然语言描 述库"和"词的自然语言描述库"。\n5. 如果提取的句子与句子的自然语言描述库匹配不成功,那么直接通过 地址译码器(句子)进入ANL语言描述库的"句子的ANL语言描述库"中进 行匹配査找。这里的地址译码器(句子)也可以用非易失性直接寻址存储器\n(CAM)来担当,也可以用硬件检索机同非易失性的半导体存储器来共同完成 译码工作。该地址译码器(句子)与地址译码器(框架缓存器)的区别:该 译码器的编码都是事先完成的,并不需要在运行过程中进行编码操作。因为 如果句子的ANL语言描述库中存在对当前的句子ANL语言的描述的话,该描 述在该库中的起始地址几乎是固定的,并不是像地址译码器(框架缓存器) 随着运行不同的外部输入文本,译码地址也随着发生改变。因为即使是向句 子的ANL语言描述库中增加新的句子,也是接着原有使用空间在剩余的空间 上的增加;或者是对库中内容进行修改,那也是对地址译码器(句子)的编 码一I5进行修改,尽管如此,这些操作也都是在建库时进行的,而不是在系 统运行时进行的。与此类似,还有地址译码器(句式),地址译码器(词)。这些译码器的\n内部编码都是事先设置的,运行中只使用即可,除非是NLPU设置在工作模式 "01"(外部写库)来进行建库操作。\n6. 如果在句子的ANL语言描述库中匹配成功,就直接运行用ANL语言描 述的对当前句子的解释的描述体。同步骤8的执行词的ANL语言指令过程一 样,可参见步骤8。只不过在执行完ANL语言描述的句子后,NLPU中的句子 指针的值是被写入由句子指针产生器自动生成的下一个句子的指针,比如当 前句子指针是"1-2/1",那么下一个句子指针则是"1-3/1";而在执行ANL 语言描述的词后,如果当前词不是句子的最后一个词,那么,词指针的值是 被写入由词指针产生器自动生成的当前句子的下一个词指针,比如当前词指 针是"1-2/1",那么,下一个词指针是"1-2/2"。而且,如果执行完的当前\n词是当前句子的最后词,那么还要执行句式处理。\n7. 如果在句子的ANL语言描述库中匹配失败,就要按逐个词的方式来执 行当前的句子。首先根据当前的词指针直接从框架缓存器中提取出当前序号 对应的词,比如当前的词指针(序号)为"1/3",那么直接从框架缓存器中 提取到"A03",然后送到词缓存器中暂存。\n8. 将当前提取的词名称直接通过硬件检索机到词的自然语言描述库中进 行匹配,如果匹配成功,那么该词属于髙级词汇,直接将知识库该词对应标 题的体部中的句子写入到文本缓存中(双口RAM),然后再将文本缓存中的内 容写到框架缓存器中,这个过程同前面讲述的步骤2类似,只不过这里的知 识库的体部中的句子,是属于嵌套的形式,比如序号都是(x-x/1…….)之 类的。之后句子指针的值是被写入由句子指针产生器自动生成的当前句子的 子句指针(比如1/1W-1/1),词指针也是被写入该子句的第一个词的序号(比 如1/1W-1/1),这里的大写"W",是表示当前序号的句子是由词的自然语言描 述库中的标题词所引起的嵌套句子(也即由自然语言的句子来对当前词进行 解释)。如果当前词在词的自然语言描述库中匹配失败,那么直接通过地址译 码器(词)进入词的ANL语言描述库中进行匹配,如果此时还继续匹配失败, 说明该词在人工智能机的整个库中都没有相关描述,提示"当前库中没有建 立当前词,不能继续执行!"。此时,不论是在自然语言的描述库还是ANL语 言的描述库中,必须通过建立该词的对应的描述,系统才能工作。对于未知 的词,系统需要通过"推理"来分析处理的情况,不在本文讲述之内。\n9. 如果该词在词的ANL语言描述库中匹配成功,那么地址译码器(词)\n通过ANL行指针数据线直接输出该描述体的ANL指令行指针数据,ii^情k 下,在开始执行扩展词指令时,NLPU是将ANL指令行指针的数据输出为零, 以便于从第一行开始执行,对于执行"悬挂"和使产生生成句的扩展词指令 的开始指令行指针为ANL指令所指定的ANL指令行,不一定都是从第一行开 始执行。\n10. ANL指针地址产生器把地址译码器(词)输出的该词在"词的ANL语言描述库"的开始物理地址,和ANL指针数据线指定的ANL指令所在行的数 据共同相加得到的结果,作为NLPU当前的读取ANL语言描述库的绝对物理地 址,通过读操作读取该行的ANL指令,并由NLPU进行译码并执行该指令,\n此时词的ANL语言描述库的库选端设置为有效,以选中词的ANL语言描 述库。与此类似,对于读句子ANL语言描述库,或是读句式ANL语言描述库\n时,都是对应的库选端设置有效,以后不再说明。\n11. NLPU在执行ANL语言指令时,主要是完成对框架缓存器(RAM)进行\n各种访问操作,此外,也包括对其他的所有的可能的操作,比如产生悬挂、 生成句、通过输出文本接口输出文本、通过设备I/O 口输入传感信息或是控\n制设备操作等。因为执行指令的内容不同,运行的操作自然地也就不一样。\n12. NLPU在每执行完一条ANL指令之后,通常情况,NLPU内部的ANL行\n指针产生器自动地"加l",产生下一个ANL指令所在行的数值,并由ANL行 指针缓冲器送到ANL行指针数据线上,ANL指针地址产生器再把ANL行指针数 据线上的数据与地址译码器(词)中的输出的最开始地址进行相加,得到下 一行的ANL指令所在行的词的ANL语言描述库的绝对物理地址,然后再接着 读取该行的指令内容并执行,当执行完后,ANL指针产生器再自动地"加l", ANL指针地址产生器再产生下一行的指令的绝对物理地址,然后NLPU再读取 下一条指令并执行,直至执行完"END"指令,就完成了当前扩展词指令的ANL 描述体的执行,参见图18。然后,在这个词ANL语言描述体执行后,紧接着 执行悬挂工作区缓存中的内容(该操作参见综合工作区缓存的工作情况的描 述)。当所有悬挂工作区缓存中的内容执行完之后,词指针产生器又会产生下 一个词的序号,比如当前执行完的词的序号为"1/4",那么下一个词的序号 则是"1/5";系统就是这样通过逐个词的ANL语言描述体的执行完成一个句 子的执行。\n一般情况下,ANL行指针产生器的自动"加l "操作都是不断进行的,但 是若是执行了 "CALL调用、GOTO跳转、IF比较判断后跳转"等指令,则直接 将跳转的行号数写入ANL指针缓冲器中,以便于跳转到指定的指令行位置开\n始执行。\n13. 当如步骤12那样执行完一个扩展词指令的所有ANL语言描述体及悬 挂工作区缓存的所有内容后,NLPU的词指针产生器自动产生下一个词的序号 并写入到词指针中,然后,再依次地执行后面的词的类似操作,直到当词指 针生成器新生成的词指针在通过框架缓存器进行词的提取时,结果不存在, 即表示该词指针产生器的前一个值(序号)是当前的句子指针指向的句子的 最后一个词,此时,该句子按照逐个词的方式执行句子过程已经结束,需要 进入到该句子的句式的处理过程。\n14. NLPU中的句式提取器根据当前的句子指针在框架缓存器中提取句式, 这个过程主要是通过该句中的词的词性来完成的,如果该句子的所有词在按 逐个词执行扩展词指令结束后,每个词都有确定的词性,那么生成的句式是 这些词性的排列,比如"名+动+形容+名+。"(标点也算在内),如果有的没有词性,那么以名称来代替,比如"在+名+介+有+名+ 。"。\n15. 当按照词的词性生成句式后,将该生成的句式首先在句式的自然语 言描述库中匹配査找,如果成功,直接把在句式的自然语言描述库中的与该 标题句式对应的体部中的句子写入到文本缓存中,然后NLPU再将文本缓存中 的内容写到框架缓存器中,该过程类似于"工作原理一一步骤2",然后句子 指针值被刷新,其值对应句子指针产生器指向的该句式的自然语言描述库中 体部的第一个句子,也即子句的第一个词,比如:"1-2/1F-1/1",这里的大 写"F"表明该子句是由句式的自然语言描述库中的体部句子引起的嵌套句子。 然后,再按句子的执行步骤来执行句式的自然语言描述库中的这些标题句式 对应的体部的句子,关于执行一个句子的过程,这在前面已经做过讲述,这 里不再重复》\n16. 如果在句式的自然语言描述库中匹配失败,直接通过地址译码器(句 式)在句式的ANL语言描述库中进行匹配,如果匹配成功,那么通过ANL指 针地址产生器将从地址译码器(句式)得到该句式的在句式的ANL语言描述 库中的最开始的物理地址,与ANL行指针数据线上的数据相加得到该句式的 ANL的相关指令所在行的绝对物理地址,读取ANL语言指令并执行,直至到整 个句式的ANL语言描述体都执行完毕。该过程类似于词的ANL描述体的执行, 可参照步骤12所讲述的过程。\n17. 当句式的ANL描述体全部执行完后,NLPU的句子指针产生器自动产 生下一个句子的指针(序号),分两种情况: 一种是根句,比如当前的句子指 针的值是"2/1"(第二个句子),那么下一个句子的指针的值就是"3/1"(第 三个句子);直接进入下一个根句子的执行,以上步骤就是一个句子的执行过 程;另一种是子句,比如是子句"2-3-4/1",那么生成的句子指针是"2-3-5/1": 还有一种生成句的子句情况,比如是子句"3-3/3W-2/l",生成的句子指针\n"3-3/3W-3/l",直接进入子句的执行。 一个句子执行的过程参见步骤3—步\ni果该句式在句式的ANL描述库中匹配失败,则自动产生下一个句子指 针,进入下一个句子的执行,不再有句式执行的过程。\n18. 当按照以上讲述的步骤,通过NLPU的句子指针生成器自动地产生下 一个句子的指针来完成逐个句子的执行过程,就可以来完成一个外部输入文 本的所有句子的或是知识库某一个体部中的自然语言描述的句子的执行,以 上未考虑产生悬挂的处理情况,实际运行中每次执行一个句子、词、句式之 后,都有一个执行悬挂工作区的过程,如图20所示。如果当NLPU中的句子 提取器按照句子指针产生器的句子指针来从框架缓存器中提取的结果不存在 时,表明要么是当前的外部输入文本的所有句子都执行完毕,如果通过判断 当前新生成的不存在,且句子指针之前的句子指针是外部输入文本的最后一\n个句子(句子指针是根句,该指针的值必须是"x/x")的序号时,比如当前 输入文本句子总共有五个句子,最后的句子指针是"5/1",根据该指针再生 成的句子指针"6/1"是不存在的,那么此时人工智能机对整个外部输入文本的处理就全部结束了。\n如果当前的句子指针生成器生成的句子指针不存在,而且又不是根句的 序号"x/x",那么一定是由根句生成的其它的子句的序号,如前面"工作原\n理一-步骤17"举的例子,那么句子指针生成器,会根据当前的子句指针进入 到引起该子句的父句的下一个句子指针,也有可能是词指针。比如当前句子 指针"2-3-6/1",而且该句子在框架缓存器中不存在,那么生成的下一个句 子指针是"2-4/1";若当前句子指针是"3-3/3W-2/1",那么直接进入到句子 指针"3-3/1",词指针"3-3/4",这是一个由词引导的子句的情况。整个系 统的运行,就是这样通过子句的序号,逐渐逐层地进入父句的下一个句子的 句子指针和词指针的位置,再继续地执行句子,直至到根据外部输入文本的 根句的最后一个句子指针所生成句指针不存在,那么整个外部输入文本的句 子至此执行完毕。之后,可以通过输入新的外部输入文本,来执行下一次的 对外部输入文本的处理。\n当系统在执行某个扩展词指令的ANL指令时,可能会生成新的句子,引\n起嵌套句子的执行,由此产生生成句处理的工作过程如下:\n1. NLPU首先将处理过程中由MAKE—KNOWS类指令生成的句子的内容送\n入句子缓存器,然后,通过与句子的自然语言描述库中的标题句子进行匹配, 如果匹配成功,直接将知识库中该标题句子对应的体部的句子写入到文本缓 存中,然后再由NLPU把文本缓存中的内容以句、词为单位按照框架缓存器的 排列格式写入到框架缓存器中,当然,也还包括写入到地址译码器(框架缓 存器)中新增加的编码。然后,NLPU直接进入该标题句子所在的第一个子句 的指针,开始执行该标题句的体部中所有的子句,关于对于句子的处理在前 面的工作原理已经讲述了,这里不再赘述。当执行完所有的由该生成句所引 起的子句后,再回到使产生该生成句的那个扩展词指令的ANL指令行的下一 行指令继续接着执行。说明一点,在执行ANL描述的句子的过程中生成的句 子的序号是以"s"标志,比如"1-2/1 s-1/1:在执行ANL描述的词的过程中 生成的句子的序号是以"w"标志,比如"l-2/lw-l/l;在执行ANL描述的句 式的过程中生成的句子序号是以"f"标志,比如"l-2/lf-1/1。另外,对于 不是生成句的嵌套句子标志顺便提一下,在自然语言描述的词的执行过程中 嵌套句子的子句序号以"W",比如"1-2/1W-1/1;在自然语言描述的句式的 执行过程嵌套的句子的子句的序号以"F",比如"1-2/1F-1/1;而对于在自 然语言描述的句子的执行过程嵌套句子的子句序号则不加标志,比如 "卜2-3-4/l"。\n2. 如果在自然语言的描述库中匹配失败,就要到句子的ANL语言描述 库中进行匹配,如果匹配成功,那么就执行句子的ANL语言描述库中的对该 标题句子的ANL描述体。当执行完所有的由ANL语言描述的该句子后,再回 至j使产生该生成句的那个扩展词指令的ANL指令行的下一行指令继续接着执 行。\n3. 如果该标题句子在句子的自然语言描述库和句子的ANL语言描述库中都匹配失败,那么,系统则产生"必须对生成的句子进行建库后,才能执\n行生成句!"的提示,此时首先霈要针对该句子进行建库,然后再执行。这与 非生成句子的处理过程的根本区别就是不再执行按逐个词的执行过程。\n4. 当执行生成句的知识库中该标题对应的体部中的句子(子句)时, 当有向外输出结果指令OUTPUT或0UTPUTR时,该指令会根据句子的标号进行 判定,如果是执行中新生成的句子,那么,输出的结果就会直接输出到新生 成句子所在的属性名指定单元。具体操作:NLPU内部首先在符号地址总线输 出该生成句的序号,经过地址译码器(生成句)译码成当前生成句序号对应 的物理地址,再由生成句属性地址产生器把该直接物理地址同由直接地址总 线送出的属性名编号的相对地址两者相加,就得到了该生成句的属性名的值 对应的单元在生成句工作区缓存中的绝对地址。NLPU再向这个绝对地址写入 属性名对应的值,也就完成了生成句属性名的值的写入过程。该生成句属性 名的值,主要用于使产生生成句的那个指令行以后的指令可以读出该生成句 属性名的值,这是通过REAI^RESUIT指令完成的,具体过程是OUTPUT类指令\n的逆过程,大部分的地址译码过程都是一样的,只不过一个是读结果, 一个\n是写结果操作而已o\n生成句子的序i分别由执行不同的扩展词指令时生成的,由于对于同一\n个扩展词指令在执行ANL语言描述体时,会在不同的指令行号上执行生成句 指令,为了避免造成错乱,还要加上行号,比如"1-2/6s*5"中,"*5"表明 是执行第5行的生成指令(皿_咖0»类指令)所生成的生成句子。对于生成 句出现嵌套时,对生成句工作区缓存的操作,则总是在离当前的扩展词指令 序号最近的那个生成句的序号进行操作,比如一个生成句的子句的序号是\n"l-2/3w*5-l/3w*8-2-3/1"的扩展词指令的OUTPUT类指令操作总是会向序 号是"l-2/3w*5-l/3w*8"的生成句的属性名单元进行写入结果操作,而不会 是向序号是"l-2/3w*5"的生成句的属性名单元来写入。当然READ_RESUIT 指令地执行也类似。对于如果执行相同一行的ANL指令中的生成句^令\n(MAKE一KNOW类指令)产生了循环操作,比如总是多次执行该行该指令,那么 还要在生成句的序号上再加入以表明是第几次循环,比如\n"l-2/3w*5»2",就是表明是该指令已经循环了2次,这样的序号用以在各自 的执行中都不会造成混乱。这样的处理尤其用在每次循环寄存器中的内容不 同时,生成句子的内容也不同的情况的指令"MAKE—KN0WR"。对于READ—RESUIT 指令由于本身无法指定是在同一个ANL语言描述&的哪一行的MAKEJ^OW类 指令生成的句子,所以,总是通过每个扩展词指令寄存器区中的生^句序号 缓冲器中最新的序号来指定。该生成句序号缓冲器在每执行一次MAKE—KNOW 类指令时,都会刷新内容,所以READ一RESUIT指令读取的内容生成句Sl序号 总是最后一次通过MAKE_KN0W类指令更新的序号。\n在综合工作区缓存中,包含了正在执行的当前扩展词指令的工作区、悬 挂的扩展词指令的工作区、产生生成句的扩展词指令工作区以及被清除的悬 挂工作区(空白区)。NLPU对综合工作区缓存的访问过程如下:关于综合工作区缓存的工作情况还是通过举例的方式来说明。\n比如人工智能机刚开始启动时执行一个句子"AOl A02 A03 A04 A05 A06 ," 参见图8。\n1. 刚启动时,整个系统的所有的指针都是设置为初始值,大部分都是 零。参见图8中的当前扩展词指令工作区位置指针-000000H,指向综合工作\n区缓存的最开始的地址,这里假设每个扩展词指令所使用的工作区占用 00H-FFH(256个地址单元),包括扩展词指令自身的IF堆栈、CALL堆栈、PUSH\n堆栈、自定义寄存器区和通用寄存器工作区(包括一个重要的生成句序号缓 冲器)等,关于每一个扩展词指令所使用的工作区的内部分布情况,参见图\n中的描述。扩展词指令地址堆栈指针(产生悬挂)=0000H,扩展词指令地址 堆栈指针(产生生成句)-OOOOH;\n2. 执行第一个词"A01",见图9。该扩展词指令"A01"使用的当前的 扩展词指令工作区是(00—FFH)。也即当前扩展词指令工作区位置指针的值 =000000H。由于执行"A01"时既没有产生"悬挂",也没有产生新的生成句\n子,所以所有的指针的值都还是初值。只不过是当前扩展词指令工作区位置 指针(OOOOOOH)开始的(00~FFH)单元的内容可能被执行"A01"时使用过。 3, 执行第二个词"A02",见图10。由于当前扩展词指令工作区位置指 针仍然还是"OOOOOOH",所以执行"A02"所使用的当前的扩展的词指令的工 作区还是在(OOOOOOH)开始的(OO"FFH)区域。只不过此时执行的扩展词 指令是"A02",而不是刚才的"A01"。\n4. 执行第三个词"A03",见图11,假设该扩展词指令在执行过程中产 生了 "悬挂"。那么尽管当前在执行"A03"时使用的当前的扩展词指令的工 作区还是在(000000H)开始的(OO"-FFH)区域。但是,当执行完该扩展词 指令,该工作区即被"悬挂"并暂时退出当前扩展词指令的执行,下一个扩 展词指令的工作区就是不能再使用该工作区了,也即"A03"的工作区现场被 保护起来了 。此时当前扩展词指令工作区位置指针则通过加一个扩展词指令 区的空间长度(OO—FFH)指向了下一个工作区,也就是"000100H"开始的\n(OOH-FFH)的空间,而当前扩展词指令工作区位置指针的值也由原来的 (000000H)改变为(000100H);另外,悬挂的扩展词指令的工作区的堆栈指 针的当前指针(0000)指向的单元也保存了 "A03"在综合工作区缓存中的地 址(000000H),同时,该指针"加1"后(0001H)指向了在综合工作区缓存 中,可能保存产生下一个"悬挂"的扩展词指令地址的单元的地址,参见图 中的各值。\n5. 执行第四个词"A04",见图12,假设该扩展词指令在执行过程中产 生了 "悬挂"。那么在执行"A04"时使用的当前的扩展词指令的工作区是在\n(000100H)开始的(00—FFH)区域。当执行完该扩展词指令,该工作区即 被"悬挂",下一个扩展词指令的工作区则不能再使用该工作区,"A04"的工 作区现场被保护起来了 。此时当前扩展词指令工作区位置指针则通过加一个 扩展词指令工作区的空间长度(OO-FFH)指向了下一个工作区的开始地址,现在是"000200H"开始的(00H-FFH)的空间。当前扩展词指令工作区位置 指针的值由原来的(000100H)改变为(000200H);另外悬挂的扩展词指令的 工作区的堆栈指针当前指针(0001)指向的单元保存了 "A04"在综合工作区 缓存中的地址(000100H),同时,指针加l后(0002H)指向了在综合工作区 缓存中,可能保存产生下一个"悬挂"的扩展词指令地址的单元的地址,参 见图中的各个值。\n6. 执行第五个词"A05",见图13,假设该扩展词指令在执行过程中产 生了生成句子。那么,在执行"A05"时,所使用的当前的扩展词指令的工作 区是在(000200H)开始的(00—Fra)区域。当执行完该扩展词指令,该工 作区虽然没有被"悬挂"但也属于保护区,以便于当生成的句子执行完之后, 还要恢复当前的现场,来接着执行使产生生成句子的那个ANL指令行的下一 行指令。此时下一个扩展词指令的工作区不能再使用该工作区,"A05"的工 作区现场被保护起来了 。此时当前扩展词指令工作区位置指针则通过加一个 扩展词指令工作区的空间长度(00"FFH)指向了下一个工作区,现在则是\n"000300H"开始的(00H-FFH)的空间。当前扩展词指令工作区位置指针的 值由原来的(000200H)改变为(000300H);另外由于没有产生"悬挂",所\n执^f生成句的过程都没有产生"悬挂",或是再次地在执行过程中°生成新的生 成句这样复杂的嵌套过程,参见图中的各个值。\n7. 执行第五个词"A05"生成的句子"AA01 M02 AA03 ,",见图14, 假设该句子是属于句子的ANL语言描述库中匹配成功的标题句子(此处属于 扩展词指令为句子的情况),并假设在执行过程中既没有产生"悬挂",也没 有产生生成句这样复杂嵌套的情况,那么,当前在执行"M01 AA02 AA03 ," 时所使用的当前的扩展词指令的工作区则还是在(000300H)开始的(00—FFH) 区域。由于在执行该ANL描述句子过程中既没有产生"悬挂",也没有产生生 成句,所以悬挂的扩展词指令的工作区的堆栈指针的当前指针仍然保持不变, 参见图中的各个值。\n8. 执行生成的句子"AA01 AA02 AA03 ,"被执行完后,还要接着执行 "A05"在使产生生成句的那行ANL指令的下一行及以后的指令,直到"A05"\n扩展词指令全部执行完,此时霈要把"当前的扩展词指令的工作区位置指针" 的值保存到"当前的扩展词指令的工作区位置指针保护缓存"中,然后将扩 展词指令地址堆栈指针(产生生成句)所指的值写入到当前的扩展词指令的 工作区位置指针中,并且在执行后,还要把"当前的扩展词指令的工作区位 置指针保护缓存"的值在恢复到当前扩展词指令工作区位置指针中。见图15, 并假设在执行过程中既没有产生"悬挂",也没有产生生成句,所以悬挂的扩 展词指令的工作区的堆栈指针的当前指针还是保持不变,参见图中的各个值。\n9. 执行第六个词"A06",见图16,假设在执行该扩展词指令过程中产 生了某个信息,该信息使"A03"的判断指令执行的判断信息为已知,并再在 随后的执行悬挂工作区内容时,使"A03"的"悬挂"从综合工作区中消除。当前在执行"A06"时,所使用的当前的扩展词指令的工作区是在(000200H) 开始的(00—FFH)区域,当执行完该扩展词指令后,"A3"的"悬挂"从堆 栈中的地址被消除了,但是,此时当前扩展词指令工作区位置指针则仍然还 是现在的"000300H"开始的(OOH-FFH)的空间。而不是移动到"悬挂"消 除的那个工作区的开始地址,此时的"A03"工作区虽然是属于存储区"碎片", 但却不对综合工作区的从"悬挂"到消除的存储区"碎片"作处理,之所以 这样做,主要是考虑系统处理速度。另外,由于在处理过程中也没有产生生\n参见^中的各个值。\n10.执行第七个词"。",见图17,该扩展词指令"。"所使用的当前的 扩展词指令工作区则是从当前扩展词指令工作区位置指针的值=00030011开始 的(00—FFH)区域。由于执行"。"时既没有产生"悬挂",也没有产生新的 生成句子,所以所有的指针的值都还是初值,只不过当前扩展词指令工作区 位置指针(000300H)开始的(00—FFH)单元的内容可能被执行"。"时使用 过。\n综合工作区缓存就是如上这样的处理扩展词指令执行过程中各种情况: 产生悬挂工作区,清除悬挂工作区,保护使产生生成句的那个扩展词指令工 作区的工作现场。特别是,人工智能机在工作过程中,所执行的当前的扩展 词指令的工作区,总是在不断地"浮动",随着扩展词指令的在产生"悬挂" 或是产生生成句时向后移动,当前扩展词指令工作区指针总是向后移动,除 非是再接着执行产生生成句那个ANL指令的下一行及以后指令,才重新返回 使产生生成句的那个扩展词指令的工作区,当执行完后,还是要回到综合工 作区最后的那个指定当前扩展词指令工作区指针。当前扩展词指令工作区指 针每从一个工作区移动到下一个工作区的位置,就硬件的保护了 "悬挂"的 扩展词指令的工作现场,和产生生成句的扩展词指令的工作现场。\n下面介绍本发明中中央处理单元NLPU的内部结构,如图2所示,其包括:\n1. ANL指令数据的缓存器:NLPU工作时,必须通过ANL数据总线从 外部的ANL语言描述库读取ANL语言指令数据到对应的缓存器中。因为指令 数据包括:指令码、指令操作数l、指令运箅符、指令操作符2、判断条件为\n"真"跳转地址以及判断条件为"假"的跳转地址。那么自然地对应的指令 数据缓冲器就包括:指令码缓冲器、操作数1缓冲器,运算符缓冲器、操作 数2缓冲器、判断条件为"真"缓冲器以及判断条件为"假"缓冲器。在这 里,由于指令操作数2可以直接支持词或是短句的数据宽度,所以,对于汉 语而言,仅操作数2的数据几乎就是大约占用256Bit的数据宽度,所以操作 数2缓冲器的数据宽度就可能超过256Bit。\n2. 指令译码器:对通过ANL指令总线送到指令码缓冲器中的指令码进 行译码,并直接控制整个NLPU的所有与ANL指令执行过程相关的工作部件, 也是NLPU中一个非常重要的部件。\n3. 时序控制单元:以外部的时钟脉冲为驱动,为指令译码器的操作和其它的在操作过程中霈要时序的控制部件提供操作时序。时钟脉冲的主频取\n决于外部时钟振荡器的频率,也同时取决于NLPU本身芯片的最高工作频率(最 高频率取决于芯片复杂程度和芯片加工工艺水平)。\n4. 算术运算器:主要完成算术运算操作,包括加、减、乘、除,以及 与、或、非等的逻辑基本运算。由于NLPU处理的数据都是以符号形式来表示 的,所以,进行算术运算时,霈要将符号变换为数值后再进行运算,运算后 的结果还要再转换为符号,以供NLPU在整个过程中的大多数的符号运算。算 术运算器在这里的任务是属于辅助性的,而字符运算器则是担当自然语言处 理的主要任务,所以对于要求高速复杂的数值运算的处理情况,传统的面向 数值处理的CPU还是最佳的选择。\n5. 字符运算器:用来完成字符运算的各种操作,包括比较字符串判断, 字符串的加操作(合并字符串)、提取指定个数的字符串、清除字符串某一端 的指定个数的字符、计算字符串长度等等。\n6. 运算操作数寄存器l:用于暂时存放进行数值或是符号运算的第一 个运算操作数。\n7. 运算操作数寄存器2:用于暂时存放进行数值或是符号运算的第二\n个运算操作数。\n8.结果寄存器:用于暂时存放进行数值或是符号运算的结果,以及暂存 其他的在处理过程中的信息,比如将操作数2缓存器的数据送到符号数据总线 缓冲器,则要通过结果寄存器中转。\n9. 字符-数值变换器h在迸行算术运算时,对存放在运算操作数寄存\n器1中的字符型数据转换为数值型的数据,以便于在算术运算器进行运算。\n10. 字符-数值变换器2:在进行算术运算时,对存放在运算操作数寄存 器2中的字符型数据转换为数值型的数据,以便于在算术运算器进行运算。\n11. 数值-字符变换器:用于在进行算术运算时,对运算后的数值型数 据再转换为字符型的数据,以便于在整个NLPU中的符号型的数据传递。\n12. 行号编解码器:用于对产生"悬挂"或者是产生生成句的扩展词指\n令所保护的现场进行恢复时,对保护的扩展词指令的指针(序号)还有执行\n的所在行的符号型的数据解码为数值型的数据后,加载到ANL指令行指针产 生器中,比如保护的现场为"1-2-3/3w*8",那么可以解码当时产生生成句的 指令行指针是第"8"行:反之,在进行现场保护时,能够把当前的ANL指令 行指针数据同当前的扩展词指令的指针(序号)相结合,产生相应的编码数 据来进行保存。\n13. 多路选择器1:该多路选择器受指令译码器控制,对于送到NLPU的 字符型数据线上的数据,要么是选择将算术运算器的结果,要么是选择字符 运算器的结果。\n14. 句子指针产生器:主要是根据当前句的指针值,计算下一个句子指 针的值,共有两种情况:第一,当通过NLPU把文本缓存中的内容写向框架缓 存器中时,自动产生下一句的句子指针,比如当前指针值是"2-3/1",那么产生的下一个句子的指针的值是"2-4/1";或是新生成的子句的指针的值, 比如当前父句的指针是"2-3/1",那么产生的子句的指针是"2-3-1/1":甚 至是根据当前运行句子的指针,执行扩展词指令(可以是ANL语言描述的句 子、词、句式)时执行"MAKE—KNOW"类指令时产生的生成句的指针值,比如\n"l/2w-l/l"、 "1-2-3/lf-1/1"、 "3-3/ls-l/l"及其生成句在句子的自然 语言描述库中对应的体部的子句的指针值(序号),比如"l/2w-l-l/l"、\n"l-2-3/lf-l-l/l"、 "3-3/ls-l-l/l"等。第二,当NLPU只是单纯地执行框\n架缓存器中的内容时,并且,当前句子指针的句子在执行过程中既没有进入 下一个子句,也没有产生新的生成句。此时句子指针产生器的工作过程是这 样的.*当新产生的指针值再通过符号地址总线由地址译码器(框架缓存)进 行译码时,如果在地址译码器(框架缓存)的存在端输出"0"(不存在)信 号时,则逐级地退回到父句下一个句子指针的指针值。比如,当前的指针是\n"l/2s-l-5/l",若是新产生的句子指针是"l/2s-l-6/l"这个指针值在译码 器(框架缓存)进行译码时输出的结果为"0"(不存在),那么,此时依据当 前的指针值退回到父句指针的下一个句的位置"l/2s-2/l";对于由词意到的 子句,则要退回到由扩展词指令(词)执行时产生生成句那个词所在的父句 的指针值,比如句子指针产生器产生了一个由词引导的生成句指针\n"l/2w-4/1",在译码器(框架缓存)进行译码时输出的结果为"0"(不存在), 那么就退回到父句的指针值"1/1"。\n15. 句子指针缓存器:该缓存器直接存放由句子指针产生器生成的有效 的句子指针值,主要用于在执行悬挂流程的过程中产生生成句时,需要暂时 地保存当前的句子指针产生器中的内容,当执行完悬挂的生成句内容,并返 回到主流程时,再将该句子指针缓存器的值重新赋值给句子指针产生器。\n16. 词指针产生器:主要作用是根据当前的词指针的值,直接产生下一 个词的指针的值,比如,当前的词指针是"2-4-5/1",那么下一个词指针的 值就是"2-4-5/2",每执行一个扩展词指令(句子)时,该词指针的初始值 都是由句子指针产生器赋值的。\n17. 词指针缓存器:该缓存器直接存放由词指针产生器所生成的有效的 词指针值,主要用于在执行悬挂流程的过程中产生生成句执行时,需要暂时 地保存当前的词指针产生器中的内容,当执行完悬挂的生成句内容,并返回 到主流程时,再将该词指针缓存器的值重新赋值给词指针产生器。\n18. 目标译码器:专门用于对需要访问框架缓存器的那些ANL指令码中 的"操作数l"进行译码,根据上下文访问的句位置、词位置,以及属性的所 合成的内容产生符号地址总线的地址值。比如"该句.下一句.最前词.大小", 假设当前的词指针是"1-3-4/4",那么译码后的符号地址总线的值则是\n"1-3-5/1.大小"。对于"最后词"和"最后句"的访问,译码要访问地址译 码器(框架缓存器)多次,以便确认到最终的值,这需要花费很多个时钟周 期来完成译码任务。目标译码器内部有一个临时指针产生器,用来产生译码 过程中所需要的一些的中间临时值。该内部还有一个主指针用于获取当前的词指令的词指针,可能来自于主执行流程的词指针,也可能是悬挂执行流程\n中的词指针。译码器中的浮动指针主要用于执行上下文访问,每次开始执行 一个主执行流程的扩展词指令时,都以主指针的值刷新浮动指针的值。目标\n译码器的译码结果直接送到符号地址总线缓存器中,通过符号地址总线输出 符号地址的值。在进入悬挂或是产生生成句的时候,主指针和浮动指针都会\n被保护o\n19. 主指针:是目标译码器中的一个缓存单元,专门保存当前所处理的 扩展词指令的序号,在每个扩展词指令的整个处理过程中一直保持不变,除 非是产生悬挂和生成句的情况,暂时被新的主指针代替,但是在执行完后,\n还要再返回原来的值。\n20. 浮动指针:是目标译码器中的一个缓存单元,是动态地保存当前所 处理的扩展词指令的一切其他的以主指针为基础的序号,在扩展词指令的整 个处理过程中随时都会发生变化,以便完成以当前的扩展词指令的主指针为 基础,在框架缓存器的中的所有各处的访问,也即可以完成上下文的处理。 最开始执行扩展词指令时,该指针是被主指针赋值,除非是在执行中产生悬 挂或是产生生成句:并且在执行过程中也可以通过执行指令"GOBACK"再重 新回到主指针的位置,可以再重新进行别的位置的访问。\n21. 直接地址总线缓存器:主要用于对于是寄存器寻址的操作,直接输 出指定寄存器编号的直接地址,也包括其他的需要直接地址驱动的操作。NLPU 所使用的寄存器是由外部的综合工作区缓存的RAM存储器提供的,这主要是 为了考虑,自然语言处理过程的扩展词指令的执行在悬挂时要保存当时的扩 展词指令的现场,每一个扩展词指令都有一个现场,主要是依据是否悬挂而 保护现场的,所以,每个扩展词指令的相关的寄存器在保存时,只要不使用 那个扩展词指令的悬挂区域,就达到保护的目的,再重新申请别的区域,则 就是新的扩展词指令的新的寄存器区。也用于对地址译码器(框架缓存器, 生成句等)的编码写入,在把文本缓存(双口RAM)的数据写入到框架缓存器 过程中,也用于传输输出文本缓存(双口RAM)的地址数据。\n22. 直接数据总线缓存器:用于暂时存放NLPU以直接数据(非字符型 数据)向外部进行传输的数据。\n23. 符号地址总线缓存器:主要是存放NLPU在以符号型数据作为地址 进行外部访问的符号地址信息。包括与框架缓存器,综合工作区缓存等的读\n写操作e\n24. 符号数据总线缓存器:主要是存放NLPU在以符号型数据作为数据 进行外部访问的符号数据信息。包括与框架缓存器,综合工作区缓存等的读 写操作。\n25. 输出文本接口:主要是完成在自然语言处理过程中的把需要产生输\n出结果的信息通过该接口输出。\n26. 外部通讯接口:用于控制访问外部的传感器和驱动器的信息传递, 还兼有通过该接口访问人工智能机的运行信息,比如访问ANL语言描述库、框架缓存器、综合工作区缓存、生成句工作区缓存等,以便于观察运行的整\n个信息情况;另外,在建库操作时,可以通过该接口对ANL语言描述库的内 容进行修改或增删。\n27. ANL指令行指针产生器:在通常的情况下,自动顺序"加l"产生 执行ANL指令时的行地址信息,其内容是数值的地址,比如当前的地址是 000034H,那么下一个产生的地址就是000035H。实际上就是一个可预置的计 数器,预置的数据可能是ANL指令执行过程中的跳转发生的地址。比如执行\n"GOTO"、 "CALL"、 "IF"、 "AND"、 "OR"等指令都会刷新该指令指针产生器的 值。也用于接受判断条件为"真"跳转行的缓冲器或判断条件为"假"跳转 行的缓冲器的输出信息,以通过ANL指针数据总线,由NLPU读取的ANL语言 指令来指定跳转地址的信息。\n28. 主流程/悬挂流程控制部件:主要是用于切换主流程和悬挂流程的 扩展词指令的执行,在执行完悬挂工作区缓存中的所有悬挂的扩展词指令的 后,自动地接着原来的主流程的当前处理完的扩展词指令的下一个扩展词指 令继续执行。以使两个流程的运行互相独立,不会发生错乱。\n29. 文本转写器:用于将人工智能机的文本缓存中的内容按照句子序 号、词的序号和框架缓存器的格式写入到框架缓存器中,在转写过程中,还 通过编码写入器(地址译码)来完成对人工智能机的地址译码器(框架缓存) 编码的写入。该文本转写器通过直接地址总线和直接数据总线来访问人工智 能机的文本缓存的(双口RAM),通过符号地址总线和符号数据总线访问框架 缓存器。关于人工智能机的地址译码器(框架缓存)的写入编码操作,参见\n"编码写入器"。\n30. 句子提取器:根据当前的句子指针产生器中的指针值,从框架缓存 器中提取该指针指定的句子。比如句子指针产生器中的指针"1/1",而该句 子的五个词为"1/1"(苹果),"1/2"(长),"l/3"(在),"l/4"(哪里),"1/5"\n(?),那么,提取的句子就是"苹果长在哪里?"。提取过程中需要多次访 问框架缓存器。提取过程结束后,并把提取的句子通过符号数据总线送到人 工智能机的句子缓存器。\n31. 句式提取器:根据当前的句子指针产生器中的指针值,从框架缓存 器中提取该指针指定的句式。比如句子指针产生器中的指针"1/1",而该句 子的五个词的词性为"1/1"(名词),"1/2"(动词),"1/3"(介词),"1/4"\n(哪里,林假设没有标明词性),"1/5" (?),那么,提取的句式就是"名+ 动+介+哪里+?"。提取过程中需要多次访问框架缓存器。提取过程结束后, 并把提取的句式通过符号数据总线送到人工智能机的句式缓存器。\n32. 词提取器:根据当前的词指针产生器中的指针值,从框架缓存器中 提取该指针指定的词。比如,词指针产生器中的指针"1/4",而该句子的第 四个词是"1/4"(哪里),那么所提取的词就是"哪里"。提取过程只需要访 问一次框架缓存器。提取过程结束后,并把提取的词通过符号数据总线送到 人工智能机的词缓存器。33. 编码写入器(地址译码):用于在把人工智能机的文本缓存的内容\n写向框架缓存器时,需要对不同的句子序号,不同的词序号及其在框架缓存 器的物理地址直接写入到人工智能机的地址译码器(框架缓存)中。以便于\n以后NLPU对以直接通过符号地址总线访问框架缓存器。该编码器是通过直接 数据总线和符号地址总线完成对地址译码器(框架缓存器)的编码写入工作 的。另外,还完成对其他的地址译码器的编码写入操作,比如地址译码器(生 成句)。\n34. 当前流程状态标志:表明当前的处理状态是处在主执行流程,还是 悬挂执行流程,用于NLPU执行某些操作时,依据该标志所进行的某些操作。\n35. 当前内容标志(句子、句式、词):表明当前处理的扩展词指令ANL 描述体是关于句子,还是句式或者是词。\n36. 生成句标志(句子、句式、词):表明当前的执行的生成句是由句 子引导的,还是句式引导的,甚或是由词引导的。\n37. 当前扩展词指令的工作区地址指针:表明当前主流程中的当前扩展 词指令在综合工作区的物理地址,也包括在执行悬挂流程中产生生成句的扩 展词指令的在综合工作区的物理地址。复位最开始时,该值为000。指向综合 工作区中的最开始的一个扩展词指令所在的物理地址。\n38. 扩展词指令的工作区长度参数量单元:该单元中保存每一个扩展词 指令在综合工作区中所占的物理空间长度,以所占用的单元的总数来确定的, 比如是256个地址空间(OOH"FFH)。该单元的参数一般是以常数形式出现的, 除非在工作模式"10"时选择,进行修改该参数。\n39. 加法器l:该加法器通过把"当前扩展词指令的工作区地址指针" 的值同"扩展词指令的工作区长度参数量单元"的内容相加,从而得到在综 合工作区中当前扩展词指令的工作区指针的下一个扩展词指令的工作区指 针,在综合工作区缓存中每一个新的扩展词指令的工作区的所在的最新物理 地址就是通过该加法器的结果得到的。\n40. 加法器2:用于在执行某些寄存器操作的时候,通过该加法器得到 寄存器的在综合工作区的绝对物理地址的值,并通过直接地址总线缓存器输 出到直接地址总线上。比如在执行指令"LETRR临时寄存器1 =临时寄存器 2"时,送至加法器的数据首先是"当前扩展词指令的工作区地址指针"的值, 以决定当前扩展词指令的在综合工作区缓存中最开始的物理地址;其次是来 自"自定义寄存器偏移量单元"的值,以根据当前扩展词指令的工作区的物 理地址来通过偏移量决定该扩展词指令的自定义的寄存器的最开始物理地 址。同时,由于是寄存器操作,所以,选通"零数据产生器",此时没有堆栈 的指针值输出。随后,根据该指令的"操作数1缓存器"指明的寄存器"临 时寄存器1"所在寄存器区编号(假设是03H),那么操作数1缓存器的输出 的"0犯"送到该加法器2进行加操作之后,结果就是在该扩展词指令的寄\n存器"临时寄存器l"的在综合工作区缓存的绝对的物理地址。同理,对于寄 存器"临时寄存器2"则也是在"操作数2缓冲器"中把"临时寄存器2"(假设(HH)在送到加法器2相加,得到该寄存器的在综合工作区缓存中的物理地 址。\n41. IF偏移量单元:在执行每个扩展词指令中的"IF…THEN…"ANL指 令时,该单元用于保存该扩展词指令的在综合工作区中所占的物理空间中的 IF堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移量。比 如某一个扩展词指令在综合工作区中所占的开始物理地址为000200H。如果 IF偏移量为10H的话,那么该扩展词指令的IF堆栈区的最开始的在综合工作 区中的绝对物理地址就是(000200H+10H=000210H)。该单元的参数一般是以 常数形式出现的,除非在工作模式"10"时,进行该参数修改。\n42. CALL偏移量单元:在执行每个扩展词指令中的"CALL…"ANL指令 时,该单元用于保存该扩展词指令的在综合工作区中所占的物理空间中的 CALL堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移量。 比如某一个扩展词指令在综合工作区中所占的开始物理地址为000200H。如果 CALL偏移量为20H的话,那么该扩展词指令的CALL堆栈区的最开始的在综合 工作区中的绝对物理地址就是(000200H+20H=000220H)。该单元的参数一般 是以常数形式出现的,除非在工作模式"10"时,进行该参数修改。\n43. PUSH偏移量单元:在执行每个扩展词指令中的"PUSH…"ANL指令\n时,该单元用于保存该扩展词指令的在综合工作区中所占的物理空间中的 PUSH堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移量。\n比如某一个扩展词指令在综合工作区中所占的开始物理地址为000200H。如果 PUSH偏移量为30H的话,那么该扩展词指令的PUSH堆栈区的最开始的在综合 工作区中的绝对物理地址就是(000200H+30H=000230H)。该单元的参数一般 是以常数形式出现的,除非在工作模式"10" B寸,进行修改该参数。\n44. 自定义寄存器偏移量单元:在执行每个扩展词指令中"DEFINER…" 的ANL指令时,该单元用于保存扩展词指令的在综合工作区中所占的物理空 间中自定义寄存器区的最开始地址相对于该扩展词指令的最开始的物理地址 的偏移量。比如,某一个扩展词指令在综合工作区中所占的开始物理地址为 000200H,如果自定义寄存器偏移量为40H的话,那么,该扩展词指令的自定\n义的寄存器区所在的最开始的在综合工作区中的绝对物理地址就是\n(000200H+40H=000240H),也即第一个编号为"00"的寄存器绝对物理地址。 该单元的参数一般是以常数形式出现的,除非在工作模式"10"时,选择进 行该参数的修改。\n45. 通用寄存器偏移量单元:在执行每个扩展词指令中含有统一名称的 通用寄存器(i, j, k…等)的ANL指令时,该单元用于保存扩展词指令的在 综合工作区中所占的物理空间中通用寄存器区的最开始地址相对于该扩展词 指令的最开始的物理地址的偏移量。比如某一个扩展词指令在综合工作区中 所占的开始物理地址为000200H。如果通用寄存器偏移量为50H的话,那么,\n该扩展词指令的自定义的寄存器区所在的最开始的在综合工作区中的绝对物 理地址就是(000200H+50H-000250H),该单元的参数一般是以常数形式出现的,除非在工作模式"10"时,进行修改该参数。\n以上的举例定义,就可以通过偏移量的计算得到IF堆栈区的范围是CALL 偏移量-IF偏移a^20H-10H-10H。因为IF堆栈区之后就是CALL堆栈区,同理\n可以计算到其他区域的大小,当然,这里是为了举例而假设每个区域的范围 都是10H。在系统工作之前,可以通过设置工作模式"10",来设置这些偏移\n量的大小,还有扩展词指令的工作区长度参数,从而完成一个扩展词指令的 工作区的各个分区的设置,这些参数保存在非易失性的存储单元中(比如 FLASH存储类),但这些参数在系统工作时候,则是不可更改的。\n46. IF调转地址堆栈指针产生器:当扩展词指令执行IF指令时,自动 将该IP指令的行号写入该扩展词指令的IF堆栈区,当出现IF…THEN…嵌套 时,则不断的将对应IF指令的行号写入到该堆栈区内,当执行到"ENDIF " 指令时,根据ENDIF指令的操作数,不断地执行出栈操作,从而完成嵌套的 进入和退出。该指针产生器在执行IF进栈时指针加1,保存数据;执行ENDIF 出栈时,先弹出数据,然后堆栈指针减l。每次最开始执行扩展词指令时,该 指针值为000。\n47. CALL调转地址堆栈指针产生器:当扩展词指令执行CALL指令时, 自动地将该CALL指令的行号写入该扩展词指令的CALL堆栈区,当出现CALL 嵌套时,则不断的将对应CALL指令的行号写入到该堆栈区内,当执行到\n"RETURN "指令时,根据RETURN指令的操作数,则不断地执行出栈操作, 从而完成嵌套的进入和退出。而该指针产生器在执行CALL进栈时指针加1, 保存数据;执行POP出栈时,先弹出数据,然后堆栈指针减l。每次最开始执 行扩展词指令时,该指针值为OOO。\n48. PUSH调转地址堆栈指针产生器:当扩展词指令执行PUSH指令时, 自动将该PUSH指令的指定的操作数(寄存器)的内容写入该扩展词指令的PUSH 堆栈区。当出现连续PUSH时,则不断地将对应PUSH指令指定的操作数(寄 存器)的内容写入到该堆栈区内,当执行到"POP"指令时,根据POP指令的 操作数,不断地来执行出栈操作,将堆栈中的数据出栈到指令指定的操作数\n(寄存器)。而该指针产生器在执行PUSH进栈时指针加l,保存数据;执行 POP出栈时,先弹出数据,然后堆栈指针减1。每次最开始执行扩展词指令时, 该指针值为000;\n49. 零数据产生器:该产生器只是产生一个OOOOH的数据输出,用于在 执行扩展词指令的非IF、 CALL、 PUSH等指令时,使之加法器2上的来自堆栈 指针的数据是零。此时,关闭各个堆栈的指针产生器的输出,只选通零数据 产生器的输出为OOOO。注意:所有堆栈指针产生器,像IF堆栈指针产生器、 CALL堆栈指针产生器、PUSH堆栈指针产生器等,在保护现场时,它们的值都 要写入到扩展词指令的工作区的指定单元,用于在恢复现场后,再接着继续 原来的执行。\n50. 扩展词指令地址堆栈区(产生悬挂):该堆栈区为NLPU内部的一个 支持堆栈操作的存储区,用于在执行扩展词指令的MAKE一ROM指令时,来保存产生"悬挂"的这些扩展词指令的在综合工作区缓存中的物理地址。以便于 "主流程/悬挂流程控制部件"在执行悬挂流程时,根据这些保存的物理地址\n直接再恢复到当时产生悬挂时的那个扩展词指令的现场,以接着使产生悬挂\n的那个ANL指令行所指定的那一行指令重新执行,通过判断产生悬挂的未知 信息是否为已知,以决定要么继续悬挂,要么退出悬挂。\n51. 扩展词指令地址堆栈指针(产生悬挂):该堆栈指针用来指明"扩 展词指令地址堆栈区(产生悬挂)"中的当前的最后进入堆栈保存的那个扩展 词指令的地址所在单元的位置,当NLPU复位时,该指针指向堆栈区的最底层\n(OOOH),当有进栈操作时,该指针先自动加l,然后,保存信息进入该指针 的所在位置的单元;该堆栈指针只是单调的加1操作,也即只有进栈操作, 对于属于先有悬挂,后来被清除的扩展词指令的地址则是建立清除标志,以 便于在悬挂执行流程时,当指针指向该单元时,通过判断是属于已被清除的 地址时,则直接加1进入下一个指针,该指针总是在每次开始执行悬挂流程 的开始时被指向最底层(000H)。\n52. 扩展词指令计数器(产生悬挂):用于记录在整个处理过程中产生 的悬挂的扩展词指令的个数,每当产生一个悬挂的扩展词指令,该计数器就 加1,该值并不随着悬挂的扩展词指令在执行中的悬挂被清除而改变。该计数 器主要是为了在执行悬挂流程中,对扩展词指令地址堆栈区中的悬挂的扩展 词指令在逐个执行时,如果执行的个数等于该计数器的值,就结束一次悬挂 工作区缓存的执行。\n53. 比较器:该比较器专门用于在执行悬挂工作区的内容时,判断扩展 词指令地址堆栈指针(产生悬挂)通过不断加1的值,是否等于扩展词指令 计数器(产生悬挂)中的值,如果相等,那么结束一次悬挂工作区缓存的执 行。\n54. 扩展词指令地址堆栈区(产生生成句):该堆栈区为NLPU内部的一 个支持堆栈操作的存储区域,用于保存在执行扩展词指令的MAKE一KNOWS/R指 令时,出现的生成句,甚至多个生成句的在嵌套执行的情况时,这些扩展词 指令在综合工作区缓存中的物理地址。以便"主流程/悬挂流程控制部件"在 根据句子指针产生器产生的生成句指针进行回退时,回退到产生该生成句的 那个扩展词指令所在的指针时,直接在恢复当时的现场,以接着使产生生成 句的那个ANL指令行的下一行指令接着执行,而对于生成句所在的现场的保 护是通过在该堆栈区直接保护当时的扩展词指令在综合工作区缓存的物理地 址。比如:根据句子指针"1-2-3/2w+3-2/l"进行回退时,产生的句子指针 是"1-2-3/1",词指针是"l-2-3/2w",行号解码器根据"*3"解码的ANL行 指针为第"3"行。当时的产生生成句的扩展词指令的现场,包括序号,寄存 器,IF堆圪,CALL堆栈,PUSH堆栈等就可以通过存放在"扩展词指令地址堆\n栈区(产生生成句)"中的该扩展词指令在综合工作区缓存的物理地址而恢复。 对于嵌套的情况,则是通过逐层恢复,逐层执行来完成的。\n55. 扩展词指令地址堆栈指针(产生生成句):该堆栈指针指明"扩展词指令地址堆栈区(产生生成句)"中的当前的最后进入堆栈保存的那个扩展 词指令的地址所在单元的位置,或是最后弹出堆栈的那个扩展词指令的地址\n所在单元的下一个单元位置。当NLPU复位时,该指针指向堆栈区的最底层\n(OOOH),当有进栈操作时,该指针先自动加l,然后保存信息进入该指针的 所在位置的单元;出栈操作时,先弹出当前指针指向单元的内容,然后指针 自动减l。\n56. 根句比较器:用于判断当前的外部输入文本的内容是否全部执行完 毕。当句子指针产生器所产生的句子指针(序号)在通过地址译码器(框架 缓存器)进行译码时,如果译码的结果为"不存在",也即"地址译码不存在\n(框架缓存器)"端的信号为有效时,并且,此时句子指针产生器中的句子 指针在"根句比较器"也是被判断为"根句",那么,"根句比较器"直接输 出"全程结束"信号,该信号控制"主流程/悬挂流程控制部件"产生整个NLPU 运行结束的操作,并在"运行结束"端输出有效信号,以表明此次NLPU运行\n结束o\n57. 当前内容标志缓存器(句子、句式、词):用于在进入悬挂执行流\n程时,先暂时地保存当前内容标志(句子、句式、词)的内容,当从悬挂执 行流程返回到主指令流程时,再将该缓存器的内容返回到当前内容标志(句 子、句式、词)中。\n58. 悬挂消除控制部件:用于在执行悬挂流程中,对于在扩展词指令地 址堆栈区(产生悬挂)中的由原来的"悬挂"状态转换为不"悬挂",也即从 扩展词指令地址堆栈区(产生悬挂)中清除操作时,该悬挂消除部件完成对 堆栈区的相应处理,主要是对被清除的原来地址内容进行清除,清除操作是 通过向对应地址单元写入清除标志来完成的。\n对NLPU而言,当外部输入文本通过外部输入接口送到文本缓冲后,随即 启动NLPU的工作时序。整个过程分为两个流程:主执行流程和悬挂执行流程。\n主执行流程:主要是直接按正常顺序逐个执行文本(外部输入文本或是 知识库中体部中的句子文本)中的内容的扩展词指令(句子、句式、词),直\n到所有的文本执行结束的过程,在主执行流程中,每执行一个扩展词指令之 后,都要执行一次悬挂执行流程。\n悬挂执行流程:根据在悬挂工作区缓存中存放的那些悬挂的扩展词指令 (句子、句式、词)的顺序,来逐个执行那些曾经在主执行流程中执行过, 但因在处理过程中某些信息的暂时不全,而"悬挂"在悬挂工作区缓存中的 那些"悬挂"的扩展词指令的过程。此外,在悬挂执行流程中,也会由 MAKE—KNOWS类指令再产生生成句的执行,该过程属于悬挂中的主执行流程, 但在该悬挂中的主执行流程中不再执行悬挂执行流程。\nNLPU的总体工作过程如下:\n1. 首先,对NLPU内部中的所有的部件进行初始化,比如大部分的寄 存器被初始化为零;句子指针产生器的值为"1/1"(最开始的一个根句的句子指针值),同时,也会设置词指针产生器的值为"1/1"(最开始的一个根句 的第一个词的指针值),因为,每次句子指针产生器的值发生改变,都会直接\n刷新词指针产生器的值;同时直接根据句子指针产生器的值或是词指针产生 器的值的变化,而刷新目标译码器中的当前扩展词指令的主指针和浮动指针 的值:主流程/悬挂流程部件中的流程状态标志初始化设置为"主流程"状态。 另外,ANL指令行指针产生器也被初始化为零,因为在主执行流程中,只要是 句子指针产生器的值,或者是词指针产生器的值发生变化,都会直接对ANL 指令行指针产生器进行清零,除非是在悬挂执行流程中,对ANL指令行指针 产生器的值则是通过保护过的现场进行赋值,因为"悬挂"扩展词指令进入 "悬挂"时保护了当时的各种现场,包括ANL指针值;此外,在产生生成句 的那个扩展词指令返回现场时,也是通过保护的现场数据恢复当初的ANL指 针值。\n2. 通过NLPU中的文本转写器把人工智能机的文本缓存(双口 RAM)中 的内容写入到框架缓存器中,该过程是通过直接地址总线和直接数据总线来\n读取文本缓存(双口RAM)中的数据。然后,再通过符号地址总线和符号数据 总线,将文本缓存(双口RAM)中的数据,按照框架缓存器的格式写入到框架 缓存器中。当然,这期间也包括根据当前的文本内容对地址译码器(框架缓 存)进行编码写入操作,这部分任务是由文本转写器中的编码写入器(地址 译码)来完成的。\n3. 根据当前的句子指针产生器的值,句子提取器不断地以当前句子指 针的前缀来产生递增的词的序号,比如,当前的句子值为"1-2/1",那么句 子指针的前缀是"l-2/",不断产生的递增的词的序号可能就是"1-2/2"、\n"1-2/3"、 "1-2/4"、 "1-2/5"等等,然后通过符号地址总线缓存器送到符号\n地址总线上,并由地址译码器(框架缓存)转换成框架缓存器的物理地址, 从而完成从框架缓存器中读取相应的词的名称,并通过地址译码器(框架缓 存)对产生的递增的词序号在进行译码时,是否发出"不存在"标志,来决 定一个句子的提取过程结束,比如上个例子该句子总共4个词,产生6Tl-2/5" 在经过译码时,地址译码器(框架缓存)必然输出不存在的信号,也表明此 次的由四个词组成的句子已经提取完毕。之后,则将提取到的在句子提取器 中的句子,再通过符号数据总线传送到人工智能机的句子缓存器中。\n4. 句子缓存器在读到NLPU送来的句子后,主流程/悬挂流程控制部件 的"知识库匹配启动"端则发出有效信号,直接启动"句子的自然语言描述 库"针对该句子缓存器中的句子进行匹配査找,直接将匹配的结果送NLPU的\n"知识库匹配结果"信号线,该信号线由2根线构成,当匹配初期时,传送 给NLPU的是"00"(匹配中);匹配结束后,传送的"01"表明匹配成功,而 传送的"10"则表明匹配失败。\n5. 当知识库匹配成功时,主流程/悬挂流程控制部件直接控制句子指 针产生器产生该句子指针的子句的指针值,比如当前是"1/1",那么子句指 针是"1-1/1",同时也直接以此值刷新词指针产生器的值。与此同时,句子的自然语言描述库中该句子对应的体部中的所有句子,也写向文本缓存(双\n口RAM)中,NLPU根据文本缓存已经写入的情况,将其中的数据由文本转写 器写入到框架缓存器中,此时写入框架缓存器所依据的指针是根据句子指针 产生器中的值,也即刚才产生的子句的指针值来进行的。关于对文本缓存内 容写向框架缓存器的操作,在前面已讲述,参见"NLPU工作过程--总体过程 一步骤2"。\n6. 当文本缓存的内容全部写向框架缓存器后,则再继续重复"NLPU工 作过程一总体过程一步骤3-5",只不过每次是基于不同的句子指针的操作而 已,直到在知识库中匹配失败为止,也即"知识库匹配结果"信号线上出现 "10",此时,主流程/悬挂流程控制部件的"ANL库匹配启动"端则发出有效\n信号,直接启动句子缓存器中的内容进入ANL语言描述库的"句子的ANL语 言描述库"进行匹配査找。同知识库的匹配过程类似,直接将匹配结果送NLPU 的"ANL库匹配结果"信号线,该信号线由2根线构成,在匹配初期时,传送 给NLPU的是"00"(匹配中);匹配结束后,传送的"01"表明匹配成功,而 传送的"10"则表明匹配失败。只不过这里是在地址译码器(句子)中的匹 配,而不是在自然语言描述的知识库中进行匹配而已。\n7. 如果在ANL语言描述库中匹配成功,那么就直接执行关于该句子的 ANL语言描述的描述体,参见"NLPU工作过程-一指令执行"。如果匹配失败, 那么还要通过当前的词指针产生器的指针值通过词提取器,来提取当前词的 名称,这同句子的提取操作的过程类似,然后将词送到词缓存器中,先到词 的自然语言描述库进行匹配,如果成功,那么类似于句子的从文本缓存向框 架缓存器的操作,不再焚述。如果匹配失败,直接进入词的ANL语言描述库 中进行匹配,如果匹配成功,那么就执行词的ANL语言描述库的关于该词的 ANL语言描述体,参见"NLPU工作过程一-指令执行"。如果是匹配失败,那 么,在文本输出接口中,输出"该词库中没有对应描述!"的提示信息,系统 执行直接被终止,必须先建有该词库后才能执行。\n8. 当一个ANL描述体被执行完之后,如果当前主流程/悬挂流程控制 部件的"当前流程状态标志"是主执行流程的状态的话,则直接切换到悬挂 执行流程状态,并设置"当前流程状态标志"为悬挂执行流程标志,执行悬 挂工作区缓存中的"悬挂"的扩展词指令,参见"NLPU工作过程---指令执行"。 当悬挂工^区缓存中的内容执行完后,再切换为"当前流程状态标志"为主 执行流程标志。\n9. 主流程/悬挂流程控制部件根据其中的"当前内容标志(句子,句 式,词)"状态来决定下一个步骤是执行下一个句子,下一个词,还是句式的 执行。该标志不被悬挂执行流程所影响,只是供主执行流程或是悬挂中的主 执行流程所使用。比如"当前内容标志"是句子或者是句式,那么,直接控\n制"句子指针产生器"来产生下一个句子的指针;如果"当前内容标志"是 词的话,那么,直接控制"词指针产生器"产生下一个词的指针。假设是按 照词的提取并执行的,当产生的词指针在进行词提取时,若"地址译码不存在(框架缓存)"端有效,则进入句式提取的操作,关于句式提取和执行同句\n子的操作过程类同,如果是在自然语言描述的知识库匹配成功,或者是在ANL 语言描述库匹配成功,其具体执行过程参看步骤"NLPU工作过程--总体过程 一-步骤3-—8"的句子执行。\n10.在执行过程中,如果句子指针产生器产生的指针在地址译码器(框\n架缓存)进行译码时,"地址译码不存在(框架缓存)"端有效,并且主流程 "根句比较器"的根句判断的输出也有效(当前句指针是根句),那么,整个 人工智能机的对外部文本的操作全部执行完毕。可用于进入下一个新的外部 输入文本的执行。否则,如果不是全部执行结束,那么就继续按照句子指针 产生器的句子指针,或者是词指针产生器的词指针,按照前面讲述的过程接 着继续不断地执行下去,直至执行到全程输入文本的执行结束。 NLPU对指令的执行过程如下:\n1. ANL指令行指针产生器的值,通常在主执行流程中执行一个扩展词\n指令时,都是随句子指针产生器和词指针产生器的变化而被清零,也即都是 从第0行(BEGIN)来开始执行扩展词指令的ANL语言描述体的,对于悬挂流\n程中的扩展词指令的执行,则是通过直接数据总线读取综合工作区中的悬挂 工作区缓存中的扩展词指令在保护现场时所记录的当时的ANL指令行的指针 的值。并且再通过行号编解码器把符号型的行号数据转换到数值数据写入到 ANL指令行指针产生器中。当然在写"悬挂"的扩展词指令的现场时,也是通 过行号编解码器将当前的ANL指令行指针发生器中的数值型的行号数据转换 成字符型的数据,写入到综合工作区缓存中的该悬挂的扩展词指令的对应的 保护ANL指令行指针的单元中的。\n2. NLPU从ANL语言描述库读取一条ANL指令时,首先,根据ANL指令 的指令格式,分别进入相应的缓冲器中进行缓存,比如指令码缓冲器、操作 数l缓冲器,运算符缓冲器、操作数2缓冲器等。指令码译码器首先对指令 码缓冲器中的指令码进行译码,然后,通过指令译码器来产生NLPU针对该指 令操作的所有相关部件的工作时序。随着指令码内容的不同,指令译码器所 产生的操作过程也不相同。\n下面对ANL语言指令进行详细说明。\n扩展词指令的ANL语言描述的格式为:\n扩展词指令名称 行号 标号 指令码 操作数l 运算符 操作数2\n注:"……"部分为t 旨令操作的的p 付加项,f 涂了注释外(解释列),其余的则 为编译后自动生成的部分。\n下面是与执行ANL指令有关的具体列的内容。\nCASE 目标不存 IP指令条件 IF指令条件 解释列-\n在调转的行 为"其"眺转行 为跳转行 -对指令 的注释\n号(地址) 号(地址) 号(地址)这里的目标不存在调转的行号(地址)——可人为设置,IF指令条件为\n"真"跳转行号(地址),IF指令条件为"假"跳转行号(地址)都是系统编\n译时自动生成的相应的跳转地址,对于是人为地进行设置的目标不存在调转 的行号(地址),则系统根据人为设置的标号行(一般都是以标号形式来表示\n的,如"LP1", "NN2"等,而不是绝对的行号地址如"1000", "2500"等) 进行编译。 DEFINER\n格式:DEFINER自定义寄存器名称(操作数l) 内部寄存器号(MEMxx) (操作数2)\n举例:DEFINER位置寄存器訓Ol\n说明:该指令是对自定义名称的寄存器,与内部的寄存器区空间编号建 立相应的映射,比如,例子中的"位置寄存器"映射内部的寄存器"MEM01"。\n注意:自定义的寄存器名称不能有重名,内部寄存器号也不能有重复, 否则容易造成执行上的错误。再有,内部寄存器号都不能超出范围,比如, 目前设置的值是40,也即最多可有40个寄存器能够提供使用,当确实要增加 更多时,应重新设置范围值。此外,系统在编译时也都能够检査出来有重名 和超范围的错误。 TEXT\n格式:TEXT描述性的文字(操作数l)\n举例:TEXT这是一个测试的程序! 说明:该指令是声明这是陈述一个说明性的内容,不执行任何操作,只 是便于理解程序而设置的。比如,例子中"这是一个测试的程序!"就是说明 当前程序的内容是一个测试的程序。\n注意:该指令一般只在必要时候使用,通常时的关于程序解释的陈述性 文字,最好设置指令的解释列中。因为虽然不执行任何操作,但还是占用指 令时间,因为是作为一个指令来操作的,而对于解释列中的内容,则是属于 机器执行时"不予理会"的内容,仅是便于程序阅读和理解的。同时在解释 列中的内容,更可方便对每一条ANL指令进行解释说明。再有,该指令中的 操作数l中的字符数不宜过多,通常限制在20个字以内。\n格式:IF直接寻址的内容(操作数l)运算符立即数(操作数2)跳 转-真跳转-假\n举例:IF该句.该句.该词.产地二 .化即01\20 .j咖p02 \\n说明:该指令是一个对当前直接寻址的内容与立即数进行逻辑判断的指\n令,如果条件为"真",那么就跳转到该指令的"凝^^-真"这个列中的所指\n明的地址,比如例子中的"ju即0lNv20"。 一般情况是"跳转"到当前这个IF 指令对应的"THENj""这个指令行,除非是在该IF指令之后紧接着有"ANDx" 或"ORx"之类指令;如果条件为"假",那么就跳到该指令的"跳转-假"这 个列中的所指明地址,比如例子中的"jump02X30"。 一般情况下,是"跳转"到当前这个IF指令对应的"ELSE一…"这个指令行,除非是该IF指令之后没 有对应的"ELSE」""类指令,此时直接跳转到该IF指令对应的"ENDIF"这 个行指令,以便结束该次IF指令的判断操作。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是 指在当前句子的第一个词的位置上了,若是再执行"该句.该句.上一词.产地" 这个操作数,其中的"上一词"是非法的,不存在的。此时,系统会自动执 行"目标不存在调转的行号(地址)"这个列中指明的地址,该地址是在系统 编译时,自动生成的一个产生"目标不存在!"的这个错误提示的指令行的地 址。当然,"目标不存在调转的行号(地址)"这个列中指明的地址的内容, 也可以人为地进行修改,比如跳转到人为指定的位置继续执行下去,而不会 产生错误提示。当人为地修改地址内容时,系统在编译时就会按照人的指定 的标号行来编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!" 错误提示的指令行的地址。\n2. 该指令的操作数2必须是属于立即数的内容,比如数字,字符, 短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n3. 该指令的运算符可以是:、"(等于),(不等于), (大于),(大于等于),(小于),(小于等于)。\n4.该指令还可以使用"厶"(存在)和"C"(不存在)操作数,操作数 来判断当前寻址的目标是否存在,比如:\n"IF该句.该句.上一词.产地- △"就是表明如果当前寻址目标存 在……,\n"IF该句.该句.上一词.产地=就是表明如果当前寻址目标不 存在……,\n当然,采用-!?(不等于)也同样可以完成判断,比如: "IF该句.该句.上一词.产地!= △"就是表明如果当前寻址目标 不存在……, IFR\n格式:IFR直接寻址的内容(操作数l)运算符寄存器(操作数2)跳 转-真跳转-假\n举例:IFR该句.该句.该词.产地二位置寄存器.jumpOl \ 20 j咖p02 \ 30\n说明:该指令是一个对当前直接寻址的内容与寄存器内容进行逻辑判断 的指令,如果条件为"真",那么就跳转到该指令的"逸^^-真"这个列中的 所指明的地址,比如例子中的"j咖p0lX20"。 一般情况是"跳转"到当前这 个IFR指令对应的"THEN_〜"这个指令行,除非是该IFR指令之后紧接着有"ANDxx"或"ORxx"之类指令;如果条件为"假",那么就跳到该指令的"跳 转-假"这个列中的所指明地址,比如例子中的"JmiiP02\30"。 一般情况下, 是"跳转"到当前这个I冊指令对应的"ELSE一…"这个指令行,除非是该IFR 指令之后没有对应的"ELSE_〜"类指令,此时直接跳转的是该IFR指令对应 的"ENDIF"这个行指令,以便结束该次IFR指令的判断操作。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是 指在当前句子的第一个词位置了,若是执行"该句.该句.上一词.产地"这个 操作数,这时的"上一词"操作则是非法的,是不存在的。此时,系统会自 动执行"目标不存在调转的行号(地址)"这个列中指明的地址,该地址是系 统在编译时,自动生成的一个产生"目标不存在!"这个错误提示的指令行 的地址。当然,"目标不存在调转的行号(地址)"这个列中指明的地址的内 容,也可以人为地进行修改,比如跳转到人为指定的位置继续执行下去,而 不会产生错误提示。当人为地修改地址内容时,系统在编译时就会按照人的 指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生"目标不 存在!"错误提示的指令行的地址。\n2.该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也 即操作数2内容必须是该扩展词指令描述中采用DEFINER指令所声明的寄存 器名。比如例子中,"位置寄存器"就可以是指令"DEFINER位置寄存器 MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器 i,丄k…,尽管不是用DEFINER指令声明的。\n3.该指令的运算符可以是:(等于),^!-"(不等于), (大于),(大于等于),丫 (小于),V (小于等于)。\nIFRK\n格式:IFRK麥存器(操作数l)运算符立即数(操作数2)跳转-真 跳转-假\n举例:IFRK位置寄存器二 iuiDP01\20 .]'咖t)02Ny30\n说明:该指令是一个对当前寄存器的内容与立即数进行逻辑判断的指令, 如果条件为"真",那么,就跳转到该指令的"^^^^真"这个列中的所指明\n的地址,比如例子中的"jump01\20"。 一般情况下,是"跳转"到当前这个 IFRK指令对应的"THEN—…"这个指令行,除非是在该IFRK指令之后紧接着 有"ANDxx"或"ORXX"之类指令:如果条件为"假",那么,就跳到该指令 的"跳转-假"这个列中的所指明地址,比如例子中的"jump02\30"。 一般 情况下,是"跳转"到当前这个IFRK指令对应的"ELSE—这个指令行, 除非是该IFRK指令之后没有对应的"ELSE一…"类指令,此时直接跳转的是 该IFRK指令对应的"ENDIF"这个行指令,以便结束该次IFRK指令的判断操 作。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令所声明 的寄存器名。比如例子中,"位置寄存器"就可以是指令"DEFINER位置寄 存器MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n2.该指令的操作数2必须是属于立即数的内容,比如数字,字符, 短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i,丄k…。比如例子中"上海"就是一个字符型立即\n3.该指令的运算符可以是: 〃="(等于),(不等于),O"(大于),\n(大于等于), "《(小于),?=〃 (小于等于)。 IFRR\n格式:IFRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真 跳转-假\n举例:IFRR位置寄存器1 二位置寄存器2 j咖pOA20 j咖p02 \\n巡\n—说明:该指令是一个对当前寄存器的内容与寄存器内容进行逻辑判断的 指令,如果是条件为"真",那么就跳转到该指令的"凝?斧真"这个列中的 所指明的地址,比如例子中的"j™p01\20"。 一般情况下,是"跳转"到当 前这个IFRR指令对应的"THEN」""这个指令行,除非是在该IFRR指令之后 紧接着有"ANDn"或"ORn"之类指令;如果条件为"假",那么,就跳到 该指令的"跳转-假"这个列中的所指明地址,比如例子中的"jump02\30"。 —般情况下,是"跳转"到当前这个IFRR指令对应的"ELSE一…"这个指令 行,除非是该IFRR指令之后没有对应的"ELSE」""类指令,此时直接跳转 的是该IFRR指令对应的"ENDIF"这个行指令,以便结束该次IF股指令的判 断操作。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令所声明 的寄存器名。比如例子中,"位置寄存器1"就可以是执行指令"DEFINER位 置寄存器l MEM15"声明的寄存器。当然,也可以是该扩展词指令的公用寄 存器i, j,k…,尽管不是用DEFINER指令声明的。\n2.该指令的操作数2必须是寄存器,要求同l,比如这里的"位置 寄存器2"就可以是指令\n"DEFINER位置寄存器2 MEM25"执行后,声明的寄存器。 3.该指令的运算符可以是:Y (等于),(不等于),Y (大于),\n(大于等于),?"(小于),(小于等于)。 AND\n格式:AND直接寻处游力棼(操作数1)运算符立即数(操作数2)跳转-真跳转-假\n举例:AND该句.该句.该词.产地二 皿j咖p01、2Q iump02 \\n巡\n说明:该指令接着IFn类指令之后,由多个该指令并列完成多个"与" 判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进 行逻辑判断的指令,如果条件为"真",那么就跳转到该指令的"教?斧真" 这个列中的所指明的地址,比如例子中的"jumP01\20"。直接是"跳转"到 当前这个AND指令所对应的前面的IFxx类指令对应的"THEN—…"这个指令 行:如果条件为"假",那么就跳到该指令的"跳转-假"这个列中的所指明 地址,比如例子中的"jump02\30"。 一般情况是"跳转"到当前这个AND指 令对应的前面的IFxx类指令对应的"ELSE一","这个指令行,除非是该IFxx 类指令之后没有对应的"ELSE_,""类指令,此时则直接瑕啭的是该IFm类 指令对应的"ENDIF"这个行指令,以便结束该次IFxx类指令的判断操作。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一亂产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示\n的指令行的地址。\n2. 该指令的操作数2必须是属于立即数的内容,比如数字,字符,\n短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i, j,k…,尽管不是用DEFINER指令声明的。\n3. 该指令的运算符可以是:(等于),(不等于), (大于),(大于等于),(小于),、=〃 (小于等于)。\n4.该指令还可以使用"厶'(存在)和"C (不存在)操作数,操作数\n来判断当前寻址的目标是否存在,比如:\n"AND该句.该句.上一词.产地=△"就是表明如果当前寻址目标存 在…-.',\n"AND该句.该句.上一词.产地=C"就是表明如果当前寻址目标 不存在……,\n当然,采用'!?(不等于)也同样可以完成判断,比如: "AND该句.该句.上一词.产地!= △"就是表明如果当前寻址目标不存在,\n1. 该指令可以在IFxx类指令之后多个并棑使用该指令来完成多个 "与"判断,也可以是ANDR, ANDRK, ANDRR。 比如:\nIF 该句.该句.该词.产地=上海 AND 该句.该句.该词.数量=100 AND 该句.该句.该词.颜色=红色 ANDR该句.该句.该词.颜色=颜色寄存器\nANDR\n格式:ANDR ^f接寻处游力吝(操作数l)运算符寄存器(操作数2) 跳转-真跳转-假\n举例:ANDR该句.该句.该词.产地二 iump01\20 ju即02\n\30\n说明:该指令接着IFXX类指令之后,由多个该指令并列完成多个"与"\n判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数 进行逻辑判断的指令,如果条件为"真",那么就跳转到该指令的"教?^"真" 这个列中的所指明的地址,比如例子中的"jumP0l\20"。直接是"跳转"到 当前这个ANDR指令对应的前面的IFxx类指令对应的"THEN一…"这个指令行;\n如果条件为"假",那么就跳到该指令的"跳转-假"这个列中的所指明地址, 比如例子中的"jump02\30"。 一般情况是"跳转"到当前这个ANDR指令对 应的前面的IFxx类指令对应的"ELSE—…"这个指令行,除非是在该IFm类 指令之后没有对应的"ELSE一…"类指令,此时直接瑕啭的是该IFxx类指令 对应的"ENDIF"这个行指令,以便结束该次IFxx类指令的判断操作。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。\n2.该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也名。比如例子中,"位置寄存器"就可以是指令"DEFINER位置寄存器MEM01" 执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i, j, k…, 尽管不是用DEFINER指令声明的。\n3. 该指令的运算符可以是:(等于),(不等于),(大于), (大于等于),〃<^ (小于),(小于等于)。\n4. 指令可以在IFxx指令之后多个并排使用完成多个"与"判断,也可 以是AND, ANDRK, ANDRR。\n比如:\nIF 该句.该句.该词.产地=上海 ANDR该句.该句.该词.数量=数量寄存器 ANDR该句.该句.该词.颜色=颜色寄存器\n膽RK\n格式:ANDRK寄存器(操作数l)运算符立即数(操作数2)跳转-真跳转-假\n举例:AND孤位置寄存器2 ^ .iump01\20 .i咖p02乂30 说明:该指令接着IFxx类指令之后,由多个该指令并列完成多个"与" 判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进 行逻辑判断的指令,如果条件为"真",那么,就跳转到该指令的"跳转-真" 这个列中的所指明的地址,比如例子中的"j咖pOA20"。 一般情况是"跳转" 到当前这个IFxx指令对应的"THEN—…"这个指令行;如果条件为"假",那 么就跳到该指令的"跳转-假"这个列中的所指明地址,比如例子中的"j咖p02 \30"。在一般情况,是"跳转"到当前这个IFxx指令对应的"ELSE一…"这 个指令行,除非是该IFxx指令之后没有对应的"ELSE一…"类指令,此时直 接跳转的是该IFxx指令对应的"ENDIF"这个行指令,以便结束该次IFxx指 令的判断操作。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如例子中,"位置寄存器"就可以是指令"DEFINER位置寄存 器MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄 存器i, j, k,",尽管不是用DEFINER指令声明的。\n2.该指令的操作数2必须是属于立即数的内容,比如数字,字符, 短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i, j,k…。比如例子中"上海"就是一个字符型立即 数。3.该指令的运算符可以是:(等于),(不等于), 〃〉"(大于), (大于等于),\nT (小于),(小于等于)。 ANDRR\n格式:ANDRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真跳转-假\n举例:ANDRR位置寄存器1 二位置寄存器2】'11即01\20 .iu即02 \30\n说明:该指令接着IFxx类指令之后,由多个该指令并列完成多个"与" 判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内 容进行逻辑判断的指令,如果是条件为"真",那么就跳转到该指令的"跳转 -真"这个列中的所指明的地址,比如例子中的"jmnp01\20"。一般情况是 "跳转"到当前这个IFxx指令对应的"THEN」,,"这个指令行,,如果条件为\n"假",那么就跳到该指令的"跳转-假"这个列中的所指明地址,比如例子 中的"jump02人30"。一般情况是"跳转"到当前这个IFxx指令对应6tTELSE—…"\n这个指令行,除非是在该IFxx指令之后没有对应的"ELSE一…"类指令,此 时直接跳转的是该IFxx指令对应的"ENDIF"这个行指令,以便结束该次IFxx 指令的判断操作。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位置寄存器1"就可以是执行指令"DEFINER位 置寄存器l MEM15"所声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n2.该指令的操作数2必须是寄存器,要求同l,比如这里的"位置 寄存器2"就可以是指令\n"DEFINER位置寄存器2 MEM25"执行后,声明的寄存器。 3.该指令的运算符可以是:〃^ (等于),(不等于),*〉"(大于),\n(大于等于),"《(小于),(小于等于)。 OR\n格式:OR直接寻址的内容(操作数l)运算符立即数(操作数2)跳 转-真跳转-假\n举例:OR该句.该句.该词.产地二 ^ .】'u即01 \ 20 ju即()2 \\n说明:该指令接着IFxx类指令之后,由多个该指令并列完成多个"或" 判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进 行逻辑判断的指令,如果条件为"真",那么,就跳转到该指令的"跳转-真" 这个列中的所指明的地址,比如例子中的"jumP01\20"。直接是"跳转"到 当前这个OR指令所对应的前面的IFxx类指令对应的"THE^…"这个指令行: 如果条件为"假",那么就跳到该指令的"跳转-假"这个列中的所指明地址,比如例子中的"jump02\30"。 一般情况该"跳转"是指向当前这个OR指令 后面的指令行,以便继续执行后面的可能的ORxx类的指令或是遇到THEN_XX 为止。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。\n2. 该指令的操作数2必须是属于立即数的内容,比如数字,字符, 短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n3. 该指令的运算符可以是:(等于),(不等于),〃>" (大于),(大于等于),T (小于),(小于等于)。\n4.该指令还可以使用一厶〃 (存在)和"CT (不存在)操作数,操作数 来判断当前寻址的目标是否存在,比如:\n"OR该句.该句.上一词.产地=△"就是表明如果当前寻址目标存 在……,\n"OR该句.该句.上一词.产地- C"就是表明如果当前寻址目标不 存在"…,,\n当然,采用-!?(不等于)也同样可以完成判断,比如: "OR该句.该句.上一词.产地!= △"就是表明如果当前寻址目标 不存在……,\n2. 该指令可以在IFxx类指令之后多个并排使用该指令来完成多个 "或"判断,也可以是ORR, 0RRK, 0RRR。 比如:\nIF 该句.该句.该词.产地=上海 OR该句.该句.该词.数量=100 OR该句.该句.该词.颜色=红色 ORR该句.该句.该词.颜色=颜色寄存器ORR\n格式:ORR直接寻址的内容(操作数l)运算符寄存器(操作数2) 跳转-真跳转-假\n举例:ORR该句.该句.该词.产地二 , .jump01\20 .ju即02 \\n—说明:该指令接着IFxx类指令之后,由多个该指令并列完成多个"或" 判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数 进行逻辑判断的指令,如果条件为"真",那么就跳转到该指令的"跳转-真" 这个列中的所指明的地址,比如例子中的"jump01\20"。直接是"跳转"到 当前这个ORR指令所对应的前面的IFxx类指令汾应的"THEN—…"这个指令 行;如果条件为"假",那么就跳到该指令的"跳转-假"这个列中的所指明 地址,比如例子中的"j咖p02人30"。 一般情况该"跳转"是指向当前这个ORR 指令后面的指令行,以便继续执行后面的可能的ORxx类的指令或是遇到 THEN_xx为止。\n^意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句,该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。\n2. 该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也 即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器 名。比如在例子中,"位置寄存器"就可以是指令"DEFINER位置寄存器 MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器 i, j, k…,尽管不是用DEFINER指令声明的。\n3. 该指令的运算符可以是:(等于),(不等于),(大于), (大于等于),"《(小于),(小于等于)。\n4. 指令可以在IFxx指令之后多个并排使用完成多个"或"判断,也可 以是0R, ORRK, 0RRR。\n比如:\nIF 该句.该句.该词.产地=上海ORK该句.该句.该词.数量=数量寄存器 ORR 该句.该句.该词.颜色=颜色寄存器\nORRK\n格式:ORRK寄存器(操作数l)运算符立即数(操作数2)跳转-真 跳转-假\n举例:ORRK位置寄存器二 M 化即01\20 ium。02\30 说明:该指令接着IFxx类指令之后,由多个该指令并列完成多个"或" 判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进 行逻辑判断的指令,如果条件为"真",那么,就跳转到该指令的"跳转-真" 这个列中的所指明的地址,比如例子中的"ju即01人20"。 一般情况下,是"跳 转"到当前这个IFxx指令对应的"THEN—…"这个指令行;如果条件为"假", 那么就跳到该指令的"頃鹏-假"这个列中的所指明地址,比如例子中的 "j咖p02 \ 30"。 一般情况该"跳转"是指向当前这个ORR指令后面的指令行, 以便继续执行后面的可能的ORxx类的指令或是遇到THEN_XX为止。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如例子中,"位置寄存器"就可以是指令"DEFINER位置寄存 器MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄 存器i,j,k…,尽管不是用DEFINER指令声明的。\n2.该指令的操作数2必须是属于立即数的内容,比如数字,字符, 短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i, j,k…。比如例子中"上海"就是一个字符型立即数。\n3.该指令的运算符可以是:、'(等于),(不等于),(大于),\n(大于等于), '《(小于),(小于等于)。 ORRR\n格式:ORRR寄存器(操作数l)运算符寄存器(操作数2)跳转-真 跳转-假\n举例:ORRR位置寄存器1 二位置寄存器2 .i卿01、20 i咖p02 \\n巡\n说明:该指令接着IFxx类指令之后,由多个该指令并列完成多个"或" 判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内 容进行逻辑判断的指令,如果是条件为"真",那么就跳转到该指令的"跳转 -真"这个列中的所指明的地址,比如例子中的"J'咖p0lX20"。 一般情况是 "跳转"到当前这个IFxx指令对应的"THEbL…"这个指令行:如果条件为"假",那么就跳到该指令的"跳转-假"这个列中的所指明地址,比如例子\n中的"jmnp02\30"。 一般情况下,该"跳转"是指向当前这个ORRR指令后 面的指令行,以便继续执行后面的可能的ORxx类的指令或是遇到THEN_xx为 止。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位置寄存器1"就可以是执行指令"DEFINER位 置寄存器l MEM15"所声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i, j,k…,尽管不是用DEFINER指令声明的。\n2.该指令的操作数2必须是寄存器,要求同l,比如这里的"位 置寄存器2"就可以是指令\n"DEFINER位置寄存器2 MEM25"执行后,声明的寄存器。 3.该指令的运算符可以是:(等于),(不等于),"Z (大于),\n(大于等于),*《(小于),、=* (小于等于)。 ENDIF\n格式:ENDIF标号(操作数l) 举例:ENDIF\n说明,.该指令接着IFxx类指令之后,完成一个"IFxx ••• THEN—xx… ELSE一xx…ENDIF",来表明这样一个IFxx类语句体的结束。\n^意:该指令的操作数l (标号),必须是在标号列中存在的名称,可以\n是数字和字符的某种组合,并且该标号正好是该ENDIF指令对应的IFxx指令 的行号。\n比如:tt00: IFxx…\nTHEN—xx…\nELSE—xx "•\nENDIF tt00\n这里的"tt00"就是对应的IFxx指令的行号。\nEND\n格式:END\n说明:该指令是表明对一个描述扩展词指令的ANL语言描述体的结束的 指令,每一个ANL描述体必须有一个"END"指令。当系统执行到该指令就从 当前的扩展词指令执行中退出。\n注意:该指令的操作数部分都是全空的。该指令也可以在ANL语言描述\n的中途出现,用于直接从某个"中途"位置退出来,主要用于调试时使用。 LET格式:LET直接寻址的内容(操作数l)运算符立即数(操作数2) 举例:LET该句.该句.该词.产地二 ^\n说明:该指令是一个对当前直接寻址的内容通过立即数进行赋值的指令, 比如在例子中,就是完成将立即数"上海"(字符型)赋值给当前扩展词指令 的当前的浮动指针所直接寻址的"该句.该句.该词.产地"操作数1指定的位 置,该指令执行完后,浮动指针所指的当前词的"产地"属性被赋予"上海"\n这样一个值。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针己经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时,\n自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。\n2.该指令的操作数2必须是属于立即数的内容,比如数字,字符, 短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n3.该指令的运算符可以是:、"等于),(字符串的加操作), 、* (算数的加操作),、"(算术的减操作),、'(算术的乘操作),7 " (算术的除操作)。 LETR\n格式:LETR直接寻址的内容(操作数l)运算符寄存器(操作数2) 举例:LETR该句.该句.该词.产地二位置寄存器 说明:该指令是一个对当前直接寻址的内容通过寄存器进行赋值的指令, 比如在例子中,假设"位置寄存器"中当前的值是"上海",那么,就会通过 寄存器(位置寄存器)将"上海"(字符型)赋值给当前扩展词指令的当前的 浮动指针所直接寻址的"该句.该句.该词.产地"的操作数1指定的位置,当 该指令执行完后,浮动指针所指的当前词的"产地"属性被赋予"上海"这 样一个值。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以\n当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句.\n该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针己经\n是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时,\n自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。\n2. 该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也 即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器 名。比如在例子中,"位置寄存器"就可以是指令"DEFINER位置寄存器 MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器 i, j, k…,尽管不是用DEFINER指令声明的。\n3.该指令的运算符可以是:、"(等于),"〜+="(字符串的加操作), 〜"(算数的加操作),\n、'(算术的减操作),、* (算术的乘操作),7 "(算术的除操作)。\nLETRK\n格式:LETRK寄存器(操作数l)运算符立即数(操作数2) 举例:LETRK位置寄存器二擅\n说^9:该指令是一个对当前寄存器中的内容通过立即数进行赋值的指令, 比如在例子中,就是完成将立即数"上海"(字符型)赋值给当前扩展词指令 的当前的寄存器寻址的寄存器"位置寄存器"中,当该指令执行完后,"位置 寄存器"被赋予"上海"这样一个值。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位置寄存器"就可以是指令"DEFINER位置寄 存器MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n2.该指令的操作数2必须是属于立即数的内容,比如数字,字符, 短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i, j,k…。比如例子中"上海"就是一个字符型立即 数》\n3. 该指令的运算符可以是:、'(等于),"(字符串的加操作), 、"(算数的加操作),\n、"(算术的减操作),** "(箅术的乘操作),7 "(算术的除操作)。LETRR\n格式:LETRR寄存器(操作数l)运算符寄存器(操作数2) 举例:LETRR位置寄存器1 二位置寄存器2\n说明:该指令是一个对当前寄存器中的内容通过寄存器进行赋值的指令, 比如例子中,就是将寄存器"位置寄存器2"的内容赋值给当前扩展词指令的 当前的寄存器寻址的寄存器"位置寄存器l"中,如果"位置寄存器2"的值 是"上海",那么当该指令执行完后,"位置寄存器1"被赋予"上海"这样一 个值。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位宣寄存器1"就可以是执行指令"DEFINEK位 置寄存器l MEM15"所声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n2.该指令的操作数2必须是寄存器,要求同l,比如这里的"位置 寄存器2"就可以是指令\n"DEFINER位置寄存器2 MEM25"执行后,声明的寄存器。 3.该指令的运算符可以是:'Z (等于),(字符串的加操作),\n、'(算数的加操作),\n"- "(算术的减操作),、"(算术的乘操作),7 "(算术的除操作)。\nTRIM一LEFT\n格式:TRIM_LEFT直接寻址的内容(操作数1)运算符立即数(操作 数2)\n举例:TRIM—LEFT该句.该句.该词.地点二 J^i\n说明:该指令是一个对当前直接寻址的内容(字符串)从左边删除与立 即数(操作数2)相同的部分的操作指令,比如例子中,假设当前扩展词指令 的当前的浮动指针所直接寻址的"该句.该句.该词.位置"(操作数1)指定的 位置其内容是"上海高科技园",即浮动指针的当前词的"地点"属性的值是 "上海髙科技园",那么,当该指令执行完后,浮动指针所指的当前词的"地 点"属性的值就被被修整为"髙科技园"这样一个值。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是在系统编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。\n2. 该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句 都是可以的,.就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩 展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词 指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n3. 该指令的运算符可以是: "?(等于)。 TRIM_LEFTR\n格式:TRIM_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作 数2)\n举例:TRIM_LEFTR该句.该句.该词.地点二位置寄存器 说明:该指令是一个对当前直接寻址的内容(字符串)从左边删除与寄 存器(操作数2)中内容相同的部分的操作指令,比如在例子中,假设当前扩 展词指令的当前的浮动指针所直接寻址的"该句.该句.该词.位置"(操作数1) 指定的位置其内容是"上海高科技园",即浮动指针的当前词的"地点"属性 的值是"上海高科技园",并假设位置寄存器中的值是"上海",那么当该指 令执行完后,浮动指针所指的当前词的"地点"属性的值就被被修整为"高 科技园"这样一个值。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以\n当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时,\n自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示\n的指令行的地址。\n2. 该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也 即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器 名。比如在例子中,"位置寄存器"就可以是指令"DEFINER位置寄存器 MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器 i, j, k…,尽管不是用DEFINER指令声明的。\n3. 该指令的运算符可以是:(等于)。 TRIM_LEFTRK\n格式:TRIM_LEFTRK寄存器(操作数l)运算符立即数(操作数2)举例:TRIM_LEFTRK位置寄存器二\n说明:该指令是一个对当前寄存器寻址的内容(字符串)从左边删除与 立即数(操作数2)内容相同的部分的操作指令,比如在例子中,假设当前扩 展词指令的当前寄存器寻址的"位置寄存器"(操作数1)的内容是"上海高 科技园",那么,当该指令执行完后,"位置寄存器"的值就被修整为"高科 技园"这样一个值。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的\n寄存器名。比如在例子中,"位置寄存器"就可以是指令"DEFINER位置寄 存器MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i,j,k…,尽管不是用DEFINER指令声明的。\n2. 该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句 都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩 展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词 指令的公用寄存器i, j,k…。比如例子中"上海"就是一个字符型立即数。\n3. 该指令的运算符可以是:、"(等于)。 TRIM一LEFTRR\n格式:TRIM一LEFTRR寄存器(操作数l)运算符寄存器(操作数2) 举例:TRIM—LEFTRR位置寄存器1 二位置寄存器2 说明:该指令是一个对当前的寄存器寻址的内容(字符串)从左边删除 与寄存器(操作数2)中内容相同的部分的操作指令,比如,在例子中,假设 当前的扩展词指令的当前寄存器寻址的寄存器"位置寄存器1"(操作数1) 的内容是"上海高科技园",并切假设"位置寄存器2"的内容是"上海",那 么当该指令执行后,"位置寄存器l"的值就被被修整为"高科技园"这样一 个值。\n注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句\n的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如例子中,"位置寄存器1"就可以是指令"DEFINER位置寄存 器l MEM15"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i, j, k…,尽管不是用DEFINER指令声明的。\n2. 该指令的操作数2必须是寄存器,要求同l,比如这里的"位置寄存 器2"就可以是指令\n"DEFINER位置寄存器2 MEM25"执行后,声明的寄存器。\n3. 该指令的运算符可以是:、"(等于)。 TRIM—RIGHT\n格式:TRIM_RIGHT直接寻址的内容(操作数1)运算符立即数(操 作数2)\n举例:TRIM—RIGHT该句.该句.该词.地点二高科技园\n说明:该指令是一个对当前直接寻址的内容(字符串)从右边删除与立即数(操作数2)相同的部分的操作指令,比如例子中,假设当前扩展词指令 的当前的浮动指针所直接寻址的"该句.该句.该词.位置"(操作数1)指定的 位置其内容是"上海商科技园",即浮动指针的当前词的"地点"属性的值是 "上海离,技园",那么当该指令执行^浮动指针所指的当前词的"地点"\n注意:l.该指令的操作数l必须是属于i接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。\n2. 该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句 都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩 展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词 指令的公用寄存器i, j,k…,尽管不是用DEFINER指令声明的。\n3. 该指令的运算符可以是:、"(等于)。 TRIM一RIGHTR\n格式:TRIM一RIGHTR直接寻址的内容(操作数l)运算符寄存器(操作 数2)\n举例:TRIM—RIGHTR该句.该句.该词.地点二位置寄存器 说明:该指令是一个对当前直接寻址的内容(字符串)从右边删除与寄 存器(操作数2)中内容相同的部分的操作指令,比如例子中,假设当前扩展 词指令的当前的浮动指针所直接寻址的"该句.该句.该词.位置"(操作数l) 指定的位置其内容是"上海高科技园",即浮动指针的当前词的"地点"属性 的值是"上海高科技园",并假设位置寄存器中的值是"高科技园",那么, 当该指令执行完后,浮动指针所指的当前词的"地点"属性的值就被被修整 为"上海"这样一个值。\n注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。2. 该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也 即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器 名。比如例子中,"位置寄存器"就可以是执行指令"DEFINER位置寄存器 MEM01"时所声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i, j, k…,尽管不是用DEFINER指令声明的。3. 该指令的运算符可以是:、"(等于)。 TRIM一RIGHTRK格式:TRIM_RIGHTRK寄存器(操作数l)运算符立即数(操作数2)举例:TRIM_RIGHTRK位置寄存器二高科技园说明.*该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与 立即数(操作数2)内容相同的部分的操作指令,比如在例子中,假设当前扩 展词指令的当前寄存器寻址的"位置寄存器"(操作数1)的内容是"上海高 科技园",那么当该指令执行完后,"位置寄存器"的值就被被修整为"上海"这样一个值。注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如例子中,"位置寄存器"就可以是指令"DEFINER位置寄存 器MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄 存器i, j, k…,尽管不是用DEFINER指令声明的。2.该指令的操作数2必须是属于立即数的内容,比如数字,字符, 短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是 该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩 展词指令的公用寄存器i, j,k…。比如例子中"上海"就是一个字符型立即数。3.该指令的运算符可以是:〃-"(等于)。 TRIM一RIGHTRR格式:TRIM_RIGHTRR寄存器(操作数l)运算符寄存器(操作数2) 举例:TRIM_RIGHTRR位置寄存器1 二位置寄存器2 说明:该指^是一个对当前寄存器寻址的内容(字符串)从右边删除与 寄存器(操作数2)中内容相同的部分的操作指令,比如在例子中,假设当前 扩展词指令的当前寄存器寻址的"位置寄存器1"(操作数1)的内容是"上 海高科技园",并假设"位置寄存器2"的内容是"离科技园",那么当该指令 执行完后,"位置寄存器l"的值就被被修整为"上海"这样一个值。注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位置寄存器1"就可以是执行指令"DEFINER位 置寄存器l MEM15"所声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i, j,k…,尽管不是用DEFINER指令声明的。2.该指令的操作数2必须是寄存器,要求同1,比如这里的"位置寄存 器2"就可以是指令"DEFINER位置寄存器2 MEM25"执行后,声明的寄存器。3.该指令的运算符可以是:(等于)。GET一LEFT格^: GET_LEFT直接寻址的内容(操作数1)运算符立即数(操作 数2)举例:GET_LEFT该句.该句.该词.地点二 2说明:该^令是一个对当前直接寻址的内容(字一符串)从左边截取到立 即数(操作数2)个字符长度的部分的操作指令,比如例子中,假设当前扩展 词指令的当前的浮动指针所直接寻址的"该句.该句.该词.位置"(操作数l) 指定的位置其内容是"上海高科技园",即浮动指针的当前词的"地点"属性 的值是"上海高科技园",那么,当该指令执行完后,浮动指针所指的当前词 的"地点"属性的值就被被修整为"上海"这样一个值。注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然"目 标不存在调转的行号(地址)"这个列中指明的地址内容,也可以人为地进行 修改,比如跳转到人为指定的位置继续执行下去,而不会产生错误提示。当 人为地修改地址内容时,系统编译就会按照人指定的标号行来编译,不再自 动生成跳转的自动生成的那一个产生"目标不存在!"错误提示的指令行的地 址。2. 该指令的操作数2必须是属于立即数的内容,这里只能是数字,不能 是其他的内容。3. 该指令的运算符可以是: 、"(等于)。 GET一LEFTR格^: GET—LEFTR直接寻址的内容(操作数l)运算符寄存器(操作数2)举例:GET—LEFTR该句.该句.该词.地点二位置寄存器说明:该指令是一个对当前直接寻址的内容(字符串)从左边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令,比如在例子中, 假设当前扩展词指令的当前的浮动指针所直接寻址的"该句.该句.该词.位 置"(操作数1)指定的位置其内容是"上海高科技园",也即浮动指针的当前 词的"地点"属性的值是"上海高科技园",并切假设位置寄存器中的值是"2", 那么当该指令执行后,浮动指针所指的当前词的"地点"属性的值就被被修 整为"上海"这样一个值。注意:1.该指令的操^数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如跳转到人为指定的位置继续执行下去,而不会产生错误提 示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编 译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示的 指令行的地址。2. 该指令的操作数2必须是寄存器,并且其内容只能是数值,不能是其 他内容。3. 该指令的运算符可以是:、"(等于)。 GET一LEFTRK格g: GET_LEFTRK寄存器(操作数l)运算符立即数(操作数2) 举例:GET—LEFT孤位置寄存器」g说明:该^令是一个对当前寄存器寻if的内容(字符串)从左边截取到 立即数(操作数2)中的数值指定的字符长度的部分的操作指令,比如在例子 中,假设当前扩展词指令的当前寄存器寻址的"位置寄存器"(操作数l)的 内容是"上海高科技园",那么当该指令执行完后,"位置寄存器"的值就被 被修整为"上海"这样一个值。注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位置寄存器"就可以是指令"DEFINER位置寄 存器MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i, j, k…,尽管不是用DEFINER指令声明的。2. 该指令的操作数2必须是属于立即数的内容,并且只能是数值,不能是其他内容。3. 该指令的运算符可以是:、"(等于)。 GET—LEFTRR格^: GET_LEFTRR寄存器(操作数l)运算符寄存器(操作数2)举例:GET_LEFTRR位置寄存器1 二位置寄存器2说明:该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到 寄存器(操作数2)中的数值指定的字符长度的部分的操作指令,比如在例子中,假设当前扩展词指令的当前寄存器寻址的"位置寄存器l"(操作数l) 的内容是"上海高科技园",并假设"位置寄存器2"的内容是"2",那么当 该指令执行完后,"位置寄存器l"的值就被被修整为"上海"这样一个值。注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位置寄存器1"就可以是执行指令"DEFINER位 置寄存器l MEM15"所声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i,j,k…,尽管不是用DEFINER指令声明的。2. 该指令的操作数2必须是寄存器,要求同l,寄存器的内容必须是数 值,不能是其他内容。3. 该指令的运算符可以是:、"(等于)。 GET—RIGHT格^: GET_RIGHT直接寻址的内容(操作数1)运算符立即数(操作 数2)举例:GET—RIGHT该句.该句.该词.地点_f !说明:该^令是一个对当前直接寻址的内容(字^串)从右边截取到立即数(操作数2)个字符长度的部分的操作指令,比如例子中,假设当前扩展 词指令的当前的浮动指针所直接寻址的"该句.该句.该词.位置"(操作数l) 指定的位置其内容是"上海高科技园",即浮动指针的当前词的"地点"属性 的值是"上海高科技园",那么,当该指令执行完后,浮动指针所指的当前词 的"地点"属性的值就被被修整为"高科技园"这样一个值。注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。2.该指令的操作数2必须是属于立即数的内容,这里只能是数字,不 能是其他的内容。3.该指令的运算符可以是: 、"(等于)。GET一RIGHTR格^: GET_RIGHTR直接寻址的内容(操作数l)运算符寄存器(操作 数2)举例:GET—RIGHTR该句.该句.该词.地点二位置寄存器 说明:该指令是一个对当前直接寻址的内容(字符串)从右边截取到寄 存器(操作数2)中数值指定的字符长度的部分的操作指令,比如在例子中, 假设当前扩展词指令的当前的浮动指针所直接寻址的"该句.该句.该词.位置"(操作数1)指定的位置其内容是"上海高科技园",也即浮动指针的当前 词的"地点"属性的值是"上海高科技园",并且假设位置寄存器中的值是"4", 那么当该指令执行完后,浮动指针所指的当前词的"地点"属性的值就被被 修整为"高科技园"这样一个值。.注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,其中的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成瑕fe转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。2. 该指令的操作数2必须是寄存器,并且其内容只能是数值,不能是其 他内容。3. 该指令的运算符可以是:、"(等于)。GET一RIGHTRK格^: GET_RIGHTRK寄存器(操作数l)运算符立即数(操作数2) 举例:GET—RIGHTRK位置寄存器二 !说明:该指令是一个对当前寄存器ikSi内容(字符串)从右边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令,比如在例子 中,假设当前扩展词指令的当前寄存器寻址的"位置寄存器"(操作数l)的 内容是"上海高科技园",那么当该指令执行完后,"位置寄存器"的值就被 被修整为"高科技园"这样一个值。注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句 的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位置寄存器"就可以是指令"DEFINER位置寄 存器MEM01"执行后,声明的寄存器。当然,也可以是该扩展词指令的公用 寄存器i,j,k…,尽管不是用DEFINER指令声明的。2. 该指令的操作数2必须是属于立即数的内容,并且只能是数值,不能是其他内容。3. 该指令的运算符可以是:、"(等于)。 GET一RIGHTRR格^: GET_RIGHTRR寄存器(操作数l)运算符寄存器(操作数2) 举例:GET—RIGHTRR位置寄存器1 二位置寄存器2 说明:该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到 寄存器(操作数2)中的数值指定的字符长度的部分的操作指令,比如在例子 中,假设当前扩展词指令的当前寄存器寻址的"位置寄存器l"(操作数l) 的内容是"上海髙科技园",并假设"位置寄存器2"的内容是"4",那么当 该指令执行完后,"位置寄存器l"的值就被被修整为"高科技园"这样一个值。注意:1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数l内容必须是该扩展词指令描述中采用DEFINER指令声明的 寄存器名。比如在例子中,"位置寄存器1"就可以是执行指令"DEFINER位 置寄存器l MEM15"所声明的寄存器。当然,也可以是该扩展词指令的公用' 寄存器i, j, k…,尽管不是用DEFINER指令声明的。2. 该指令的操作数2必须是寄存器,要求同l,寄存器的内容必须是数 值,不能是其他内容。3. 该指令的运算符可以是:、"(等于)。 GOTO格式:GOTO标号(操作数l) 举例:GOTO loopl说?^该指令是完成直接地无条件跳转到指定行号的位置开始执行的操作。注意:该指令的操作数l (标号),必须是在标号列中存在的名称,也可 以是数字和字符的某种组合,但标号不能是有重复的命名。 比如:loopl: LETxx…LETxx…GOTO loopl这里的"loopl"就是一个跳转的行号。 G0T0R格式:GOTOR寄存器(操作数l) 举例:GOTOR执行寄存器说明:该指令是完成直接地无条件跳转到寄存器寻址的寄存器的值指定 行号的位置开始执行的操作。注意:该指令的寄存器(操作数l)中的值必须是数值,且在当前扩展词 指令ANL描述块指定的范围内。 CALL格式:CALL标号(操作数l) 举例:CALL lo卯l说明:该指令是同RETURN指令配合使用的。共同完成直接地无条件调用 指定的以行号命名的子程序执行的操作,并通过胆TURN从子程序中返回到该 指令的下一个指令的位置。注意:该指令的操作数l (标号),必须是在标号列中存在的名称,可以 是数字和字符的某种组合,但标号不能是有重复的命名。调用可以嵌套,但 是嵌套层数是有限制的,不能无限次调用操作,比如目前设置最大为40级, 也即可以连续调用操作40次,再大了就会溢出。若想再要更多的层次的嵌套, 应预先调整设置范围。比如: CALL looplloopl: LETxx ••• 肪TURN loopl这里的"CALL loopl"就是一个调用以开始行号命名的子程序的操作。 RETURN格式:RETURN标号(操作数l) 举例:RETURN loopl说明:该指令是同CALL指令配合使用的。共同来完成直接地无条件调用 指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该 指令的下一个指令的位置。注意:该指令的操作数l (标号),必须是在标号列中存在的名称,也可 以是数字和字符的某种组合,但标号不能是有重复的命名。比如: CALL looplloopl: LETxx •••• , »RETURN loopl这里的"RETURN loopl"就是一个以开始行号命名的子程序返回的操作。 PUSH格式:PUSH寄存器(操作数l) 举例:PUSH位置寄存器说明:该指令是同POP指令配合使用的。完成将当前寄存器寻址的寄存 器的内容进行压栈操作,比如举例中,将当前位置寄存器中的内容压入堆栈 的当前指针位置,假设"位置寄存器"中的值是"上海",那么,当该指令执 行后,堆栈指针的位置内容是"上海",然后,栈指针又向上移动-一级。注意:该指令的操作数l,必须是已经声明了寄存器的名称。堆栈的深度 是有限制的,不能无限压栈操作,比如目前设置最大为40级,也即可以连续 进栈操作40次,再大了就会溢出。若想再要更深的堆栈深度,应预先调整设置范围。 POP格式:POP寄存器(操作数l) 举例.* POP位置寄存器说明:该指令是同PUSH指令配合使用的。完成将当前寄存器寻址的寄存 器的内容进行出栈操作。比如举例中,将当前的堆栈指针指定的内容弹栈进 入寄存器寻址的寄存器"位置寄存器",如果当前堆栈指针指定的位置的内容 是"上海"。那么该指令执行后,位置寄存器的内容是"上海",然后,栈指 针又向下移动一级。注意:该指令的操作数l,必须是已经声明了寄存器的名称。堆栈的深度 是有限制的,不能无限出栈操作,比如目前设置最大为40级,也即可以连续 出栈操作40次,再大了就会溢出。若想再要更深的堆栈深度,应预先调整设置范围。SETON格式:SETON直接寻址的内容(操作数l) 举例:SETON该句.该句.下一词.名称说明:该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的直接寻址的内容(操作数l)所指定的位置上的操作指令,比如例子中,假 设当前扩展词指令的当前的浮动指针指定的位置的内容是"我们爱科学" 的第一个词"我们"的位置上,那么当该指令执行完后,浮动指针所指定的 位置,就是该句"我们爱科学"的第一个词"我们"的下一个词"爱"的位置。注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.产地",如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经 是指在当前句子的第一个词了,若是执行"该句.该句.上一词.产地"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统编译时,自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示的指令行的地址。2.该指令的操作数1中的属性名必须是以"名称"来定位的,也即对象 的名称,比如:"该句.上一句.最前词.名称",就是建立到当前句的的上一个句的第一个词的位置,这里属性名使用的是"名称"。SETONR格式:SETONR寄存器(操作数l) 举例:SETONR词位置寄存器说明:该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照 的寄存器寻址的内容(操作数l)所指定的位置上的操作指令,比如在例子中,的第一个词"我^]"的位置上,并^假设在寄存器"词位置寄存器"中保存 的是第三个词"科学"的位置,那么当该指令执行后,浮动指针所指定的位 置,就是该句"我们爱科学"的第三个词"科学"的位置。注意:该指令的操作数l,必须是已经声明了寄存器的名称。并且该寄存 器必须是记录了或某一句子的某个词的位置。该内容是通过执行SENDPOS指 令,将当时的浮动指针位置记录到寄存器中的。GOBACK格式:G0BACK举例:GOBACK说明:该指令是将当前的可能已经是"访问"到上下文的其他某个位置 的浮动指针恢复到当前的扩展词指令的主指针的位置上的操作指令,比如例 子中,假设当前执行的扩展词指令所对应的词是第一个词"我们"的位置, 而当前扩展词指令的主指针指定的位置的内容是"我们爱科学"的第三个 词"科学"的位置上,那么当该指令执行完后,当前扩展词指令的浮动指针 所指定的位置就会再"回到"该句"我们爱科学"的第一个词"我们"的 位置。注意:该指令只有指令码,没有任何其它的操作数。 SEND格式:SEND直接寻址的内容(操作数l)运算符寄存器(操作数2) 举例:SEND駒.駒.舰輛:位置寄存器说明:该指令是一个对当前直接寻址的内容发送到寄存器(操作数2)中 的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接 寻址的"该句.该句.该词.位置"(操作数1)指定的位置其内容是"上海高科技园",那么,当该指令执行完后,寄存器"位置寄存器"就被赋值为"上海" 这样一个值。注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.地点",如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是 指在当前句子的第一个词了,若是执行"该句.该句.上一词.地点"这个操 作数,其中的"上一词"是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示的指令行的地址。2. 该指令的操作数2必须是寄存器,其被赋值的内容可以是数值,字符 轉。3. 该指令的运算符可以是:(等于)。 SENDPOS格式:SENDP0S直接寻址的内容(操作数1)运算符寄存器(操作数2) 举例:SENDP0S该句.该句.该词.名称二位置寄存器 说明:该指令是一个将当前的直接寻址的内容所在的位置发送到寄存器 (操作数2)中的操作指令,比如在例子中,假设当前扩展词指令的当前的浮 动指针所直接寻址的"该句.该句.该词.位置"(操作数l)指定的位置,其内 容是"上海高科技园"所在位置"2/5"(第二个句子的第五个词),那么,当 该指令执行后,寄存器"位置寄存器"就被被赋值为"2/5"这样一个表示位 置的值。注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.名称",如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是 指在当前句子的第一个词了,若是执行"该句.该句.上一词.名称"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。2.该指令的操作数2必须是寄存器,其被赋值的内容是表示位置的值。3.该指令的运算符可以是:、"(等于)。 SENDLENGTH格式:SENDLENGTH直接寻址的内容(操作数1)运算符寄存器(操作 数2)举例:SENDLENGTH该句.该句.该词.名称二数量寄存器 说明:该指令是一个将当前的直接寻址的内容所占的字符的个数发送到 寄存器(操作数2)中的操作指令,比如在例子中,假设当前扩展词指令的当 前的浮动指针所直接寻址的"该句,该句.该词.位置"(操作数1)指定的位置 其内容是"上海高科技园",其所占的字符的个数是"6"(这里共6个汉字), 那么,当该指令执行完后,寄存器"位置寄存器"就被被赋值为"6"这样一 个表示字符个数的值。注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.名称",如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是 指在当前句子的第一个词了,若是执行"该句.该句.上一词.名称"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。2.该指令的操作数2必须是寄存器,其被赋值的内容是表示字符个数的值。3.该指令的运算符可以是:(等于)。 SENDLENGTHR格式:SENDLENGTHR寄存器(操作数l)运算符寄存器(操作数2) 举例:SENDLENGTHR颜色寄存器二数量寄存器说明:该指令是一个对当前寄存器的内容所占的字符的个数发送到寄存 器(操作数2)中的操作指令,比如在例子中,假设当前的扩展词指令的当前 的寄存器"颜色寄存器"的内容是"红色",该内容所占的字符的个数是"2" (这里共2个汉字),那么,当该指令执行完后,寄存器"数量寄存器"就被 被赋值为"2"这样一个表示字符个数的值。注意:1.该指令的操作数l,必须是已经声明了寄存器的名称。2. 该指令的操作数2必须是该指令的操作数1,必须是已经声明 了的寄存器,其被赋值的内容是表示字符个数的值。3. 该指令的运算符可以是:、"(等于)。FIND格式:FIND立即数(操作数l)运算符寄存器(操作数2) 举例:FIND腿二位置寄存器说明:该指令是一个根据立即数(操作数l)中的内容对当前的扩展词指 令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指 令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址指定的内容所在的句子内容是"上海高科技园发展迅速!",并假设"发展"是 第二个句子的第三个词所在的词位置的是"2/3",那么,当该指令执行后,寄存器"位置寄存器"就被被赋值为"2/3"这样一个表示位置的值。如果被 査找的词不存在,那么向寄存器(操作数2)写入"-1"。注意:1.该指令的操作数1必须是一个立即数,可以是数值或是字符。2. 该指令的操作数2必须是寄存器,其被賦值的内容是表示位置的值。3. 该指令的运算符可以是:、"(等于)。FINDR格式:FINDR寄存器(操作数l)运算符寄存器(操作数2) 举例:FINDR内容寄存器二位置寄存器说明:该指令是一个根据寄存器(操作数l)中的内容对当前的扩展词指 令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指 令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址指定 的内容所在的句子内容是"上海高科技园发展迅速!",并假设寄存器"内 容寄存器"的内容是"发展",且"发展"是第二个句子的第三个词所在的词 位置的是"2/3",那么,当该指令执行后,寄存器"位置寄存器"就被被赋 值为"2/3"这样一个表示位置的值。如果被査找的词不存在,那么向寄存器 (操作数2)写入"-l"o注意:l.该指令的操作数l必须是一个寄存器,可以是数值或是字符。2. 该指令的操作数2必须是寄存器,其被陚值的内容是表示位置的值。3. 该指令的运算符可以是: 〃="(等于)。證格式:NOP 举例:NOP说明:该指令是一个不执行任何操作的空操作指令,仅是占有一个指令 行。该指令主要用于调试使用,或是对准备取消的指令临时用该指令代替, 而不会改变指令行的数目。注意:该指令没有其他的操作数。ERRORERROR描述性的文字(操作数l) E腿错误,这个操作是非法的!该指令是将根据操作数1内容(描述性的文字),生成一个错误式例明格举说提示窗口,窗口显示的内容就是该指令后面的操作数l的内容。比如在例子 中,当执行完该指令,那么就会产生一个错误提示窗口,窗口的内容就是"错误,这个操作是非法的!",便于根据提示信息进行相关调试。注意:该指令一般用在一些可能的非法操作,作提示,或是在调试中显 示中间信息。并且该指令中的操作数l中的字符数不宜过多,通常限制在20个字以内。 ILET—RAM格式:ILET_RAM直接寻址的内容(操作数l)运算符寄存器(操作数2)举例:ILET_RAM该句.该句.该词.数量二数量寄存器 说明:该指令是一个通过寄存器间接寻址的寄存器对当前直接寻址的内 容进行赋值的操作指令,比如在例子中,假设寄存器"数量寄存器"的值是 "20",而该扩展词指令的声明的第20号寄存器的内容此时是"100",那么, 当该指令执行完后,当前的扩展词指令的当前的浮动指针所直接寻址的"该 句.该句.该词.数量"(操作数l)的属性名"数量"的属性值是"100"。注意:l.该指令的操作数l必须是属于直接寻址的内容,或说是直接以 当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的"该句.该句. 该词.名称",如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是 指在当前句子的第一个词了,若是执行"该句.该句.上一词.名称"这个操 作数,执行的"上一词"则是非法的,不存在的。此时,系统会自动执行"目 标不存在调转的行号(地址)"这个列中指明的地址,该地址是系统在编译时, 自动生成的一个产生"目标不存在!"这个错误提示的指令行的地址。当然, "目标不存在调转的行号(地址)"这个列中指明的地址的内容,也可以人为 地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误 提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来 编译,不再自动生成跳转的自动生成的那一个产生"目标不存在!"错误提示 的指令行的地址。2. 该指令的操作数2必须是寄存器,其被赋值的内容是表示在扩展 词指令的ANL语言描述块中的已经声明的寄存器号码的值。3. 该指令的运算符可以是:、'(等于)。 ILET一REG格式:ILET_REG寄存器(操作数l)运算符寄存器(操作数2)举例:ILET一REG临时寄存器二数量寄存器说明:该指令是一个通过寄存器间接寻址的寄存器对当前寄存器(操作 数1)的内容进行赋值的操作指令,比如在例子中,假设寄存器"数量寄存器" 的值是"20",而该扩展词指令的的声明的第20号寄存器的内容此时是"100", 那么,当该指令执行完后,当前的扩展词指令的当前的寄存器"临时寄存器" (操作数1)的内容被赋值为"100"。注意:1.该指令的操作数2必须是寄存器,必须是在扩展词指令的中已经声明的寄存器。2. 该指令的操作数2必须是寄存器,其被赋值的内容是表示在扩 展词指令的ANL语言描述块中^已经声明的寄存器号码的值。3. 该指令的运算符可以是:、"(等于)。 MAKE—OUTPUT格式:MAKE—OUTPUT属性名(操作数l)运算符描述性的文字(操 作数2)举例:MAKE_OUTPUT名称=所有的运行结束!说明:l.该指令是一个把该指令后面的操作数2的内容写入到系统的输 出窗口的操作指令。比如在例子中,当执行完该指令,那么就会在输出窗口 中显示"所有的运行结束!",用于显示处理过程中的提示信息。2. 如果当前的扩展词指令的句或词或句式是由MAKE一KNOWS 或MAKE一KNOWSR指令生成的句子话,那么,其操作数2的内g不写向输 出窗口,Iff是写向由MAKEJCNOWS或MAKE一KNOWSR指令生成的句子的生成句对应的工作区中对^的属性名的属性值i域。比如在例子中,当执行完该指令,那么就会在生成句对应的工作区中的"名称"属性名的值中写入 "所有的运行结束!",而不再写入到系统的输出窗口。3. 属性名(操作数l)必须是生成句工作区中的所规定的那些属 性名,其内容可以在生成句的属性名库中进行编辑和修改。注意:该指令的作用类似于ERROR指令,也可以用在一些可能的非法 操作,作提示,或是在调试中显示中间信息,但是ERROR指令是生成信息提 示窗口,并不写入到系统的输出窗口,而MAKE一OUTPUT指令则也不生成信 息提示窗口。并且该指令中的操作数2中的字^f数不宜过多,通常限制在20个字以内。魔E一OUTPUTR格式:MAKE—OUTPUTR属性名(操作数l)运算符寄存器(操作数2) 举例:MAKE—OUTPUTR名称=结果寄存器说明:l.该指令是一个把寄存器(操作数2)的内容写入到系统的输出 窗口的操作指令。比如在例子中,假设寄存器"结果寄存器"的内容是"所 有的运行结束!",当执行完该指令,那么就会在输出窗口中显示"所有的运 行结束!",用于显示处理过程中的提示信息。2. 如果当前的扩展词指令的句或词或句式是由MAKEJKNOWS 或MAKE一KNOWSR指令生成的句子话,那么,其操作数2的内容不写向输 出窗口 , ff是写向由MAKE一KNOWS或MAKE一KNOWSR指令生成的句子的生成句对应的工作区中对^—的属性名的属性值i域。比如在例子中,当执行完该指令,那么就会在生成句对应的工作区中的"名称"属性名的值中写入 "所有的运行结束!",而不再写入到系统的输出窗口。3. 属性名(操作数l)必须是生成句工作区中的所规定的那些属 性名,其内容可以在生成句的属性名库中进行编辑和修改。注意:该指令的作用也可以用在一些可能的非法操作提示,或是在调试中来显示中间信息,但是该指令更多的作用还是用于通过寄存器来输出运算 结果,包括输出到输出窗口或是写向生成句工作区对应的属性名的属性值区域ooMAKE_ROM格式:MAKE—ROM标号(操作数l) 举例:MAKE—ROM loopl说明:该指;是完成将当前正在执行的扩展词指令进行"悬挂"处理, 也即将当前的扩展词指令执行的现场,保存进悬挂工作区缓存中,以便下一 次执行处于"悬挂"中的该扩展词指令。保存的现场则包括该扩展词指令的 各种IFJHEIL…,CALL…嵌套的环境、寄存器的值、主指针、浮动指针的值等 一切相关的内容,当然还要保存该指令的标号(操作数l)的行号,来做为下 一次执行处于"悬挂"中的该扩展词指令的ANL指令开始执行的行指针。当 进入"悬挂"后(保存完现场),也即退出该扩展词指令的执行,以便于开始 执行下一个扩展词指令的。这里的标号(操作数l) 一般都是执行某种判断的 开始行的标号,因为产生"悬挂"的原因是某种判断的条件是"未知",所以 下一次执行"悬挂"的内容是,还是要判断该条件是否为"已知",如果是的 话,可能就会从该悬挂工作区缓存中消除,因为没有产生"悬挂"的条件, 或者是在新的ANL指令行产生新的"悬挂";如果仍然"未知",那么继续"悬挂",等待下一次的执行"悬挂"的该指令。这也正是该指令的目的,所以标 号(操作数l)所在的行号,是一个对致使产生该"悬挂"的条件进行不断判 断的行号,否则,"悬挂"就失去了意义。注意:该指令的操作数1 (标号),必须是在标号列中存在的名称,也可 以是数字和字符的某种组合,但标号不能是有重复的命名。比如:lpl: IFxx…MAKE一隨lpl这里的"lpl"就是一个对产生"悬挂"的条件进行判断的指令的开始行号。MAKE一ROMR格式:MAKE_ROMR标号(操作数l)举例:MAKE一ROMR loopl说明:暂时^留的指令,用于以后扩展。MAKE一KNOWS格式:MAKEJKNOWS描述性的文字(操作数l) 举例:MAKE—KNOWS 鲸鱼是鱼类吗?说明:该指+是一个通过该指令后面的立即数的(操作数l)的内容产 生一个新的自然语言句子的并到知识库中査找匹配并执行的操作指令。比如在例子中,当执行完该指令时,那么就会产生一个"鲸鱼是鱼类吗?"的句 子,然后,到知识库中匹配到该句子,如果知识库中有这样的句子,那么就 执行知识库中的该对应的知识块体部的用自然语言句子对"是否是鱼?"的 所有判断操作。当执行完后,退出该"调用知识库句子"的操作,然后执行该指令下一个ANL指令, 一般都是REAI^RESULT指令,因为通过该指令读取判断的结果是"是"还是"否",来决^后面的一些操作,如果没有 READ一RESULT指令,那么,该指令执行的判断的结果就没有意义,因为之所以执""行判断就是为了指导判断的结果,否则为何要执行判断,另外其他的 是某种过程的操作,只是为了执行一个过程,可能没有中间结果,比如可能"把所有的英文的大写改为小写。"的句子,那么就不需要结果,但是对于判 断的句子,必须有结果。该结果就是通过REALLRESULT指令来读取的,至 于生成句子执行中输出的结果是通过MAKE_OUTPUT或MAKE_OUTPUTR 指令写入到该生成句工作区对应属性名的区京的,因为是生成句,所以生成 句中的MAKE一OUTPUT或MAKE一OUTPUTR指令的输出是直接写入到生成 句工作区,而禾是写到系统的输出i口。如果描述性的文字(操作数1)的内容句子,在知识库中没有査找匹配到, 那么,会生成提示信息"知识库中没有该对应句子,系统不能继续!",信息 不全,无法执行,需要编写相应的知识进入到知识库中。注意:该指令完成了在某些时候,通过依靠常识性知识和专业知识来理 解自然语言过程。描述性的文字(操作数l)的内容必须是知识库中存在的已 经被用自然语言描述过的句子,否则,不能完成"调用知识库中的句子"的 过程,并且该指令中的操作数l中的字符数不宜过多,通常限制在20个字以内。MAKE—KNOWSR格式:MAKE—KNOWSR寄存器(操作数l) 举例:MAKE—KNOWSR 问题寄存器说明:该指;是一个通过该指令后面的寄存器的(操作数l)的内容产 生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令。比如 例子中,假设寄存器"问题寄存器"中的内容是"鲸鱼是鱼类吗?",当执行 完该指令时,那么就会产生一个"鲸鱼是鱼类吗?"的句子,然后到知识库 中匹配到该句子,如果知识库中有这样的句子,那么就执行知识库中的该对 应的知识块体部的用自然语言句子对"是否是鱼?"的所有判断操作。当执 行完后,则退出该"调用知识库句子"的操作,然后执行该指令下一个ANL 指令, 一般都是READ—RESULT指令,因为通过该指令读取判断的结果是"是" 还是"否",来决定后i的一些操作,如果没有READ一RESULT指令,那么该 指令执行的判断的结果就没有意义,因为之所以执行^J断就是为了指导判断 的结果,否则为何要执行判断,另外其他的是某种过程的操作,只是为了执 行一个过程,可能没有中间结果,比如可能"把所有的英文的大写改为小写。" 的句子,那么就不需要结果,但是对于判断的句子,必须有结果。该结果就是通过READ一RESULT指令来读取的,至于生成句子执行中输出的结果,是 通过MAKE—OUTPUT或MAKE一OUTPUTR指令写入到该生成句工作区对应 属性名的区承的,因为是生成句,所以生成句中的MAKE—OUTPUT或 MAKE一OUTPUTR指令的输出是直接写入到生成句工作区&,而不是写到系 统的输^窗口。如果寄存器(操作数l)的内容的句子,在知识库中没有查找匹配到,那 么就会生成提示信息"知识库中没有该对应句子,系统不能继续!",信息不 全,无法执行,需要编写相应的知识进入到知识库中。注意:该指令完成了在某些时候,通过依靠常识性知识和专业知识来理 解自然语言过程。在寄存器(操作数l)的内容必须是知识库中存在的已经被 用自然语言描述过的句子,否则,不能完成"调用知识库中的句子"的过程, 并且该指令中的操作数l中的字符数不宜过多,通常限制在20个字以内。READ—RESULT格式:READ_RESULT属性名(操作数1)运算符寄存器(操作数2) 举例:READ—RESULT名称=结果寄存器说明:该指令是一个把由该扩展词指令的ANL语言的MAKE一KNOWS 或MAKEJCNOWSR指令生成的句子,在执行完后,生成的在生成^]工作区 的结果(一般是通过执行句子时运行的MAKE一OUTPUT或 MAKE一OUTPUTR指令完成写入操作),通过该^令把相应的内容通过指定的 属性名(操作数l)读取送到寄存器(操作数2)的操作指令,是与 MAKE一KNOWS或MAKE_KNOWSR指令配合使用的, 一般都是紧接着它们 之后,"^独的该指令没有i义。比如在例子中,假设在生成句工作区中属性 名为"名称"的属性值是"计算机",当执行完该指令,那么,寄存器"结果 寄存器"的内容就会被写入"计算机",也即结果的读取操作完成。注意:属性名(操作数l)必须是生成句工作区中的所规定的那些属性 名,并且其内容可以在生成句的属性名库中进行编辑和修改,操作数2必须 是已经声明的寄存器名。THEN_LET仅用^IFxx…THEN…ELSE…ENDIF语句,如果在T服N位置的第一 个指令是LET的话,那么,使用该指令。其他的格式和功能都同"LET"指令 完全一样。具体参见LET指令。THEN_LETR仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是LETR的话,那么,使用该指令。其他的格式和功能都同"LETR"指 令完全一样。具体参见LETR指令。THEN_LETRK仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是LETRK的话,那么使用该指令。其他的格式和功能都同"LETRK"指 令完全一样。具体参见LETRK指令。THEN_LETRR仅用^EIFxx'" THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是LETRR的话,那么使用该指令。其他的格式和功能都同"LETRR"指 令完全一样。具体参见LETRR指令。THEN—TRIM—LEFT仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM一LEFT的话,那么使用该指令。其他的格式和功能都同 "TRDLLEFT"指令完全一样。具体参见TRIM_LEFT指令。 THEN一TRIM一LEFTR仅用^IFxx'" THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM—LEFTR的话,那么使用该指令。其他的格式和功能都同 "TRDLLEFTR"指令完全一样。具体参见TRIM—LEFTR指令。 THENJTRIM一LEFTRK仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM一LEFTRK的话,那么,使用该指令。其他的格式和功能都同 "TRIM_LEFTRK"指令完全一样。具体参见TRIM一LEFTRK指令。 THENJTRIM一LEFTRR仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM一LEFTRR的话,那么,使用该指令。其他的格式和功能都同 "TRIM_LEFTRR"指令完全一样。具体参见TRIM一LEFTRR指令。 THENJRIM一RIGHT仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIM一RIGHT的话,那么使用该指令。其他的格式和功能都同 "TRIM—RIGHT"指令完全一样。具体参见TRIM_RIGHT指令。 THEN一TRIM一RIGHTR仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是 TRIM—RIGHTR 的话, 那么,使用该指令。其他的格式和功能都同 "TRIM_RIGHTR"指令完全一样。具体参见TRIM—RIGHTR指令。 THENJTRIM—RIGHTRK仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRI1LRIGHTRR的话,那么使用该指令。其他的格式和功能都同 "TRIM_RIGHTRR"指令完全一样。具体参见TRIM—RIGHTRR指令。 THEN—TRIM—RIGHTRR仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是TRIiLRIGHTRR的话,那么使用该指令。其他的格式和功能都同 "TRIM—RIGHTRR"指令完全一样。具体参见TRIM_RIGHTRR指令。 THEN一GET一LEFT仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GE乙LEFT的话,那么使用该指令。其他的格式和功能都同"GE乙LEFT"指令完全一样。具体参见GET—LEFT指令。 THEN—GET—LEFTR仅用ilFxx"' THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET_LEFTR的话,那么使用该指令。其他的格式和功能都同 "GET—LEFTR"指令完全一样。具体参见GET_LEFTR指令。 THEN—GET—LEFTRK仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GETJJEFTRK的话,那么使用该指令。其他的格式和功能都同 "GET一LEFTRK"指令完全一样。具体参见GET一LEFTRK指令。 THEN_GET_LEFTRR仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是 GET_LEFTRR 的话, 那么使用该指令。其他的格式和功能都同 "GET_LEFTRR"指令完全一样。具体参见GET_LEFTRR指令。 THEN—GET—RIGHT仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET_RIGHT的话,那么使用该指令。其他的格式和功能都同 "GET_RIGHT"指令完全一样。具体参见GET—RIGHT指令。 THEN一GET一RIGHTR仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GETLRIGHTR的话,那么使用该指令。其他的格式和功能都同 "GET—RIGHTR"指令完全一样。具体参见GET_RIGHTR指令。 THEN—GET_RIGHTRK仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是 GET_RIGHTRK 的话, 那么使用该指令。其他的格式和功能都同 "GET_RIGHTRK"指令完全一样。具体参见GET一RIGHTRK指令。 THEN一GET一RIGHTRR仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是GET—RIGHTRR的话,那么使用该指令。其他的格式和功能都同 "GET_RIGHTRR"指令完全一样。具体参见GET_RIGHTRR指令。 THEN一G0T0仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是G0TO的话,那么使用该指令。其他的格式和功能都同"GOTO"指令 完全一样。具体参见GOTO指令。THEN—G0T0R仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是G0T0R的话,那么使用该指令。其他的格式和功能都同"G0T0R"指 令完全一'样。具体参见G0T0R指令。THEN一CALL仅用^IFxx…THEN…ELSE…ENDIF语句,如果在TllEN位置的第—个指令是CALL的话,那么使用该指令。其他的格式和功能都同"CALL"指令 完全一样。具体参见CALL指令。 THEN—RETURN\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是 RETURN 的话, 那么使用该指令。其他的格式和功能都同"RETURN" 指令完全一样。具体参见RETURN指令。\nTHEN_PUSH\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是PUSH的话,那么使用该指令。其他的格式和功能都同"PUSH"指令 完全一样。具体参见PUSH指令。\nTHEN一POP\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是POP的话,那么使用该指令。其他的格式和功能都同"POP"指令完 全一样。具体参见POP指令。\nTHEN一SETON\n仅用ilFxx…THEN"* ELSE*" ENDIF语句,如果在THEN位置的第一 个指令是SETQN的话,那么使用该指令。其他的格式和功能都同"SETQN"指 令完全一样。具体参见SETON指令。\nTHEN一SETONR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是 SET0NR 的话, 那么使用该指令。其他的格式和功能都同"SETONR" 指令完全一样。具体参见SET0NR指令。\nTHEN—GOBACK\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是G0BACK的话,那么使用该指令。其他的格式和功能都同"G0BACK" 指令完全一样。具体参见GOBACK指令。\nTHEN—SEND\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是SEND的话,那么使用该指令。其他的格式和功能都同"SEND"指令 完全一样。具体参见SEND指令。\nTHEN-SENDPOS\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是SENDPOS的话,那么使用该指令。其他的格式和功能都同"SENDPOS" 指令完全一样。具体参见SENDPOS指令。\nTHEN—SENDLENGTH\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是 SENDLENGTH 的话, 那么使用该指令。其他的格式和功能都同 "SENDLENGTH"指令完全一样。具体参见SENDLENGTH指令。 THEN一SENDLENGTHR仅用在IFxx," THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是SENDLENGTHR的话,那么使用该指令。其他的格式和功能都同 "SENDLENGT服"指令完全一样。具体参见SENDLENGT冊指令。 THEN—FIND\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是FIND的话,那么,使用该指令。其他的格式和功能都同"FIND"指 令完全一样。具体参见FIND指令。\nTHEN—FINDR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是FINDR的话,那么使用该指令。其他的格式和功能都同"FINDR"指 令完全一样。具体参见FINDR指令。\nTHEN— NOP\n仅用^IFxx'" THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是NOP的话,那么,使用该指令。其他的格式和功能都同"NOP"指令 完全一样。具体参见NOP指令。\nTHEN一ERROR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是ERROR的话,那么使用该指令。其他的格式和功能都同"ERROR"指 令完全一样。具体参见ERROR指令。\nTHEN一ILET一RAM\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是ILET_RAM的话,那么使用该指令。其他的格式和功能都同"ILET—RAM" 指令完全一样。具体参见ILET一RAM指令。\nT服N一ILET一REG\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是ILET—REG的话,那么使用该指令。其他的格式和功能都同"ILET^REG" 指令完全一样。具体参见ILET一REG指令。\nTHEN—MAKE—OUTPUT\n仅用ilFxr" THEN- ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKEJ)UTPUT的话,那么,使用该指令。其他的格式和功能都同 "MAKE—OUTPUT"指令完全一样。具体参见MAKE—OUTPUT指令。 THEN—MAKE—OUTPUTR\n仅用^IFxx'" THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKEJ)UTPUTR的话,那么使用该指令。其他的格式和功能都同 "MAKEJ)UTPUTR"指令完全一样。具体参见MAKE—0UTPUTR指令。 THEN—MAKE—ROM\n仅用^IFxx," THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是 MAKE—ROM 的话, 那么使用该指令。其他的格式和功能都I^MAKE—ROM" 指令完全一样。具体参见點貼_[?(^指令。THEN—MAKE—ROMR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKE—ROMR的话,那么使用该指令。其他的格式和功能都同 "MAKE一ROMR"指令完全一样。具体参见MAKE—ROMR指令。 T冊N一MAKE一騰WS\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKEJ(NOWS的话,那么使用该指令。其他的格式和功能都同 "MAKE—KNOWS"指令完全一样。具体参见MAKE—KNOWS指令。 THEN一MAKE一KNOWSR\n仅用ilFxx…THEN'" ELSE…ENDIF语句,如果在THEN位置的第一 个指令是MAKE一KNOWSR的话,那么,使用该指令。其他的格式和功能都同 "MAKE一KNOWSR"指令完全一样。具体参见MAKE一KNOWSR指令。 THEN一READ一RESULT\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一 个指令是READ—RESULT的话,那么,使用该指令。其他的格式和功能都同 "READ—RESULT"指令完全一样。具体参见READ_RESULT指令。\n==============================ELSE开头的指令ELSE—LET\n仅用在IFxx…THEN… ELSE… ENDIF语句,如果在ELSE位i的第一 个指令是LET的话,那么,使用该指令。其他的格式和功能都同"LET"指令 完全一样。具体参见LET指令。\nELSE—LETR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是LETR的话,那么,使用该指令。其他的格式和功能都同"LETR"指 令完全一样。具体参见LETR指令。\nELSE一LETRK\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是LETRK的话,那么,使用该指令。其他的格式和功能都同"LETRK" 指令完全一样。具体参见LETRK指令。\nELSE一LETRR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是LETRR的话,那么,使用该指令。其他的格式和功能都同"LETRR" 指令完全一样。具体参见LETRR指令。\nELSE—TRIM—LEFT\n仅用^EIFxx…THEN…ELSE- ENDIF语句,如果在ELSE位置的第一 个指令是TRDLLEFT的话,那么使用该指令。其他的格式和功能都同 "TRIM_LEFT"指令完全一样。具体参见TRIM—LEFT指令。 ELSE一TRINLLEFTR\n仅用^IFxx…THEN…ELSE- ENDIF语句,如果在ELSE位置的第一个指令是TRIM—LEFTR的话,那么使用该指令。其他的格式和功能都同 "TRIM—LEFTR"指令完全一样。具体参见TRIM—LEFTR指令。 EliE—TRIM—LEFTRK\n仅用^IFxx…THEN- ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIM一LEFTRK的话,那么,使用该指令。其他的格式和功能都同 "TRIM—LEFTRK"指令完全一样。具体参见TRIM—LEFTRK指令。 ELSE_TRIM_LEFTRR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是 TRIM_LEFTRR 的话, 那么,使用该指令。其他的格式和功能都同 "TRIM—LEFTRR"指令完全一样。具体参见TRIM—LEFTRR指令。 ELSE_TRIM_RIGHT\n仅用^IFxx…THEN", ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是 TRIM_RIGHT 的话, 那么使用该指令。其他的格式和功能都同 "TRIM—RIGHT"指令完全一样。具体参见TRIM_RIGHT指令。 ELSE_TRIM_RIGHTR\n仅用^IFxx…THEN…ELSE," ENDIF语句,如果在ELSE位置的第一 个指令是TRBLRIGHTR的话,那么使用该指令。其他的格式和功能都同 "TRIM—RIGHTR"指令完全一样。具体参见TRIM—RIGHTR指令。 ELSE—TRIM—RIGHTRK\n仅用ilFxx… THEN… ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是TRIM—RIGHTRK的话,那么使用该指令。其他的格式和功能都同 "TRIM—RIGHTRK"指令完全一样。具体参见TRIM—RIGHTRK指令。 ELSE—TRIM—RIGHTRR\n仅用iEIFxx…THEN", ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是TRIM—RIGHTRR的话,那么使用该指令。其他的格式和功能都同 "TRIM_RIGHTRR"指令完全一样。具体参见TRIM—RIGHTRR指令。 ELSE一GET一LEFT\n仅用^IFxx…THEN…ELSE'" ENDIF语句,如果在ELSE位置的第一 个指令是GE乙LEFT的话,那么使用该指令。其他的格式和功能都同"GET一LEFT" 指令完全一样。具体参见GET一LEFT指令。\nELSE一GET一LEFTR\n仅用^EIFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET一LEFTR的话,那么使用该指令。其他的格式和功能都同 "GET—LEFTR"指令完全一样。具体参见GET—LEFTR指令。 ELSE—GET—LEFTRK\n仅用ilFxx"' THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET—LEFTRK的话,那么使用该指令。其他的格式和功能都同 "GET—LEFTRK"指令完全一样。具体参见GET—LEFTRK指令。 ELSE— GET—LEFTRR仅用在IFxx…THEN,,, ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是 GET一LEFTRR 的话, 那么使用该指令。其他的格式和功能都同 "GET一LEFTR^"指令完全一样。具体参见GET一LEFTRR指令。 ELSE—GET—RIGHT\n仅用^IFxx… THEN… ELSE". ENDIF语句,如果在ELSE位置的第一 个指令是GETLRIGHT的话,那么使用该指令。其他的格式和功能都同 "GET—RIGHT"指令完全一样。具体参见GET—RIGHT指令。 ELSE一GET一RIGHTR\n仅用^IFxx…THEN", ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GET一RIGHTR的话,那么使用该指令。其他的格式和功能都同 "GET—RIGHTR"指令完全一样。具体参见GET一RIGHTR指令。 ELSE一GET一RIGHTRK\n仅用glFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GETLRIGHTRK的话,那么使用该指令。其他的格式和功能都同 "GET—RIGHTRK"指令完全一样。具体参见GET一RIGHTRK指令。 ELSE一GET一RIGHTRR\n仅用^IFxx'" THEN'" ELSE'" ENDIF语句,如果在ELSE位置的第一 个指令是GET—RIGHTRR的话,那么使用该指令。其他的格式和功能都同 "GET_RIGHTRR"指令完全一样。具体参见GET—RIGHTRR指令。 ELSE_GOTO\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是GOTO的话,那么,使用该指令。其他的格式和功能都同"GOTO"指 令完全一样。具体参见GOTO指令。\nELSE一G0T0R\n仅用ilFxx…THEN*" ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是G0T0R的话,那么使用该指令。其他的格式和功能都同"G0T0R"指 令完全一样。具体参见GOTOR指令。\nELSE_CALL\n仅用^IFxx…THEN…ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是CALL的话,那么,使用该指令。其他的格式和功能都同"CALL"指 令完全一样。具体参见CALL指令。\nELSE—RETURN\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是RETURN的话,那么使用该指令。其他的格式和功能都同"RETURN" 指令完全一样。具体参见RETURN指令。\nELSE_PUSH\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是PUSH的话,那么,使用该指令。其他的格式和功能都同"PUSH"指 令完全一样。具体参见PUSH指令。ELSE一POP\n仅用^IFxx…THEN*" ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是POP的话,那么,使用该指令。其他的格式和功能都同"P0F"指令 完全一样。具体参见POP指令。\nELSE一SETON\n仅用^EIFxx". THEN." ELSE…朋DIF语句,如果在ELSE位置的第一 个指令是SETQN的话,那么使用该指令。其他的格式和功能都同"SETQN"指 令完全一样。具体参见SETON指令。\nELSE一SETONR\n仅用^IFxx"' THEN"* ELSE"* ENDIF语句,如果在ELSE位置的第一 个指令是SETONR的话,那么使用该指令。其他的格式和功能都同"SETONR" 指令完全一样。具体参见SETONR指令。\nELSE一GOBACK\n仅用^IFxx", THEN…ELSE"' ENDIF语句,如果在ELSE位置的第一 个指令是 GOBACK 的话, 那么使用该指令。其他的格式和功能都同"GOBACK" 指令完全一样。具体参见GOBACK指令。\nELSE—SEND\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SEND的话,那么,使用该指令。其他的格式和功能都同"SEND"指\n令完全一样。具体参见SEND指令。 ELSE一SENDPOS\n仅用^IFxx…THEN…ELSE*" ENDIF语句,如果在ELSE位置的第一 个指令是SENDPOS的话,那么使用该指令。其他的格式和功能都同"SENDPOS" 指令完全一样。具体参见SENDPOS指令。\nELSE_SENDLENGTH\n仅用ilFxx… THEN… ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SENDLENGTH的话,那么使用该指令。其他的格式和功能都同 "SENDLENGTH"指令完全一样。具体参见SENDLENGTH指令。 ELSE一SENDLENGT服\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是SENDLENGTHR的话,那么,使用该指令。其他的格式和功能都同 "SENDLENGTHR"指令完全一样。具体参见SENDLENGTHR指令。 ELSE一FIND\n仅用^IFxx…THEN…ELSE*** ENDIF语句,如果在ELSE位置的第一 个指令是FIND的话,那么,使用该指令。其他的格式和功能都同"FIND"指 令完全一样。具体参见FIND指令。\nELSE一F臓\n仅用^EIFxx'" THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是FINDR的话,那么使用该指令。其他的格式和功能都同"FINDR"指令完全一样。具体参见FINDR指令。 ELSE一NOP\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是NOP的话,那么,使用该指令。其他的格式和功能都同"NOP"指令 完全一样。具体参见NOP指令。\nELSE—ERROR\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是ERROR的话,那么使用该指令。其他的格式和功能都同"ERROR"指 令完全一样。具体参见ERROR指令。\nELSE—ILET_RAM\n仅用ilFxx…THEN…ELSE"' ENDIF语句,如果在ELSE位置的第一 个指令是ILET一RAM的话,那么使用该指令。其他的格式和功能都同"ILET—RAM" 指令完全一样。具体参见ILE乙RAM指令。\nELSE一ILET一REG\n仅用ilFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是ILET—REG的话,那么使用该指令。其他的格式和功能都同"ILET—REG" 指令完全一样。具体参见ILET—REG指令。\nELSE—MAKEJ)UTPUT\n仅用ilFxx…THEN…ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是MAKE一OUTPUT的话,那么,使用该指令。其他的格式和功能都同 "MAKE—OUTPUT"指令完全一样。具体参见MAKEJ)UTPUT指令。 ELSE—MAKE_OUTPUTR\n仅用^IFxx'" THEN…ELSE…ENDIF语句,如果在ELSE位置的第一 个指令是MAKE一OUTPUTR的话,那么使用该指令。其他的格式和功能都同 "MAKE—OUTPUTR"指令完全一样。具体参见MAKEJ)UTPUTR指令。 ELSE一魔E一隨\n仅用ilFxx…THEN…ELSE", ENDIF语句,如果在ELSE位置的第一 个指令是MAK^RQM的话,那么使用该指令。其他的格式和功能都同"MAKE一ROM" 指令完全一样。具体参见MAKE一ROM指令。\nELSE一MAKE一ROMR\n仅用^IFxx… THEN… ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是船1«_1?0做的话,那么使用该指令。其他的格式和功能都同 "MAKE一ROMR"指令完全一样。具体参见MAKE一ROMR指令。 ELSE_MAKE—KNOWS\n仅用^IFxx… THEN… ELSE," ENDIF语句,如果在ELSE位置的第一 个指令是MAKE一KNOWS的话,那么使用该指令。其他的格式和功能都同 "MAKE—KNOWS"指令完全一样。具体参见MAKE_KN0WS指令。 ELSE一MAKE—KNOWSR\n仅用^IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE一KNOWS的话,那么,使用该指令。其他的格式和功能都同 "MAKE—KNOWSR"指令完全一样。具体参见MAKE一KNOWSR指令。 ELSE—READ—RESULT\n仅用^IFxx… THEN… ELSE… ENDIF语句,如果在ELSE位置的第一 个指令是READ一RESULT的话,那么,使用该指令。其他的格式和功能都同 "READ—RESULT"指令完全一样。具体参见READ_RESULT指令。