专利名称:人工智能机及其实现自然语言理解的方法
技术领域:
本发明属于计算机智能领域,具体涉及一种人工智能机及其实现自然语言理解的方法。
背景技术:
人工智能,作为一门研究“让机器具有类人思维”的前沿学科,自1956年夏季首次提出来后,迄今为止,已经吸引了无数的研究者为之努力奋斗,在提出了许多重要的相关理论的同时,也建立了一些相应的系统,有一些系统已逐步进入了一定的实用阶段。比如在专家系统、机器翻译、用于信息查询的简单的人机对话系统、机器定理证明等等方面都取得了令人瞩目的成绩。
但是,目前已经建造的人工智能机虽然在某一方面可以帮助人们解决一定的问题,但是离人们期望的智能水平还是差距甚远,还很难能够做到通过与人进行了一段自然的顺畅的“对话”以后,就可以轻松“理解”人所表达的意愿,继而按照人们的意愿去完成某些相关的任务。如果机器不能做到完全地很好地“理解”人们所表述的问题,就很难有很好的解决问题的能力。研究表明若是让机器具有比较高级的智能水平,首先必须让机器具有知识;其次机器必须具有不断的学习能力。只有在基于知识的处理系统之上,人工智能机才能够有更强的解决问题的能力,从这一点出发,目前的专家系统应该是基于知识的处理系统的典型代表。虽然专家系统在某一方面具有专家级的知识,并可以解决一定领域的问题,但是机器并不能做到真正地“理解”其内部知识库的内容,对知识库的访问只是简单的事实和规则的“匹配”过程,并且当知识库中规则数量越多,则会导致系统庞大,搜索费时,运行效率下降,从而限制了专家系统能力的提高。尽管采取了“RETE”算法、对知识库进行编译、并行处理等各种措施来提高性能,但都不能从根本上解决在整个知识库进行盲目搜索的问题。
由此可见,现有的智能系统存在以下影响其整体水平提高的问题目前人工智能机大多采用低级层次的语言表示知识,知识的表示能力有一定的局限性,很难去比较完整地表示真实世界,由此造成以现有的知识表示形式所建立起来的知识库,受到只有专业人员才能操作的限制,同时对采用低级层次的知识表示语言所建立起来的庞大的知识库的也很难维护管理。由于没有采用很好的知识表示形式,自然也就无从谈起基于高级层次语言表示形式的理解系统,也就很难有效地解决机器理解语言时各个层次间相互协调的问题。
发明内容
针对上述问题,本发明的目的是提供一种基于自然语言理解的人工智能机,及其实现自然语言理解的方法,该人工智能机能够理解人类用自然语言表达的问题,且能够通过联系上下文的背景知识和常识知识来进行理解,从而可以解决比较复杂的问题,具有较高的智能水平。
为实现此目的,本发明的技术方案如下一种人工智能机实现自然语言理解的方法,其特征在于它以面向自然语言的汇编语言——ANL语言为基础,以扩展词指令的方式对外部输入的自然语言描述的文本内容进行理解,扩展词指令是针对词、句子、句式的由若干个ANL语言指令构成的描述体,工作过程如下(1)向人工智能机输入用ANL语言描述的有关自然语言的知识,建造ANL语言描述库,主要包括三个部分,句子的ANL语言描述库、句式的ANL语言描述库、词的ANL语言描述库;(2)向人工智能机输入用自然语言直接描述的各种内容,建造自然语言描述库,包括句子的自然语言描述库、句式的自然语言描述库、词的自然语言描述库三部分,这些库是按知识块形式进行组织的,每个知识块包括头部标题和体部,体部是由若干个自然语言句子构成的对头部标题的解释;(3)人工智能机对送来的经过分词后的句子暂时先去掉分词分隔符后合成原句;(4)在句子的ANL语言描述库中,进行查找该合成的原句,如果查找成功,就把该扩展词指令的ANL内容从句子的ANL语言描述库中调出来,从第一行开始逐条地执行每条指令,当该描述该扩展词指令的所有相关的ANL指令执行完毕,那么人工智能机对这个句子的理解过程结束;(5)如果在句子的ANL语言描述库中查找失败,就执行按常规逐个词的理解方式;首先取出送来的经过分词后的句子中的第一个词,如果该词是数字,机器能够自动地生成对应的关于数字的ANL语言描述;如果该词不是数字,则在词的自然语言描述库中进行查找匹配该词,如果查找成功,则直接执行知识块体部的对该词的自然语言解释的句子,否则,则进入词的ANL语言描述库中进行查找;(6)如果在词的ANL语言的描述库中查找成功,就把该扩展词指令的ANL内容从词的ANL描述库中调出来,按指令逐条执行,当该扩展词指令的所有相关的ANL指令执行完毕,人工智能机对这个句子中的这个词的理解过程结束;如果查找失败,人工智能机则终止当前处理过程,必须先在词库中建立对应的词的描述,系统才能处理;(7)按步骤5,依次读取当前句子的下一个词并执行,直至当前句子的所有的词,包括标点都执行完毕,那么当前的句子按照逐个词的理解结束;下一步进行句式处理;(8)将上述逐个词理解的句子的每个词的词性所生成的相应的句式,先在句式的自然语言描述库中进行查找,如果查找成功,那么直接执行知识块体部中的对该句式的自然语言解释的句子,否则,则在句式的ANL语言描述库中进行查找该句式,如果查找成功,就把该扩展词指令的ANL语言描述的内容调出来,按指令逐条执行,当该操作的所有相关的ANL指令执行完毕时,人工智能机对这个句子的附加的句式的理解过程结束;如果在句式的ANL语言描述库中查找失败,句式处理过程结束;此时人工智能机对当前句子的理解结束。
其中ANL语言的指令如下
DEFINER格式DEFINER自定义寄存器名称(操作数1)内部寄存器号(MEMxx)(操作数2)该指令是对自定义名称的寄存器,与内部的寄存器区空间编号建立相应的映射;TEXT格式TEXT描述性的文字(操作数1)该指令是声明这是陈述一个说明性的内容,不执行任何操作,只是便于理解程序而设置的;IF格式IF直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;IFR格式IFR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令是一个对当前直接寻址的内容与寄存器内容进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;IFRK格式IFRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;IFRR格式IFRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;AND格式AND直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;
ANDR格式ANDR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;ANDRK格式ANDRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ANDRR格式ANDRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址OR格式OR直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;格式ORR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址,;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ORRK格式ORRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ORRR格式ORRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;ENDIF格式ENDIF标号(操作数1)该指令接着IFxx类指令之后,完成一个IFxx…THEN_xx…ELSE_xx…ENDIF,来表明这样一个IFxx类语句体的结束;END格式END说明该指令是表明对一个描述扩展词指令的ANL语言描述体的结束的指令,每一个ANL描述体必须有一个END指令;当系统执行到该指令就从当前的扩展词指令执行中退出;LET格式LET直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容通过立即数进行赋值的指令;LETR格式LETR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容通过寄存器进行赋值的指令;LETRK格式LETRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器中的内容通过立即数进行赋值的指令;LETRR格式LETRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器中的内容通过寄存器进行赋值的指令;TRIM_LEFT格式TRIM_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边删除与立即数(操作数2)相同的部分的操作指令;TRIM_LEFTR格式TRIM_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_LEFTRK格式TRIM_LEFTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边删除与立即数(操作数2)内容相同的部分的操作指令;TRIM_LEFTRR格式TRIM_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前的寄存器寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_RIGHT格式TRIM_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边删除与立即数(操作数2)相同的部分的操作指令;TRIM_RIGHTR格式TRIM_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_RIGHTRK格式TRIM_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与立即数(操作数2)内容相同的部分的操作指令;TRIM_RIGHTRR格式TRIM_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令;GET_LEFT格式GET_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边截取到立即数(操作数2)个字符长度的部分的操作指令;GET_LEFTR格式GET_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令;GET_LEFTRK格式GET_LEFTRK寄存器(操作数1)运算符立即数(操作数2)
该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令;GET_LEFTRR格式GET_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令;GET_RIGHT格式GET_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边截取到立即数(操作数2)个字符长度的部分的操作指令;GET_RIGHTR格式GET_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令;GET_RIGHTRK格式GET_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令;GET_RIGHTRR格式GET_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令;GOTO格式GOTO标号(操作数1)该指令是完成直接地无条件跳转到指定行号的位置开始执行的操作;GOTOR格式GOTOR寄存器(操作数1)该指令是完成直接地无条件跳转到寄存器寻址的寄存器的值指定行号的位置开始执行的操作;CALL格式CALL标号(操作数1)该指令是同RETURN指令配合使用的,共同完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置;RETURN格式RETURN标号(操作数1)该指令是同CALL指令配合使用的;共同来完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置;PUSH格式PUSH寄存器(操作数1)该指令是同POP指令配合使用的;完成将当前寄存器寻址的寄存器的内容进行压栈操作;POP格式POP寄存器(操作数1)该指令是同PUSH指令配合使用的;完成将当前寄存器寻址的寄存器的内容进行出栈操作;SETON格式SETON直接寻址的内容(操作数1)该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的直接寻址的内容(操作数1)所指定的位置上的操作指令;SETONR格式SETONR寄存器(操作数1)该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的寄存器寻址的内容(操作数1)所指定的位置上的操作指令;GOBACK格式GOBACK该指令是将当前的可能已经是访问到上下文的其他某个位置的浮动指针恢复到当前的扩展词指令的主指针的位置上的操作指令SEND格式SEND直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容发送到寄存器(操作数2)中的操作指令;SENDPOS格式SENDPOS直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个将当前的直接寻址的内容所在的位置发送到寄存器(操作数2)中的操作指令;SENDLENGTH格式SENDLENGTH直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个将当前的直接寻址的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令;SENDLENGTHR格式SENDLENGTHR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令;
FIND格式FIND立即数(操作数1)运算符寄存器(操作数2)该指令是一个根据立即数(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令;FINDR格式FINDR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个根据寄存器(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令;NOP格式NOP该指令是一个不执行任何操作的空操作指令,仅是占有一个指令行;该指令主要用于调试使用,或是对准备取消的指令临时用该指令代替,而不会改变指令行的数目;ERROR格式ERROR描述性的文字(操作数1)该指令是将根据操作数1内容(描述性的文字),生成一个错误提示窗口,窗口显示的内容就是该指令后面的操作数1的内容;ILET_RAM格式ILET_RAM直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前直接寻址的内容进行赋值的操作指令;ILET_REG格式ILET_REG寄存器(操作数1)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前寄存器(操作数1)的内容进行赋值的操作指令;MAKE_OUTPUT格式MAKE_OUTPUT属性名(操作数1)运算符描述性的文字(操作数2)该指令是一个把该指令后面的操作数2的内容写入到系统的输出窗口的操作指令;MAKE_OUTPUTR格式MAKE_OUTPUTR属性名(操作数1)运算符寄存器(操作数2)该指令是一个把寄存器(操作数2)的内容写入到系统的输出窗口的操作指令;MAKE_ROM格式MAKE_ROM标号(操作数1)该指令是完成将当前正在执行的扩展词指令进行悬挂处理,也即将当前的扩展词指令执行的现场,保存进悬挂工作区缓存中,以便下一次执行处于悬挂中的该扩展词指令;MAKE_ROMR格式MAKE_ROMR标号(操作数1)暂时保留的指令,用于以后扩展;MAKE_KNOWS格式MAKE_KNOWS描述性的文字(操作数1)该指令是一个通过该指令后面的立即数的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令;MAKE_KNOWSR格式MAKE_KNOWSR寄存器(操作数1)该指令是一个通过该指令后面的寄存器的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令;READ_RESULT格式READ_RESULT属性名(操作数1)运算符寄存器(操作数2)该指令是一个把由ANL语言的MAKE_KNOWS或MAKE_KNOWSR指令生成的句子,在执行完后,生成的在生成句工作区的结果,通过该指令把相应的内容通过指定的属性名(操作数1)读取送到寄存器(操作数2)的操作指令,是与MAKE_KNOWS或MAKE_KNOWSR指令配合使用的;THEN_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一样;THEN_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETR的话,则使用该指令;THEN_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完全一样;THEN_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完全一样;THEN_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFT的话,则使用该指令;其他的格式和功能都同TRIM_LEFT指令完全一样;THEN_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR指令完全一样;THEN_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRK的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRK指令完全一样;THEN_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRR指令完全一样;THEN_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RIGHT指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTR指令完全一样;THEN_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;THEN_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;THEN_GET_LEFT仅用在IFxx…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仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_RIGHT的话,则使用该指令;其他的格式和功能都同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指令完全一样;THEN_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全一样;THEN_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTOR的话,则使用该指令;其他的格式和功能都同GOTOR指令完全一样;THEN_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全一样;THEN_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令完全一样;THEN_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;THEN_POP
仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一样;THEN_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完全一样;THEN_SETONR仅用在IFxx…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仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;THEN_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同SENDLENGTHR指令完全一样;THEN_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样;THEN_FINDR仅用在IFxx…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_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM指令完全一样;THEN_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_REG的话,则使用该指令;其他的格式和功能都同ILET_REG指令完全一样;THEN_MAKE_OUTPUT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUT的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUT指令完全一样;THEN_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUTR的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUTR指令完全一样;THEN_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROM的话,则使用该指令;其他的格式和功能都同MAKE_ROM指令完全一样;THEN_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE_ROMR指令完全一样;THEN_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWS指令完全一样;THEN_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWSR的话,则使用该指令;其他的格式和功能都同MAKE_KNOWSR指令完全一样;THEN_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是READ_RESULT的话,则使用该指令;其他的格式和功能都同READ_RESULT指令完全一样;ELSE_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一样;ELSE_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETR的话,则使用该指令;其他的格式和功能都同LETR指令完全一样;ELSE_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完全一样;ELSE_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完全一样;ELSE_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFT的话,则使用该指令;其他的格式和功能都同TRIM_LEFT指令完全一样;ELSE_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR指令完全一样;ELSE_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRK的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRK指令完全一样;ELSE_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRR指令完全一样;ELSE_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RIGHT指令完全一样;ELSE_TRIM_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTR指令完全一样;ELSE_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRK的话,则使用该指令;其他的格式和功能都同TRIMVRIGHTRK指令完全一样;ELSE_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;ELSE_GET_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFT的话,则使用该指令;其他的格式和功能都同GET_LEFT指令完全一样;ELSE_GET_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTR的话,则使用该指令;其他的格式和功能都同GET_LEFTR指令完全一样;ELSE_GET_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRK的话,则使用该指令;其他的格式和功能都同GET_LEFTRK指令完全一样;ELSE_GET_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRR的话,则使用该指令;其他的格式和功能都同GET_LEFTRR指令完全一样;ELSE_GET_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHT的话,则使用该指令;其他的格式和功能都同GET_RIGHT指令完全一样;ELSE_GET_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTR的话,则使用该指令;其他的格式和功能都同GET_RIGHTR指令完全一样;ELSE_GET_RIGHTRK
仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRK的话,则使用该指令;其他的格式和功能都同GET_RIGHTRK指令完全一样;ELSE_GET_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRR的话,则使用该指令;其他的格式和功能都同GET_RIGHTRR指令完全一样;ELSE_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全一样;ELSE_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTOR的话,则使用该指令;其他的格式和功能都同GOTOR指令完全一样;ELSE_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全一样;ELSE_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令完全一样;ELSE_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;ELSE_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一样;ELSE_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完全一样;ELSE_SETONR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETONR的话,则使用该指令;其他的格式和功能都同SETONR指令完全一样;
ELSE_GOBACK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOBACK的话,则使用该指令;其他的格式和功能都同GOBACK指令完全一样;ELSE_SEND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SEND的话,则使用该指令;其他的格式和功能都同SEND指令完全一样;ELSE_SENDPOS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDPOS的话,则使用该指令;其他的格式和功能都同SENDPOS指令完全一样;ELSE_SENDLENGTH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;ELSE_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同SENDLENGTHR指令完全一样;ELSE_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样;ELSE_FINDR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FINDR的话,则使用该指令;其他的格式和功能都同FINDR指令完全一样;ELSE_NOP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是NOP的话,则使用该指令;其他的格式和功能都同NOP指令完全一样;ELSE_ERROR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ERROR的话,则使用该指令;其他的格式和功能都同ERROR指令完全一样;ELSE_ILET_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM指令完全一样;ELSE_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_REG的话,则使用该指令;其他的格式和功能都同ILET_REG指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUT的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUT指令完全一样;ELSE_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUTR的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUTR指令完全一样;ELSE_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROM的话,则使用该指令;其他的格式和功能都同MAKE_ROM指令完全一样;ELSE_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE_ROMR指令完全一样;ELSE_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWS指令完全一样;ELSE_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWSR指令完全一样;ELSE_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是READ_RESULT,则使用该指令;其他的格式和功能都同READ_RESULT指令完全一样。
一种人工智能机,其特征在于它主要包括面向自然语言处理的中央处理单元NLPU和以此为核心的外围设备,其中包括中央处理单元NLPU以ANL语言为其汇编语言,面向符号处理,支持对自然语言文本的上下文访问,支持符号地址总线、符号数据总线等多种总线;文本输入接口用于对预先分词处理过的外部输入文本进行接收;文本输出接口用于将处理的中间结果及最终结果以文字数据流的格式向外输出
输入/输出设备扩展接口用于输入外部的传感信息和驱动外部设备;自然语言描述的知识库存储媒介是硬盘,包括分别存储句子的自然语言描述库、句式的自然语言描述库、词的自然语言描述库的三块;每块硬盘分别带有各自的硬件检索机;双口RAM作为文本缓存器用于暂存通过文本输入接口获取的文本数据;框架缓存器是按表格方式分配的RAM存储器,其中的内容包括句子、词名称、定位序号、相关属性名及属性值的物理空间,中央处理单元NLPU可直接通过符号地址总线,以字符串形式的序号为地址直接访问该存储器;框架缓存器的地址译码器用于中央处理单元NLPU通过直接数据总线和读写控制来操作地址译码器的编码,直接将框架式缓存的序号译码成框架缓存器的物理地址;句子缓存器存放中央处理单元NLPU依据句子指针的序号形式的值从框架缓存器中提取的句子,该句子缓存器直接输出到通过硬件检索机连接的句子的自然语言描述库,和通过地址译码器连接的句子的ANL语言描述库;句式缓存器存放中央处理单元NLPU在依据句子指针的序号形式的值从框架缓存器中提取的句式,该句式缓存器直接输出到通过硬件检索机连接的句式的自然语言描述库,和通过地址译码器连接的句式的ANL语言描述库;词缓存器存放中央处理单元NLPU在依据词指针的序号形式的值从框架式缓存中提取的词,该词缓存器直接输出到通过硬件检索机连接的词的自然语言描述库,和通过地址译码器连接的词的ANL语言描述库;综合工作区缓存为RAM存储器,包括当前执行的扩展词指令的工作现场暂存、悬挂工作区、生成句的工作区;生成句工作区缓存保存生成的句子的内容,包括句子的名称、序号、生成句的属性名对应的值;生成句的地址译码器在NLPU输出的某一个生成句的字符串形式的序号时,直接在生成句工作区缓存中定位到该生成句的开始物理地址;生成句属性地址产生器将在生成句工作区缓存中的开始物理地址,与生成句属性名的编号的相对地址进行相加运算,得到该产生生成句属性名的绝对物理地址;句子的地址译码器为直接内容寻址存储器CAM,该地址译码器直接将来自于句子缓冲器中的句子的字符串译码成句子的ANL语言描述库中映射该句子的开始物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来完成;句式的地址译码器为直接内容寻址存储器CAM,该地址译码器直接将来自于句式缓冲器中的句式的字符串译码成在句式的ANL语言描述库中映射该句式的开始物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来完成;词的地址译码器为直接内容寻址存储器CAM,该地址译码器直接将来自于词缓冲器中的词的字符串译码成在词的ANL语言描述库中映射该词的开始物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来完成;ANL指针地址产生器将通过句子、句式、词的地址译码器译码后的对于在ANL语言描述中的句子、句式、词的相应描述库中映射句子、句式、词的字符串的开始物理地址,与中央处理单元NLPU的ANL行指针数据相加,得到它们在对应的ANL语言描述库中的ANL指令行的地址;ANL语言描述库为可擦写的ROM存储器,主要包括三个部分,句子的ANL语言描述库、句式的ANL语言描述库、词的ANL语言描述库,直接为中央处理单元NLPU提供ANL语言指令;符号地址总线直接传输以字符串形式的序号作为地址的数据,通过文本上下文的位置数据完成对框架缓存器的访问;符号数据总线主要是完成中央处理单元NLPU与框架缓存器,以及还有其他的外围缓存器件的以符号串形式的数据的信息传递;直接地址总线用于NLPU访问外围的直接以2进制数据为地址的直接地址寻址的器件;直接数据总线直接传送2进制数据,用于中央处理单元NLPU完成需要以直接数据进行传递的器件的访问;ANL指令数据总线该总线主要是用于中央处理单元NLPU直接从ANL语言描述库中读取ANL指令,每读一次ANL库的信息,该总线就加载了一条ANL指令;ANL行指针数据线主要用于产生中央处理单元NLPU对ANL语言描述库进行访问时所需要的ANL指令行的相应物理地址。
其中ANL语言的指令如下DEFINER格式DEFINER自定义寄存器名称(操作数1)内部寄存器号(MEMxx)(操作数2)该指令是对自定义名称的寄存器,与内部的寄存器区空间编号建立相应的映射;TEXT格式TEXT描述性的文字(操作数1)该指令是声明这是陈述一个说明性的内容,不执行任何操作,只是便于理解程序而设置的;IF格式IF直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;
IFR格式IFR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令是一个对当前直接寻址的内容与寄存器内容进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;IFRK格式IFRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;IFRR格式IFRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;AND格式AND直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ANDR格式ANDR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;ANDRK格式ANDRK寄存器(操作数1)运算符立即数(操作数2)跳转-真 跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ANDRR
格式ANDRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;OR格式OR直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;格式ORR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址,;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ORRK格式ORRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ORRR格式ORRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;ENDIF格式ENDIF标号(操作数1)该指令接着IFxx类指令之后,完成一个IFxx…THEN_xx…ELSE_xx…ENDIF,来表明这样一个IFxx类语句体的结束;END格式END
说明该指令是表明对一个描述扩展词指令的ANL语言描述体的结束的指令,每一个ANL描述体必须有一个END指令;当系统执行到该指令就从当前的扩展词指令执行中退出;LET格式LET直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容通过立即数进行赋值的指令;LETR格式LETR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容通过寄存器进行赋值的指令;LETRK格式LETRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器中的内容通过立即数进行赋值的指令;LETRR格式LETRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器中的内容通过寄存器进行赋值的指令;TRIM_LEFT格式TRIM_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边删除与立即数(操作数2)相同的部分的操作指令;TRIM_LEFTR格式TRIM_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_LEFTRK格式TRIM_LEFTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边删除与立即数(操作数2)内容相同的部分的操作指令;TRIM_LEFTRR格式TRIM_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前的寄存器寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_RIGHT格式TRIM_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边删除与立即数(操作数2)相同的部分的操作指令;TRIM_RIGHTR
格式TRIM_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_RIGHTRK格式TRIM_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与立即数(操作数2)内容相同的部分的操作指令;TRIM_RIGHTRR格式TRIM_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令;GET_LEFT格式GET_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边截取到立即数(操作数2)个字符长度的部分的操作指令;GET_LEFTR格式GET_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令;GET_LEFTRK格式GET_LEFTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令;GET_LEFTRR格式GET_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令;GET_RIGHT格式GET_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边截取到立即数(操作数2)个字符长度的部分的操作指令;GET_RIGHTR格式GET_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令;GET_RIGHTRK格式GET_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令;GET_RIGHTRR格式GET_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令;GOTO格式GOTO标号(操作数1)该指令是完成直接地无条件跳转到指定行号的位置开始执行的操作;GOTOR格式GOTOR寄存器(操作数1)该指令是完成直接地无条件跳转到寄存器寻址的寄存器的值指定行号的位置开始执行的操作;CALL格式CALL标号(操作数1)该指令是同RETURN指令配合使用的,共同完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置;RETURN格式RETURN标号(操作数1)该指令是同CALL指令配合使用的;共同来完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置;PUSH格式PUSH寄存器(操作数1)该指令是同POP指令配合使用的;完成将当前寄存器寻址的寄存器的内容进行压栈操作;POP格式POP寄存器(操作数1)该指令是同PUSH指令配合使用的;完成将当前寄存器寻址的寄存器的内容进行出栈操作;SETON格式SETON直接寻址的内容(操作数1)该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的直接寻址的内容(操作数1)所指定的位置上的操作指令;SETONR
格式SETONR寄存器(操作数1)该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的寄存器寻址的内容(操作数1)所指定的位置上的操作指令;GOBACK格式GOBACK该指令是将当前的可能已经是访问到上下文的其他某个位置的浮动指针恢复到当前的扩展词指令的主指针的位置上的操作指令SEND格式SEND直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容发送到寄存器(操作数2)中的操作指令;SENDPOS格式SENDPOS直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个将当前的直接寻址的内容所在的位置发送到寄存器(操作数2)中的操作指令;SENDLENGTH格式SENDLENGTH直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个将当前的直接寻址的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令;SENDLENGTHR格式SENDLENGTHR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令;FIND格式FIND立即数(操作数1)运算符寄存器(操作数2)该指令是一个根据立即数(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令;FINDR格式FINDR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个根据寄存器(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令;NOP格式NOP该指令是一个不执行任何操作的空操作指令,仅是占有一个指令行;该指令主要用于调试使用,或是对准备取消的指令临时用该指令代替,而不会改变指令行的数目;ERROR格式ERROR描述性的文字(操作数1)
该指令是将根据操作数1内容(描述性的文字),生成一个错误提示窗口,窗口显示的内容就是该指令后面的操作数1的内容;ILET_RAM格式ILET_RAM直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前直接寻址的内容进行赋值的操作指令;ILET_REG格式ILET_REG寄存器(操作数1)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前寄存器(操作数1)的内容进行赋值的操作指令;MAKE_OUTPUT格式MAKE_OUTPUT属性名(操作数1)运算符描述性的文字(操作数2)该指令是一个把该指令后面的操作数2的内容写入到系统的输出窗口的操作指令;MAKE_OUTPUTR格式MAKE_OUTPUTR属性名(操作数1)运算符寄存器(操作数2)该指令是一个把寄存器(操作数2)的内容写入到系统的输出窗口的操作指令;MAKE_ROM格式MAKE_ROM标号(操作数1)该指令是完成将当前正在执行的扩展词指令进行悬挂处理,也即将当前的扩展词指令执行的现场,保存进悬挂工作区缓存中,以便下一次执行处于悬挂中的该扩展词指令;MAKE_ROMR格式MAKE_ROMR标号(操作数1)暂时保留的指令,用于以后扩展;MAKE_KNOWS格式MAKE_KNOWS描述性的文字(操作数1)该指令是一个通过该指令后面的立即数的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令;MAKE_KNOWSR格式MAKE_KNOWSR寄存器(操作数1)该指令是一个通过该指令后面的寄存器的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令;READ_RESULT格式READ_RESULT属性名(操作数1)运算符寄存器(操作数2)该指令是一个把由ANL语言的MAKE_KNOWS或MAKE_KNOWSR指令生成的句子,在执行完后,生成的在生成句工作区的结果,通过该指令把相应的内容通过指定的属性名(操作数1)读取送到寄存器(操作数2)的操作指令,是与MAKE_KNOWS或MAKE_KNOWSR指令配合使用的;THEN_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一样;THEN_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETR的话,则使用该指令;THEN_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完全一样;THEN_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完全一样;THEN_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFT的话,则使用该指令;其他的格式和功能都同TRIM_LEFT指令完全一样;THEN_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR指令完全一样;THEN_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRK的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRK指令完全一样;THEN_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRR指令完全一样;THEN_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RIGHT指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTR指令完全一样;THEN_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;THEN_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;THEN_GET_LEFT仅用在IFxx…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仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_RIGHT的话,则使用该指令;其他的格式和功能都同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指令完全一样;THEN_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全一样;THEN_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTOR的话,则使用该指令;其他的格式和功能都同GOTOR指令完全一样;THEN_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全一样;THEN_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令完全一样;THEN_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;THEN_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一样;THEN_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完全一样;THEN_SETONR仅用在IFxx…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仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;THEN_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同SENDLENGTHR指令完全一样;THEN_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样;THEN_FINDR仅用在IFxx…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_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM指令完全一样;THEN_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_REG的话,则使用该指令;其他的格式和功能都同ILET_REG指令完全一样;THEN_MAKE_OUTPUT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUT的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUT指令完全一样;THEN_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUTR的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUTR指令完全一样;THEN_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROM的话,则使用该指令;其他的格式和功能都同MAKE_ROM指令完全一样;THEN_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE_ROMR指令完全一样;THEN_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWS指令完全一样;THEN_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWSR的话,则使用该指令;其他的格式和功能都同MAKE_KNOWSR指令完全一样;THEN_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是READ_RESULT的话,则使用该指令;其他的格式和功能都同READ_RESULT指令完全一样;ELSE_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一样;ELSE_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETR的话,则使用该指令;其他的格式和功能都同LETR指令完全一样;ELSE_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完全一样;ELSE_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完全一样;ELSET_RIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFT的话,则使用该指令;其他的格式和功能都同TRIM_LEFT指令完全一样;ELSE_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR指令完全一样;ELSE_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRK的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRK指令完全一样;ELSE_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRR指令完全一样;ELSE_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RIGHT指令完全一样;ELSE_TRIM_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTR指令完全一样;ELSE_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRK的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRK指令完全一样;ELSE_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;ELSE_GET_LEFT
仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFT的话,则使用该指令;其他的格式和功能都同GET_LEFT指令完全一样;ELSE_GET_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTR的话,则使用该指令;其他的格式和功能都同GET_LEFTR指令完全一样;ELSE_GET_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRK的话,则使用该指令;其他的格式和功能都同GET_LEFTRK指令完全一样;ELSE_GET_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRR的话,则使用该指令;其他的格式和功能都同GET_LEFTRR指令完全一样;ELSE_GET_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHT的话,则使用该指令;其他的格式和功能都同GET_RIGHT指令完全一样;ELSE_GET_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTR的话,则使用该指令;其他的格式和功能都同GET_RIGHTR指令完全一样;ELSE_GET_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRK的话,则使用该指令;其他的格式和功能都同GET_RIGHTRK指令完全一样;ELSE_GET_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRR的话,则使用该指令;其他的格式和功能都同GET_RIGHTRR指令完全一样;ELSE_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全一样;ELSE_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTOR的话,则使用该指令;其他的格式和功能都同GOTOR指令完全一样;
ELSE_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全一样;ELSE_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令完全一样;ELSE_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;ELSE_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一样;ELSE_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完全一样;ELSE_SETONR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETONR的话,则使用该指令;其他的格式和功能都同SETONR指令完全一样;ELSE_GOBACK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOBACK的话,则使用该指令;其他的格式和功能都同GOBACK指令完全一样;ELSE_SEND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SEND的话,则使用该指令;其他的格式和功能都同SEND指令完全一样;ELSE_SENDPOS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDPOS的话,则使用该指令;其他的格式和功能都同SENDPOS指令完全一样;ELSE_SENDLENGTH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;ELSE_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同SENDLENGTHR指令完全一样;ELSE_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样;ELSE_FINDR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FINDR的话,则使用该指令;其他的格式和功能都同FINDR指令完全一样;ELSE_NOP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是NOP的话,则使用该指令;其他的格式和功能都同NOP指令完全一样;ELSE_ERROR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ERROR的话,则使用该指令;其他的格式和功能都同ERROR指令完全一样;ELSE_ILET_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM指令完全一样;ELSE_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_REG的话,则使用该指令;其他的格式和功能都同ILET_REG指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUT的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUT指令完全一样;ELSE_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUTR的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUTR指令完全一样;ELSE_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROM的话,则使用该指令;其他的格式和功能都同MAKE_ROM指令完全一样;ELSE_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE_ROMR指令完全一样;ELSE_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWS指令完全一样;ELSE_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWSR指令完全一样;ELSE_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是READ_RESULT,则使用该指令;其他的格式和功能都同READ_RESULT指令完全一样。
所述的面向自然语言处理的中央处理单元NLPU,主要完成自然语言的符号处理,其内部包括ANL指令数据的缓存器存放NLPU通过ANL指令数据总线从外部的ANL语言描述库读取的ANL语言指令数据;指令译码器对通过ANL指令数据总线送到指令码缓冲器中的指令码进行译码,并直接控制整个NLPU的所有与ANL指令执行过程相关的工作部件;时序控制单元以外部的时钟脉冲为驱动,为指令译码器的操作和其它的在操作过程中需要时序的控制部件提供操作时序;算术运算器主要完成算术运算操作,包括加、减、乘、除,以及与、或、非等的逻辑基本运算;字符运算器用来完成字符运算的各种操作,包括比较字符串判断,字符串的加操作、提取指定个数的字符串、清除字符串某一端的指定个数的字符、计算字符串长度等;运算操作数寄存器1用于暂时存放进行数值或是符号运算的第一个运算操作数;运算操作数寄存器2用于暂时存放进行数值或是符号运算的第二个运算操作数;结果寄存器用于暂时存放进行数值或是符号运算的结果,以及暂存其他的在处理过程中的信息;字符-数值变换器1在进行算术运算时,对存放在运算操作数寄存器1中的字符型数据转换为数值型的数据;字符-数值变换器2在进行算术运算时,对存放在运算操作数寄存器2中的字符型数据转换为数值型的数据;数值-字符变换器在进行算术运算时,对运算后的数值型数据再转换为字符型的数据;行号编解码器在对产生悬挂或者产生生成句的扩展词指令所保护的现场进行恢复时,将保护的扩展词指令的指针所在行的符号型的数据解码为数值型的数据,并加载到ANL指令行指针产生器中;多路选择器1该多路选择器受指令译码器控制,对送到NLPU的字符型数据线上的数据,选择算术运算器或字符运算器的结果进行输出;句子指针产生器根据当前句的指针值,生成下一个句子指针的值;句子指针缓存器该缓存器直接存放由句子指针产生器生成的有效的句子指针值;词指针产生器根据当前的词指针的值,生成下一个词的指针的值;词指针缓存器该缓存器直接存放由词指针产生器所生成的有效的词指针值;目标译码器对需要访问框架缓存器的ANL指令中的操作数1进行译码,并根据上下文访问的句位置、词位置以及属性名所合成的内容产生符号地址总线的地址值;主指针是目标译码器中的一个缓存单元,保存当前所处理的扩展词指令的序号;浮动指针是目标译码器中的一个缓存单元,动态地保存当前所处理的扩展词指令的以主指针为基础的序号;直接地址总线缓存器对寄存器寻址操作时,直接输出指定寄存器编号的直接地址,及存放其他的需要进行直接地址驱动操作的地址数据;直接数据总线缓存器暂时存放2进制数据;符号地址总线缓存器存放NLPU在以符号型数据作为地址进行外部访问的符号地址信息;符号数据总线缓存器主要是存放NLPU在以符号型数据作为数据进行外部访问的符号数据信息;输出文本接口在处理过程中的把需要产生输出结果的信息通过该接口输出;外部通讯接口用于与外部的传感器和驱动器的信息传递,及输出人工智能机的运行信息;ANL指令行指针产生器自动依次加1产生执行ANL指令时的行地址信息,其内容是数值的地址;主流程/悬挂流程控制部件用于切换主流程和悬挂流程的扩展词指令的执行;文本转写器用于将人工智能机的文本缓存中的内容按照句子序号、词的序号和框架缓存器的格式写入到框架缓存器中,及对地址译码器的编码工作;
句子提取器根据当前的句子指针产生器中的指针值,从框架缓存器中提取该指针指定的句子;句式提取器根据当前的句子指针产生器中的指针值,从框架缓存器中提取该指针指定的句式;词提取器根据当前的词指针产生器中的指针值,从框架缓存器中提取该指针指定的词;地址译码的编码写入器对不同的句子序号,不同的词序号及其在框架缓存器或生成句工作区缓存的物理地址编码操作后写入到地址译码器中;当前流程状态标志表明当前的处理状态是处在主执行流程还是悬挂执行流程;当前内容标志表明当前处理的扩展词指令ANL描述体的对象是句子、句式或者词;生成句标志表明当前执行的生成句是由句子、句式、或是词引导的;当前扩展词指令的工作区地址指针表明主流程中的当前扩展词指令在综合工作区的物理地址,及执行悬挂流程中产生的生成句的扩展词指令在综合工作区的物理地址;扩展词指令的工作区长度参数量单元该单元中保存每一个扩展词指令在综合工作区中所占的物理空间长度;加法器1该加法器通过把当前扩展词指令的工作区地址指针的值同扩展词指令的工作区长度参数量单元的内容相加,得到在综合工作区中当前扩展词指令的工作区指针的下一个扩展词指令的工作区指针;加法器2将当前扩展词指令工作区地址指针值与来自不同偏移量单元的值相加,得到寄存器在综合工作区中的绝对物理地址的值;IF偏移量单元保存扩展词指令的在综合工作区中所占的物理空间中的IF堆栈区最开始地址相对于该扩展词指令的最开始物理地址的偏移量;CALL偏移量单元保存扩展词指令的在综合工作区中所占的物理空间中的CALL堆栈区最开始地址相对于该扩展词指令的最开始物理地址的偏移量;PUSH偏移量单元保存扩展词指令的在综合工作区中所占的物理空间中的PUSH堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移量;自定义寄存器偏移量单元用于保存扩展词指令的在综合工作区中所占的物理空间中自定义寄存器区的最开始地址相对于该扩展词指令的最开始的物理地址的偏移量;通用寄存器偏移量单元保存扩展词指令在综合工作区中所占的物理空间中通用寄存器区的最开始地址相对于该扩展词指令的最开始的物理地址的偏移量;IF调转地址堆栈指针产生器产生当前扩展词指令执行中所需的IF堆栈区的指针值;CALL调转地址堆栈指针产生器产生当前扩展词指令执行中所需的CALL堆栈区的指针值;PUSH调转地址堆栈指针产生器产生当前扩展词指令执行中所需的PUSH堆栈区的指针值;零数据产生器对加法器2上的来自堆栈指针的数据赋值为零;产生悬挂的扩展词指令地址堆栈区该堆栈区为NLPU内部的一个支持堆栈操作的存储区,保存产生悬挂的扩展词指令在综合工作区缓存中的物理地址;产生悬挂的扩展词指令地址堆栈指针该堆栈指针用来指明产生悬挂的扩展词指令地址堆栈区中当前的最后进入堆栈保存的那个扩展词指令的地址所在单元的位置;产生悬挂的扩展词指令计数器记录在整个处理过程中产生的悬挂的扩展词指令的个数;比较器该比较器用于在执行悬挂工作区的内容时,判断产生悬挂的扩展词指令地址堆栈指针通过不断加1的值,是否等于产生悬挂的扩展词指令计数器中的值;产生生成句的扩展词指令地址堆栈区为NLPU内部支持堆栈操作的存储区域,用于保存出现生成句的扩展词指令在综合工作区缓存中的物理地址;产生生成句的扩展词指令地址堆栈指针指明产生生成句的扩展词指令地址堆栈区中当前的最后进入堆栈保存的那个扩展词指令的地址所在单元的位置,及最后堆栈弹出的那个扩展词指令的地址所在单元的下一个单元位置;根句比较器用于判断当前的外部输入文本的内容是否全部执行完毕;当前内容标志缓存器用于进入悬挂执行流程时保存当前句子、句式、词的内容标志;悬挂消除控制部件用于在执行悬挂流程中向对应地址单元写入清除标志。
采用上述技术方案后,由于本发明的人工智能机的知识库中的知识是直接用自然语言来进行描述的,并通过该人工智能机中的自然语言理解系统来“理解”知识库中各种知识,因而机器能够在不断地“学习”过程中,逐渐丰富机器自身知识库中的内容,从而使机器解决问题的能力得到增强,并且可以在知识库的建造、使用、扩展和修改上,做到简便易行,人人可为。
图1是本发明的硬件结构示意图。
图2是本发明中中央处理单元NLPU的结构示意图。
图3是本发明工作的总体流程图。
图4是本发明中知识块的结构示意图。
图5是本发明中自然语言理解系统的内部框图。
图6是本发明中框架式缓存的内部结构图。
图7是本发明中属性名的动态扩展示意图。
图8——图17是本发明中执行一个句子时综合工作区缓存的状态示意图。
图18是本发明中扩展词指令的ANL语言描述体的内部结构图。
图19是本发明中悬挂工作区的内容执行流程图。
图20是本发明中一个句子的带有悬挂工作区的执行的流程图。
具体实施例方式
本发明的基于自然语言理解的人工智能机从原理上讲可分为两大部分自然语言描述的知识库和自然语言理解系统。
1、自然语言描述的知识库,这里简称知识库,该知识库包括词的自然语言描述库、句子的自然语言描述库、句式的自然语言描述库三部分。其内容包括一定的关于人类语言的知识和世界知识,世界知识又包括常识知识和专业知识。该知识库中的知识是按“知识块”的形式来组织的,每个知识块中都包括“头部”和“体部”两个部分。如图4所示,箭头指向为知识块的头部,“}”指向为知识块的体部。“头部”也即说明该知识块的标题,可以是陈述句,比如“文稿检查的步骤”;也可以是疑问句,比如“什么是鲤鱼?”或是其他类型的句子,还可以是高级的词汇比如“意识”,“哲学”等;还可以是用自然语言直接解释的句式,比如“名+动+名+数+量+吗+?”等。“体部”则是用自然语言直接描述的具体解决“头部”所描述的问题的全过程。对于汉语而言,体部内容中的句子是以“人工”分词后的结果填写的,比如“AABBCC。”写成“AA BB CC。”,由于目前机器“分词”的准确性还不能达到百分之百,若是句子的某个分词结果不正确,就会导致机器在“理解”知识块体部的自然语言描述的句子的过程出错,所以,在建造知识库时,需人为地将句子进行分词,比如用空格或其他的分隔符来标示,以保证机器“理解”知识库中的内容时,不会因为分词不准确而出现错误,同时也由于机器在“理解”知识库中的内容时没有机器分词这个过程,因此,也避免了在分词处理时造成的时间消耗,提高了运行效率。
句子的自然语言描述库,主要是以描述相关问题的句子或是能够再“分解”为低一层的若干个自然语言句子解释的为知识库块头部标题的句子,体部则是直接用自然语言对该头部标题句子进行陈述、解释、回答或过程处理的若干个自然语言句子构成的描述体。词的自然语言描述库,主要用于以高级词汇为头部标题,体部则是直接用自然语言对该头部标题词汇进行解释、说明的若干个自然语言句子构成的描述体。句式的自然语言描述库,主要用于以构成句子的句式(句型)为头部标题,体部则是直接用自然语言对该标题句式进行分析处理的若干个自然语言句子构成的描述体。
2、自然语言理解系统,用来完成对自然语言描述的句子、篇章的内容进行“理解”。自然语言理解系统在理解过程中会适当地“调用”自然语言描述的知识库中一些相应的知识,来保证“理解”过程的正确性。自然语言理解系统所“理解”的自然语言既包括通过外部接口输入的文本句子,也包括自身知识库中的自然语言句子。该自然语言理解系统是整个人工智能机的核心。
只有自然语言才是最好的知识表示方法,因为人们对于知识的获取,很多都是通过语言文字的形式来实现的。自然语言本身是分层次的,从低级到高级逐渐递增,层层相套,高级层次总是包含着低级层次的语言。机器的自然语言“理解”必须从低级层次的自然语言开始。出于不同的目的考虑,对自然语言层次的划分也可能是多种多样的,这里只是从为了实现机器理解自然语言而如何采用自然语言进行知识表示这一点来出发,划分为两个层次高级层次,低级层次。高级层次的自然语言可通过逐层“降级”到低级层次的自然语言。实际中的自然语言的使用是这两个层次的各种混合,并没有明显的界限。这里定义低级层次是基本层次,除了基本层次之外的层次都一概称为高级层次,而不再对高级层次再进一步区分为一级高层,二级高层,三级高层……等等,尽管人们在使用中是存在这种蕴含关系,这里只是为了便于说明,而统称为高级层次。低级层次的自然语言的“理解”是通过执行“扩展词指令”来实现。扩展词指令包含词、句子、句式;扩展词指令的内容是对词、句子、句式进行解释的一些指令微操作。
自然语言的句子可以说都是由不同的词组成的,关于词的定义也有不同的说法,对于汉语来说,这里基本上是按常规词典的方式来区分,有的一个字是一个词,比如“打“、“放”;有的是两个字词,比如“蔷薇”、“葡萄”,还有四个字的词,比如“成吉思汗”、“孜孜不倦”(成语);以及更多字的词的,比如“埃塞俄比亚”等。这里词的定义是按照在机器上能处理的方式来进行划分的。
“词指令”一词是由计算机术语“指令”引申而来的。意思是指机器理解一个自然语言的句子,就象计算机执行一小段的程序一样。“词指令”的外部表现也就是一个词的字符串,但执行时却能够完成“理解”自然语言的句子的某些相关操作。机器对于一个句子的理解过程基本上就是执行一遍该句子的所有“词指令”的过程。
大多数句子都可以“分解”为词指令来执行,但是有些句子本身属特例情况,若是将该句子通过“分解”为词指令来执行的话,就有可能出现错误,或者是甚为麻烦,对于这样的句子是不适合按常规的词指令方式来执行的。这样的句子要么是属于浑然一体的句子,应该作为一个固定特殊句子来处理,或者说相当于一个宏“词指令”;要么本身并不属于特殊句子,并且也可以按词指令“分解”来执行,但是却不能很好地完成理解过程。比如“河里有4条小船,”,因为有一个“有”字,那么,就可以通过按“xx有xx”进行“分解”词指令处理,但是对于像“河里4条小船”这样的句子,因为没有“有”,若按照逐个执行词指令的方式,肯定会造成信息不全,甚至会出现错误。所以这里引入了“句式”的概念,先将当前的句子“分解”为词指令的方式,并逐个执行这些词指令,然后再在执行完这个句子的最后一个词指令后,根据这些词指令执行的词性结果生成对应的“句式”,在句式库中进行匹配,比如当“河里4条小船,”这个句子执行完最后一个词指令“,”后,生成的句式就是“名+介+数+量+名+,”,这里也假设在句式库中匹配到了该句式,该句式的具体内容,同“河里有4条小船,”的“有”的功能是相近的。这样,先把句子“分解”为词指令执行,然后再将该句子的句式在句式库中进行匹配并执行的方式,既能做到比较合理地分配任务,且又不会遗漏什么。所以,句式匹配处理的过程是句子“分解”为词指令执行的有力补充,也避免了单独由词指令来进行处理的不方便和很难处理的问题。对于上述的特殊句和句式的情况,都是在词指令的基础上进行的扩展,它们与词指令一起统称为“扩展词指令”。
自然语言理解系统执行时是按照“逐句”或“逐词”这样的一个顺序来执行的,每个扩展词指令执行时都有一个对应的指针位置,以表明当前的扩展词指令是属于哪一层句子,哪一个句子,第几个词这样的信息,这是全程执行过程中唯一定位的,是通过“序号”来确定的。这种标明当前扩展词指令所在位置的指针称之为该扩展词指令的“主指针”。当执行该扩展词指令的某些微操作时,该扩展词指令的某些访问可能又会“跑”到别的其他位置,这种随时变动的指针就称之为“浮动指针”。扩展词指令也正是通过浮动指针来完成上下文的信息的访问的,当系统刚执行到某一个扩展词指令时,浮动指针的值先初始化为主指针的值,当在以后执行该扩展词指令的微操作时,可能随着不同的指令,浮动指针值会发生改变,并且执行过程中,也可以重新再回到自己的起先位置,也即其值等于该扩展词指令的主指针的值。
以上叙述了通过扩展词指令的模式来理解自然语言的句子,扩展词指令的运行依赖于相应的运行环境,主要是依据框架式的数据缓存结构来实现。
如图6所示,框架式知识表示是人工智能领域中知识表示形式的一种。一般具有对象、属性、值这基本三元组。这里延用对象、属性、值的概念,用来表示人工智能机工作过程中相关数据的状态。整个人工智能机工作时,除了一些状态数据采用堆栈形式保存的外,另外大部分的中间数据都是在这个“内存”中存放,所以称之为“框架缓存”。框架缓存中存放的属性的值是由“值\地址码”两部分构成,可以有4种情况,包括“空值(没有值也没有地址码)”,“只有值而没有地址码”,“没有值但却有地址码”,“既有值又有地址码”。
(1)框架缓存中的对象主要是指在对象的“名称”那一列所能列出的内容,包括词,标点。
(2)框架缓存中的“序号”是表示对象所在的句子所在的层号、句子号和词号。比如对象A01(词)的序号是“1/1”,表明是第一句子中的第一个词,对象B03(词)的序号是“2/3”,表明是第二个句子中的第三个词。其他序号表明的内容,依此类推。
(3)框架缓存中的对象的属性名分为基本属性名和扩展属性名两种。基本属性名是每次运行都存在的那些常用的属性名,比如像“名称”、“数量”、“颜色”……等等;除了基本属性名之外的属性名都称之为扩展属性名。
(4)框架表格的行数框架缓存表格中的行数是动态增加的,不同的输入文本的句子内容和运行中不同的知识库中的句子的内容,就会占有不同的行数,比如句子数,句子中包含的词的个数。同时不同的处理,也会使框架缓存器的表格中的行数发生变化,比如知识库中的知识块中体部句子的复杂嵌套执行等。
(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语言的格式为
其中“……”部分为指令操作的附加项,除了注释外,其余的则为编译后自动生成的部分。
ANL语言的特点(1)、通过ANL指令中的“操作数1”内容的不同,可以具有不同的访问能力。比如,可以在各个词之间进行访问,像“该句.该句.上一词.名称”、该句.该句.下一词.数量”、该句.该句.最后词.名称”等;可以在各个句子之间进行相关访问,像“该句.上一句.最前词.名称”、“该句.下一句.最后词.名称”、“该层.最后句.最前词.名称”等等;还可以在不同的嵌套层之间(包括高级层次句…->次高级层次句…->基本层次句->词指令->ANL指令)进行访问,像“上一层.最前句.最前词.名称”等等。
下面简单介绍几个比较重要的指令,SETON,SETONR,GOBACK;SETON指令是以当前扩展词指令的浮动指针位置为基础,根据的当前直接寻址的内容(操作数1)而进行新的访问位置的设定。比如“SETON该句.该句.最后词.名称”---直接就可以将当前的正在执行的扩展词指令的浮动指针的位置,暂时设定到该句子的最后一个词的位置上,然后可以进行该词的所有属性的访问操作,甚至可以根据这个暂时的位置进入到该词的前一词位置或其它可访问的位置进行访问,这也就是通过浮动指针的上下文访问过程。
SETONR指令作用同SETON,只不过是根据寄存器的内容来进行浮动指针的位置设定。比如寄存器“位置REG”(可以随意设定寄存器名称,目前每个词指令的寄存器个数为40个,也可以调整到更大的范围)记录了某一个句子中的某一个词的位置,通过“SETONR位置REG”指令就可以暂时地设定浮动指针进入到该“位置REG”寄存器所指定的句子或词的位置,从而进行各种相关的“访问”。
GOBACK指令则是将已经设定到其他的执行位置的浮动指针,重新“招回”当前正在执行的扩展词指令的位置。也即浮动指针的值重新被赋值为当前ANL语言描述的扩展词指令的主指针的值。
SETON,SETONR,GOBACK指令能够使当前正在执行的扩展词指令的浮动指针暂时设置到其他别的位置,便于进行各种上下文的“访问”,还有FIND,FINDR指令,也是能够将当前浮动指针的位置暂时设定到其他别的位置。除此之外的其他的ANL语言指令,都是在当前的浮动指针的位置不变的情况下,来访问其他位置的信息的,比如“LET该句.上一句.最前词.数量=100”,仅是将上一句最前词的数量属性赋值为“100”,而自身浮动指针的位置还是当前的位置,并没有被重新设置到上一个句子的第一个词的位置,当然也不用GOBACK指令来返回到当前扩展词指令的主指针位置,也即该类型的ANL指令不会使浮动指针的值发生改变。
由于ANL语言的这种可以在外部输入的文本句子和知识库中的知识块体部句子这样的一个全范围内进行“访问”,致使ANL语言具有“可以通过上下文的信息来方便地处理自然语言”的特性。
(2).可以通过MAKE_ROM,MAKE_ROMR指令将当前的正在执行的扩展词指令进行“悬挂”处理,并且每时都在“观察”致使产生“悬挂”的因素是否改变。因为在很多情况,“理解”一个句子并不是简单地依次顺序执行完句子中的每一个词就告结束的,而是很可能当前这个词的“理解”需要该句子的后面的词的说明,甚至是后面的句子的说明,可此时后面的部分还没有来得及执行到,这就需要“等待”当前这个词后面的部分都得到了处理之后,再来接着继续处理当前这个词,只有这样才能保证“理解”的正确性,这个“等待”过程就是通过将当前这个词暂时“悬挂”,并随时“观察”后面部分的执行情况来确定当前“悬挂”的词指令的执行,当然也会存在后面的词的执行可能需要“观察”前面的词的处理,而前面的被“观察”这个词的执行可能又需要“等待”更后面的词的处理的这样复杂的协同“观察”情况,这些也都是通过“悬挂”机制来处理的。若只是属于单纯地后面的词“观察”前面的词的话,那么,只要通过词指令的上下文访问功能就可以实现了,而没有必要进入“悬挂”来处理。关于“悬挂”处理这部分功能主要是通过“悬挂工作区缓存”(“综合工作区缓存”的一部分)来完成的,该缓存用于保存所有的产生“悬挂”的扩展词指令的各种信息,包括当前扩展词指令正在执行的ANL语言指令所在的行位置(ANL语言的行指针),各种寄存器的数据等现场信息。如果当前“悬挂工作区缓存”的内容为不空时(“悬挂”的扩展词指令,目前个数最多为100个,也可以通过设置到更大的范围),那么,每向后执行一个扩展词指令,都要将“悬挂工作区缓存”中的从第一个开始,向后的每一个“悬挂”的扩展词指令,根据当时保存的产生“悬挂”时的信息,重新调出来执行,从那个致使产生“悬挂”的ANL指令的指定位置来继续执行,如果执行的过程中有新的改变,比如当“悬挂”的词指令的产生“悬挂”的因素撤销,则将该“悬挂”的词指令,从“悬挂工作区缓存”清除,或者是虽然继续产生“悬挂”,但是产生悬挂的因素有所改变,比如从原来的产生悬挂的ANL指令行号(MAKE_ROM,MAKE_ROMR指令)是“20”,现在已经变化为“50”,那么“综合工作区缓存”的执行,则要重新再从第一个“悬挂”的扩展词指令开始执行,直到“悬挂工作区缓存”中的每一个“悬挂”的扩展词指令的执行过程中都没有新的改变,那么,此次的“悬挂工作区缓存”的“悬挂”扩展词指令的执行才算结束。这个过程也就是被“悬挂”的那些扩展词指令随时都在“观察”致使产生“悬挂”的因素是否改变的过程。因为有的时候需要彼此“观察”和彼此执行这种协同工作的情况,只要当“悬挂工作区缓存”的内容为不空,那么每执行一个外部输入文本中的或知识库文本中的扩展词指令之后,都要将进入“悬挂工作区缓存”的每一个“悬挂”的扩展词指令执行一遍,直到“悬挂工作区缓存”中的每一个“悬挂”的扩展词指令在执行过程中都再也没有新的改变为止。悬挂工作区的内容执行情况见图19。可以说,在“悬挂工作区缓存”中的每一个“悬挂”的扩展词指令在整个输入文本的处理过程中一直都是处于一种“观察”自己所需要的信息的状态。当然,当输入文本全本执行结束,可能ROM问题阵列区还会存在“悬挂”的扩展词指令,一方面,扩展词指令的ANL语言的描述块可能还需要进一步的修改和完善,才能够有正确的结果输出;另一方面,可能已经有正确的结果输出了,但是仍然还是会有一些多余的未被解决的问题(致使产生“悬挂”的因素),这些问题可以视为多余部分,不予理会。
由于在“悬挂工作区缓存”每一个“悬挂”的扩展词指令在整个输入文本的处理过程中一直都处于一种“活”地“观察”状态,所以,这个“悬挂”等待功能可以使系统在进行上下文访问时,不会因为当前的信息不全,比如,可能系统还没有执行到需要关联的位置,致使相关联的位置的相关信息现时为空,那么可以一直“等到”后续的处理都完成后,再去处理,而且是随时“观察”地随时处理,可以使每个扩展词指令同上下文其他的部分的联系都可以得到相应的完整的信息,从而使上下文的生成的语境信息完整,除非句子本身的信息不全,或者扩展词指令的ANL语言描述不完善,或者对当前输入文本中描述的问题来说是属于多余的“悬挂”问题之外,都可以通过彼此“互相”影响地建立一个相关的语境信息,前面的词可以随时“观察”该词后面的词或者后面的句子的有关信息,后面的词可以“观察”前面的词或者前面的句子的信息,使之都能“协同前进”。比如第一个词的执行需要倒数第二个词的信息,倒数第三个词则又需要开始的第一个词的信息,也都会使第一个词一直“观察”并“等待”到倒数第二个词的信息完整后,倒数第三个词一直“观察”并“等到”第一个词的信息完整后再处理,从而使整个系统的运行过程都能做到有条不紊地进行,虽然一时没有取到信息,但是通过“悬挂”等待都能够各自取到所需信息,以避免系统因为信息不完整而无法正确运行下去的问题。
(3).通过MAKE_KNOWS,MAKE_KNOWSR指令可以完成在ANL指令执行过程中,随时访问知识库中的直接用自然语言描述的内容,可以是人类关于自然语言的知识和世界知识(常识知识和专业知识),这个过程就是自动“问题句生成”。若使机器能够很好地“理解”自然语言,那么必须具备一些背景知识,并以此进一步确定一些语用信息,以保证更准确的自然语言处理。举个例子说明,比如“河里有4条小船,5条大船,河里一共有几条船?”,如果将“河里一共有几条船?”“条”换成“只”就成了“河里一共有几只船?”我们的常识是作为“小船”的量词可以是“条”也可以是“只”。这里“条”和“只”是等同的。自然的,机器在处理到“河里一共有几只船?”时,就需要有一个判断“条”是不是与“只”等同的过程,否则,系统无法进行以后的运行。当系统执行到这里的时候,系统通过指令“MAKE_KNOWSR 问题_REG”来自动生成知识库中的问题句,这里的寄存器“问题寄存器_REG”是保存了在执行过程中的通过量词寄存器REG1(其值为“条”)和量词寄存器_REG 2(其值为“只”)生成的“条和只是什么关系?”这样的句子字符串。这个字符串的生成是这样的由于需要知道二者的关系,所以必须通过指令“LETRR寄存器X~+=寄存器Y”实现字符串相加,直至得到“问题寄存器_REG=量词寄存器_REG 1+“和”+量词寄存器_REG 2+“是什么关系?”,另外是“只”在前,还是“条“在前,还要通过内部自动的根据“统一的先后次序标准”来确定的,比如拼音顺序,或标准汉字库的编码号顺序,因为“条和只是什么关系?”也许在知识库中的句子本身就可以检索到,但是若是“只和条是什么关系?”就不可能在知识库中检索到,尽管内容一样,但是检索查找的过程是一个严格的字符串匹配的过程,必须是严格等同的,机器在检索时并不知道“尽管这种次序颠倒,但仍还是同一个问题”的情况,至于是三者,四者以上的排列关系就会有更多的组合情况,所以先后顺序必须是按照“统一的标准”来进行的,通过统一标准能够把各种不同的顺序总能表示成一种在知识库中能够唯一的顺序,这样可以不会对本是同一个问题,仅是因为内容描述的先后顺序的原因而造成检索失败;另外,也没有必要把所有各种组合成的句子都作为知识库的内容,一方面加大了不必要的容量上的开销,另一方面也会加大维护的工作量,当然这里只是对知识库中的属于并列关系的内容所排列的标题句子实行“统一标准”,因为这个过程是对句子的匹配查找,而不是对句子进行“理解”。“MAKE_KNOWSR问题_REG”指令的执行过程是这样的,首先根据“条和只是什么关系?”的句子进入知识库中查找,如果没有,则输出“系统不知道‘条和只是什么关系?’,不能继续执行,请建立这样的知识库后再执行!”这样的提示。若在知识库中已经建立了这样的问题句和答案,那么就能在知识库中检索出来,并执行这个答案知识库的句子,可能是一个句子,也可能是若干个句子,也可能是高级层次句,也可能是低级层次句(基本层次句),当都执行完后就会有一个结果输出,通过OUTPUT,OUIPUTR指令输出到“生成句工作区缓存”中的上述的MAKE_KNOWSR指令所生成的句子“条和只是什么关系?”的工作区的属性名对应的区域进行赋值。这里需说明一点,OUTPUT,OUIPUTR指令当判断当前所在的句子是通过MAKE_KNOWS,MAKE_KNOWSR指令而生成的句子时,就会向生成句子的工作区对应属性名区域赋值,而不是直接输出到系统的输出窗口。反之,则直接输出到系统的输出窗口“RESULT OUTPUT”中,因为这是把OUTPUT,OUTPUTR所在的扩展词指令所在的句子直接作为文本输入句子,或者是知识库的直接执行句子的,而不是通过MAKE_KNOWS,MAKE_KNOWSR指令生成的。再提到一点,通过MAKE_KNOWS,MAKE_KNOWSR生成的句子的工作区属性名也是按“统一标准”来进行的,包括属性名。因为只有统一了,才能使系统按照这个“统一标准”有条不紊地进行下去,否则会造成错乱,这样的属性名是否是标准属性名?在系统编译时都能够检查出来,以保证系统运行的正确性。再比如上个例子,OUTPUT,OUTPUTR指令在对应“等同”的属性名的赋值,为“是”。同时说明一点,OUTPUT,OUTPUTR指令在MAKE_KNOWS,MAKE_KNOWSR生成句子输出时总是赋值到最近的那个生成句所在的属性名区域,因为可能还会有MAKE_KNOWS,MAKE_KNOWSR生成句子的嵌套,这种情况是逐层完成的,还有一点是,必须是与指定的扩展词指令的ANL指令行号对应的,因为也会存在同一个扩展词指令的执行中会有好几处MAKE_KNOWS,MAKE_KNOWSR生成句子的情况,为了不造成错乱,行号指定是必须的。尽管他们都可能再有“等待”和“观察”的情况。必须保证那些处于“悬挂”的扩展词指令在处理过程中都能准确地找到自己的“归宿”,而不会出现“走错家门”的情况。系统会为每一个MAKE_KNOWS,MAKE_KNOWSR生成句子都建立了相应的堆栈区,每次启动系统时都会自动清空。对于生成的句子的工作区在处理过程中一直保持有效,并没有像悬挂工作区缓存中的扩展词指令需要有“清除“的情况,同时其内容大小也是可以调整的,目前最大是50个MAKE_KNOWS,MAKE_KNOWSR生成句的区域,必要时可以重新再设置,每一个生成句工作区中包括生成句子的各种相关信息,也有很重要的属性名区域。当扩展词指令执行了MAKE_KNOWS,MAKE_KNOWSR生成句后,随后紧接着的指令就应该是“READ_RESULT属性名寄存器REGx”指令,该指令将指定的属性名的值读到自定义的寄存器REGx中,以便于处理,若是该寄存器的值为空,也可以通过“MAKE_ROM”指令将该扩展词指令的处理进行“悬挂”,直等到有结果为止。就上面的例子来说,当在“MAKE_KNOWSR问题_REG”指令之后,紧接着就应该是指令“READ_RESULT等同寄存器REGx”,然后最好也有“MAKE_ROM”指令将该扩展词指令,用于判断当该寄存器“寄存器REGx”的值为空值时进行“悬挂”,以便于直到有了结果再往下执行,这里假设“READ_RESULT等同寄存器REGx”的读结果为不空,并且“寄存器REGx”的内容等于“是”。那么机器在处理“河里一共有几只船?”时,因为“分析”了“条和只是什么关系?”,也即引入了常识性知识进行处理,知道了“条”和“只”在这里是等同的,所以也就可以很从容地进行后面的处理,以便得出正确的答案。
ANL语言的这种能够根据需要适时地引入语言知识、常识知识和专业知识进行处理,从而使机器的“理解”具有了在一定背景知识的情况下进行处理的能力,减少了只能在语言学知识的层面上进行处理的局限性,随着世界知识的不断扩充完善,机器的“理解”能力就会更加强大;而这种知识的描述又是自然语言形式的,所以更便于修改,维护和发展,也避免了因所有知识都用纯ANL语言进行描述所造成的复杂性,而难以维护。因此,这种用自然语言直接描述知识的表示方式,在很大程度上解决了知识库越庞大,维护越难的问题。
(4).通过ANL语言可以在运行过程中对扩展词指令的属性名进行自动地“动态”扩展,也即随时可以根据需要进行扩展,而不去对属性名的个数进行限制(可以近乎任意,只要系统的存储容量允许),可以使系统在处理时,不会因为缺少相应的属性名而造成错误,从而保证相关信息完整性,以使处理过程能够正确进行。参照图7。是在对象“A04”对应的基本属性名的那个行的下一行开始,插入了一个扩展属性名的新的两个行,即从最上行数第六行,为了表明这是对象“A04”的新属性名扩展行,在该对象“A04”的名称列内容“A04”的前面加入了“■”称为“■A04”,并在该行的属性列可以扩展其他的除基本属性名之外的属性名,比如这里的“加工时间”,“材料”,“公差级”这些扩展属性名。紧接该行的下一行则为扩展属性值的行,在该对象的名称“A04”加入了“□”称为“□A04”,可以在该行的对应单元写入对应上一行的新扩展属性名的值。比如,这里的对应扩展属性名“加工时间”的值是“2002年”,对应扩展属性名“材料”的值是“黄铜”,对应扩展属性名“公差级”的值是“2”,若是某一个新扩展的属性名的行的一行都写满了,那么可以再在该扩展属性名的紧接着的下两行(因为下一行是用于写入该行扩展名的对应值的行)再插入新的扩展属性名行和扩展属性名的值的这两个行,以此类推,直到该词的所有需要的属性名都扩展完毕,对于一个对象的扩展属性名的命名,系统还支持同名加数字的格式,比如“存在物1”,“存在物2”,“存在物3”等等。比如在对象“D02”扩展的动态属性就有两行,一个是以扩展属性名“批号”开头的那一行,另一个则是以扩展属性名“验证数”开头的那一行,表明是扩展属性名所在的行,扩展属性名行的紧接下一行就是对应的属性值的所在的行,比如对象“D02”的扩展属性名“批号”对应的值是“CC0088”,对象“D02”扩展属性名“验证数”的对应的值是“10”等等。对象属性名的“动态”扩展是根据执行不同的扩展词指令的具体情况,通过运行扩展词指令的微操作描述库的内容来实现扩展属性名的行和对应的扩展属性名的值的行的插入的。在这里,框架缓存区只是为实现这种“动态”扩展操作提供了一个物理平台而已。
(5).ANL语言通过编译过程,可以将ANL语言中的每一条指令“一一对应”地翻译成面向自然语言的CPU硬件结构(后面详述)的一条机器指令,也即系统的最底层机器语言,这种直接定位于硬件执行的语言,在处理速度上,更适合机器处理人类自然语言,因为若是在传统CPU上将ANL语言通过某种计算机编程语言(中间语言)的若干次变换后的得到的传统CPU的机器代码的话,那么,整个执行效率必然会因为太多次变换而降低。编译过程除了检查ANL语法是否正确外,主要是将指令码、操作数、运算符,还有转移的地址以及标号这样的助记符换成硬件对应的能够直接译码的二进制数,指令的操作数中可以直接支持像“计算机科学”这样的词,甚或小短句的操作,只不过是二进制形式表示而已。该ANL语言是直接为硬件实现来定做的,比如“IF…THEN…ELSE…”描述中的,直接是采用“THEN_”前缀和“ELSE_”前缀形式来描述指令的,这样虽然指令的个数增加了,但执行的效率提高了,因为一条汇编指令就完成了“THEN”或“ELSE”紧接着的那条指令,而不是分为两个步骤来进行。另外,还有指令码、操作数、运算符在指令中的位置都是为了考虑硬件实现而确定的。
(6).ANL语言必须依赖于相应的运行环境才能执行。每一个扩展词指令都有一个对应的ANL语言的描述,ANL语言在系统的运行环境中可以完成各种层次的复杂的嵌套情况的执行。整个系统执行的关键主线是序号,这个序号在整个执行过程中一直是唯一的,也正是基于这样的对每个词指令的唯一地址,才使系统的运行都会层次分明,句和词的操作都有唯一的定位而不致错乱,尽管可能有相同的词,相同的句子,但是由于定位在不同的空间,所以都能很好的区分开来,保证系统有条不紊地执行。系统支持各种嵌套的层次的处理,高级层次句……->次高级层次句…->低级层次句(基本层次句)->扩展词指令->ANL语言指令。基本理解过程是这个顺序,但是在ANL指令的执行中可能又会生成高级层次句,然后再嵌套前面的过程来执行。总之,是一个各种层次的嵌套都会各有其位,甚至这之间又会有各种“悬挂”的“等待”。尽管如此,系统也都能有机地彼此协调地工作,从而为自然语言理解系统的“理解”处理提供尽可能的复杂过程的支持。
ANL指令行指针就是在执行一个扩展词指令的ANL语言描述体中一条ANL指令时,表明当前执行的指令所在的位置。ANL指令行指针的值是通过ANL指令所在的行号来确定的,因为每一个扩展词指令的描述,都是由一个包含了若干个ANL指令构成的描述体来完成的,所以当每执行一个扩展词指令的ANL语言描述体时,就是通过ANL指令的行指针从开始第一行开始逐行执行的,如果不碰到跳转和调用之类的分支转移指令,那么该ANL指令行指针值会逐行递增执行下去。否则,就直接跳转到指定的行号去开始执行。每当开始执行一个扩展词指令的ANL语言描述体时,系统总是将ANL指令行指针的值,初始化为在ANL语言描述体中的第一个行的位置。
根据以上分析,通过采用ANL语言描述的“扩展词指令”的执行方式,系统可以对一个属于低级层次(基本层次的)的简单句子的进行“理解”。继而之后,可以再“理解”一个稍微高级一点的高级层次句子(也许仅比基本层次句高一个层次),因为这样的句子可以“分解”为若干的简单的低级层次(基本层次的)的句子,而这些低级层次的句子又都是属于机器已经能“理解”的句子。那么再高一层的高级层次句子,又可“分解”为若干个次高级层次的句子,若干个次高级层次的句子又可以再“分解”为再低一层的次高级层次的句子,直至到最后,都“分解”到了最低级层次(基本层次)的可由ANL描述的扩展词指令描述的句子,这些句子可能是属于通过“分解”为逐个ANL描述的词方式来执行的,也可能是属于ANL描述的特殊句这样的一个直接整句执行的。因为ANL语言描述的内容都是机器实际可操作的,因此,机器对整个自然语言的“理解”,也就可以通过对自然语言进行不断地逐层“分解”来实现了。
综上所述,通过在相应的自然语言运行平台下的ANL语言的底层处理,能够有效地完成机器“理解”自然语言所需要的各个条件,包括采用高级的知识表示,介入常识知识和专业知识,可以动态地扩展属性名,以及可以很好地管理维护知识库等。因自然语言具有自然、灵活、人人都懂等特点,那么系统在不断发展的过程中可逐渐延伸,而不是停留在单一的狭窄领域,可适应不同任务,可以具有更多综合的知识,以便解决更复杂的问题,使人工智能机具有越来越高的智能水平。
如图1所示,本发明从硬件方面来讲主要包括面向自然语言处理的中央处理单元NLPU和以此为核心的外围设备。外围设备有文本输入接口、文本缓存(双口RAM)、框架缓存器、地址译码器(框架缓存)、自然语言描述的知识库、句子缓存器、句式缓存器、词缓存器、文本输出接口、输入/输出设备扩展接口、综合工作区缓存、生成句工作区缓存、地址译码器(生成句)、生成句属性地址产生器、地址译码器(句子)、地址译码器(句式)、地址译码器(词)、ANL指针地址产生器、ANL语言描述库。总线包括符号地址总线、符号数据总线、直接地址总线、直接数据总线、ANL指令数据总线、ANL指针数据线。
现有的传统CPU结构都是面向数值计算,而不是面向符号处理。由于其结构本身的限制,在对符号处理时很难达到非常高的工作效率,因此必然会因为现有的CPU本身存在的在处理人类语言信息时的不合理性,从而造成以此为核心的整个智能系统的工作水平不高。
本发明中的中央处理单元NLPU,是一种根据自然语言的处理要求设计的全新型的面向自然语言处理的CPU结构,本发明采用新的命名以示与传统的CPU区别开来,称之为NLPU(Natural Language Processing Unit,自然语言处理单元)。它是整个人工智能机工作的核心部件。其特点在于1、以ANL语言直接作为NLPU的汇编语言,可以访问自然语言文本中的句、词和段等语言单位的位置上的信息,能够直接支持上下文的处理,可以支持ANL指令中的“悬挂”,“生成句”等处理。
2、具有更宽的数据宽度,在汉语的处理中,可以一次直接处理一个ANL指令中包含像“布宜诺斯艾利斯”这样长度的词的数据宽度,指令码的总宽度可以是320Bit以上(数据宽度的位数与不同的语种有关系)。
3、直接支持多种总线操作,比如符号地址总线,符号数据总线,直接地址总线,直接数据总线,ANL行指针数据总线,ANL指令数据总线。
4、由于NLPU所支持的总线的数据宽度都是很大,所以,整个芯片的总引脚数可能超过1000个,为了芯片封装的工艺考虑,也支持通过总线加锁存的方式,来分时完成总线的数据操作,引脚数目可以大大减少,以支持现有的芯片封装工艺。
文本输入接口用于通过该接口来接收以固定格式的外部输入文本的文字数据流,外部输入的内容必须是进行预先分词处理过的文本,对于是属于机器分词的文本,还要加入一个人工校对的环节。
文本缓存该缓存为双口RAM,该缓存有两个用途。第一,把通过输入文本接口输入的文本数据在此缓存区中暂存,以便于自然语言处理单元(NLPU)通过直接地址总线和直接数据总线把该文本缓存的文本内容,以句子、词为单位按照框架缓存器的排列格式写入到框架缓存器(RAM)的存储器中。第二,也用于系统在自然语言“理解”过程中,对于某个自然语言的句子、句式、词在自然语言描述库中匹配成功后,在执行其对应的体部中的若干个自然语言句子时,暂时存放这些体部中的句子,以便于NLPU把自然语言描述的知识库中的体部中的这些句子写入到框架缓存器中。该文本缓存是使用双口RAM实现的,以保证在向文本缓存写入文本的过程中,NLPU也可以把已经写入到文本缓存中的内容读出来并写向框架缓存器中,以避免那种因“等文本全部都写完后,才可以向框架缓存器写入”所造成的等待时间过长而影响运行效率的问题。
框架缓存器主要是按表格方式分配的RAM存储器,其中的内容包括句子、词名称、定位序号、相关属性名、还有属性值的物理空间。这里直接以对象、属性、值的概念来表示人工智能机工作过程中相关数据的状态的。整个人工智能机工作时,除了一些状态数据采用堆栈形式保存的外,另外一些大部分的中间数据都是在这个“内存”中存放。同时这里的“内存”中存放的属性的值是由“值\地址码”两部分构成,可以有4种情况,包括“空值(没有值也没有地址码)”,“只有值而没有地址码”,“没有值但却有地址码”,“既有值又有地址码”。
该框架缓存器的数据宽度是按照一个词或短句的宽度来设定的,对于汉语来说,一个存储单元的字长可能是256Bit(16个汉字的长度),长的数据宽度是为了提高处理数据的速度,如果是64Bit字长的话,那么256Bit的吞吐量就会提高四倍。该存储器虽然使用通用RAM实现的,需要2进制的物理地址总线,但是配上地址译码器(框架缓存)后,NLPU就可以直接通过符号地址总线以序号(字符串)为地址直接访问框架缓存器。假设,某个句子的词“老虎”在框架缓存器的序号是“1-2-3/1”,那么,NLPU要是访问这个词“老虎”的“数量”属性的话,直接在符号地址总线上输出“1-2-3/1.数量”,在一个存储器读操作周期过后,NLPU就可以从符号数据总线得到“老虎”的“数量”属性的值,比如得到“100”。这样,NLPU对框架缓存器的读写操作就可以看作是直接基于序号(字符串)的寻址操作,从而更便于NLPU的处理。
框架缓存器的地址译码器即地址译码器(框架缓存器),该译码器是采用直接内容寻址存储器(CAM)来实现的,直接将框架缓存器的序号译码成框架缓存器的物理地址,该译码器的编码只是在NPLU向框架缓存器写入新增加的句子的时候才随机写入的,因为随着每次外部输入文本不同(注意,外部输入文本的句子的写入不同于处理过程中的知识库中的嵌套的句子的写入,前者是在处理新的外部输入文本时,先要清除所有编码后重新写入新编码,而后者则只是在已有的基础上增加新的编码),所以词的名称和序号以及物理地址的对应都不同,不是固定的,是随机的。对于地址译码器编码的操作是由NLPU通过直接数据总线和读写控制来完成的。另外,当该译码器的模式端为“0”时,则用于将输入端与输出端直接“直通”,不经过译码环节,这专门用于在NLPU的模式被设置为“00”(外部访问)时,直接通过符号地址总线以2进制的地址形式来完成对框架缓存器中的每一个存储单元的访问,这主要用于调试时,将框架缓存器中的信息通过NLPU的输入/输出扩展接口完成对框架缓存器的“观察”。
自然语言描述的知识库主要包括三个部分。句子的自然语言描述库、句式的自然语言描述库、词的自然语言描述库。它们都是以硬盘作为存储媒介的,因为自然语言的知识库需要不断增加大容量的知识内容,且应是非易失性的。当然,为了更高的速度,采用巨大容量的半导体存储器也是可以的。它们本身分别都是通过各自的硬件检索机来完成快速的句子、句式、词的查找,硬件检索机是一种通过与存储器相连,具有“在检索信息时,检索速度与存储器中信息数量无关”的特性,从而解决了“信息数量越多,检索速度越慢”的瓶颈问题,该硬件检索机为已授权专利(98108581.4)。每个硬盘接口除了与硬件检索机相连来完成查找功能之外,还通过该接口与外部进行通讯,以完成对硬盘的知识库中的内容进行维护更新。
ANL语言描述库主要包括三个部分,句子的ANL语言描述库、句式的ANL语言描述库、词的ANL语言描述库。这些库都是以可擦写的ROM形式存储器实现的。可以是各种非易失性的半导体存储器,比如EPROM、EPROM、FLASH、FRAM等等。这里之所以以ROM称谓,是因为在系统工作时该存储器中的内容从不发生写操作,也即没有更新,所起到的作用是只读型存储器ROM的作用。只是在NLPU设置在工作模式“01”(外部写库)时,才通过外部接口来对这些存储器进行库内容的更新修改,甚至是经过若干时间的完善,该ANL语言描述库的存储器的内容以掩码ROM形式作为统一的应用标准。短期时间内不再作更改,而只是在使用过程中只对自然语言描述库中的内容进行不断地修改。由于该存储器是直接为NLPU直接提供ANL语言指令,而一个ANL指令中可以直接包括一个词或小短句,所以该ANL语言描述库的存储器的字长具有很长的数据宽度,对于汉语来说,除了能包括操作数2(16个汉字的词或短句外),还有指令码,操作数1(上下文目标和属性)还有判断条件的跳转地址等,总的数据宽度可能超过320Bit。这只是为了提高系统处理效率而考虑的,并不是为了增加字长而增加的,况且并不是越长越好,应该是以最佳的利用率为基准,对于不同的语言,数据宽度也会有一定的区别。这里NLPU的处理数据宽度比通常的CPU目前主要是64Bit的数据宽度,是一个比较明显的差别。
句子缓存器主要是存放NLPU在依据内部处理过程中的句子指针的值(序号形式)从框架缓存器中提取的句子,比如框架缓存中的一个句子是包括六个词“1/1(猫),1/2(爱),1/3(吃),1/4(鱼),1/5(吗),1/6(?)”,对于系统来说,句子指针总是指向每个句子的第一个词,像这里是“1/1”,那么NLPU可以根据该句子指针直接提取句子为“猫爱吃鱼吗?”,并将其写到句子缓存器。句子缓存器的输出则直接输出到通过硬件检索机连接的句子的自然语言描述库,和通过地址译码器连接的句子的ANL语言描述库,用于处理当在句子的自然语言描述库中匹配查找失败后,再直接进入到句子的ANL语言描述库中进行匹配查找的情况。
句式缓存器主要是存放NLPU在依据内部处理过程中的句子指针的值(序号形式)从框架缓存器中提取的句式,比如框架缓存中的一个句子是包括六个词“1/1(猫),1/2(爱),1/3(吃),1/4(鱼),1/5(吗),1/6(?)”,因句子指针总是指向句子的第一个词,这里的“1/1”,那么根据该句子指针可以直接提取句式为“名+动+动+名+吗+?”。句式缓存器的输出则直接输出到通过硬件检索机连接的句式的自然语言描述库,和句式的ANL语言描述库,用于处理当在句式的自然语言描述库中匹配查找失败后,再直接进入到句式的ANL语言描述库中进行匹配查找的情况。
词缓存器主要是存放NLPU在依据内部处理过程中的词指针的值(序号形式),从框架缓存器中提取的词,比如框架缓存中的一个句子是包括六个词“1/1(猫),1/2(爱),1/3(吃),1/4(鱼),1/5(吗),1/6(?)”,当前的词指针是指向句子的第3个词,这里是“1/3”,那么,根据该词指针可以直接提取词为“吃”。词缓存器的输出则直接输出到通过硬件检索机连接的词的自然语言描述库,和词的ANL语言描述库,用于处理当在词的自然语言描述库中匹配查找失败后,再直接进入到词的ANL语言描述库中进行匹配查找的情况。
文本输出接口该接口用于将人工智能机处理的中间结果以及最终结果以文字数据流的格式来向外输出,便于通过其它设备来观看运行状态和结果或是根据该输出直接驱动其他设备。
输入/输出设备扩展接口该接口用于人工智能机输入外部的传感信息,比如温度、日期、湿度等。另外,还要通过该接口完成对一些外部设备的驱动。
综合工作区缓存该工作区包括当前执行的扩展词指令的工作现场缓存区、悬挂工作区、生成句的工作区。当前执行的扩展词指令的工作现场缓存区(注意,当前处理的扩展词指令的寄存器,IF,CALL等的堆栈区域,并不在NLPU中,这是考虑悬挂操作需要保护现场的原因,因为在当前的扩展词指令悬挂操作完后,只要在移动一个工作区域地址长度就可以再做下一个当前扩展词指令的工作区域,因此前一个区域的现场自然就保护了,不需要为了保护现场而做太多的转写现场数据的操作,这样就直接提高运行效率,对于这一点,与常规的CPU的寄存器都是在CPU芯片之内是有很大的不同)与悬挂工作区,还有生成句的工作区共同存在同一个RAM缓存中的,所以该工作区称之为综合工作区缓存。当一个扩展词指令在处理过程中又产生了新的生成句,那么也需要保护当前的现场,当产生的生成句子处理完后,还要再接着原来使产生生成句的那个指令的下一个指令来执行,所以生成句的现场也需要保护和恢复,而这个过程同悬挂工作区的现场保护是一样的。
生成句工作区缓存该工作区专门保存那些生成的句子的内容,包括句子的名称、序号、生成句的属性名对应值的单元。因为大部分情况下,一个生成的句子执行完后,是要有一个结果输出在指定的属性名的对应值的单元,比如生成的句子是“鲸鱼是鱼吗?”,如果在知识库中匹配成功该标题句子并执行完后,该生成句子的“判断”属性就应该被赋值为“不是”,再比如,生成的句子是“英国首都是哪里?”,那么该生成句子的“地点”属性应该被赋值为“伦敦”。所以每一个生成句都有一个属性的工作区,以表明执行了生成句子后的结果。该生成句子的所在区域不会在系统执行当前这个外部输入文本的处理过程中消除,直到系统在处理下一个新的外部输入文本时,才会清除所有的生成句的工作区为止,这是由于生成的句子在处理过程中可能还会有“悬挂”的扩展词指令,必须为“悬挂”的那些扩展词指令在以后的输出属性操作时,找到指定的写属性的位置。所以在处理过程中不清除生成句的工作区。
生成句的地址译码器该译码器的功能是完成NLPU在输出的某一个生成句的序号(字符串)时,能够直接在生成句工作区缓存中定位到该生成句的开始地址,NLPU对生成句工作区缓存的访问也是属于基于符号的寻址。关于该译码器的编码设置也是随机进行的,其操作可参见框架缓存器的地址译码器的内容。
生成句属性地址产生器在“综合工作区缓存”中,已经讲述了每一个生成句都有一个固定的属性区,以便将生成句的执行结果输出到指定的属性名单元。该生成句地址产生器实际上就是一个加法器,将其序号经过地址译码器(生成句)译码后的生成句在生成句工作区缓存中的开始物理地址,与生成句属性名的编号的相对地址进行相加运算,相加结果就是该生成句属性名的绝对的物理地址。说明由于系统的生成句的属性名的编号是统一管理的,所以其编号的数据可以由直接地址总线直接指明,通过地址译码器(生成句)对生成句的序号译码后的在生成句工作区缓存中的开始物理地址,再加上属性编号的相对地址就可以在生成句工作区缓存中完成指定的生成句的属性的访问。
句子的地址译码器即地址译码器(句子),该译码器可以采用直接内容寻址存储器(CAM)来实现,但需确保其内容不能丢失,可以采用后备电池,或是直接采用非易失性存储器的CAM,或者是硬件检索机同非易失性RAM存储器来共同来实现,最好不是每次启动系统,都需要重新调取该译码器的内部数据。该句子的地址译码器直接将来自于句子缓冲器中的句子的字符串,译码成在句子的ANL语言描述库的存储器中映射该句子的开始的物理地址,该译码器的编码只是在NPLU工作在工作模式“01”(外部写库),当外部接口通过NLPU向ANL语言描述库中增加新的内容时,也即写入新增加的用ANL语言描述的句子的时候同时写入的,因为该地址译码器的编码写入,必须是与句子的ANL语言描述库建造同期来完成,才能保证二者的一一映射,地址译码器编码的操作是NLPU通过直接数据总线和读写控制来完成的。
句式的地址译码器即地址译码器(句式),结构和功能同句子的地址译码器类似,只不过该地址译码器是针对句式的字符串,完成在句式的ANL语言描述库存储器中映射句式的开始物理地址的译码。
词的地址译码器即地址译码器(此),其结构和功能同句子的地址译码器类似,只不过该译码器是针对词的字符串,完成在词的ANL语言描述库存储器中映射词的开始物理地址的译码。
ANL指针地址产生器结构和功能同生成句属性地址产生器类似,只不过完成将通过地址译码器(句子、句式、词)译码后的句子、句式、词的相应ANL语言描述中的中映射它们的字符串的开始物理地址,与NLPU的ANL行指针数据相加,得到它们在对应的ANL语言描述中的扩展词指令的ANL指令行的地址。当开始执行一个扩展词指令时,ANL行指针数据是零,此时ANL指针地址产生器完成相加的结果就是指定的句子、句式、词在ANL语言描述的知识库存储器的最开始的ANL指令行,也即第0行(BEGIN行),之后,NLPU随着ANL指令的不断执行,ANL行指针数据也会不断的改变,要么自动加一,要么跳转到ANL指令指定的行数据,这样,ANL指针地址产生器就会不断地产生当前描述的句子、句式、词的ANL描述的指令行在ANL描述库存储器中的实际的物理地址。从而完成对一个扩展词指令的相关的ANL语言描述体的执行。换句话说,地址译码器(句子、句式、词)输出的是扩展词指令的在ANL语言描述库的存储器的高位段地址,而ANL行指针数据线输出的是剩余的低位段地址,二者共同作用,完成了对一个扩展词指令的所有ANL语言描述体在ANL语言描述库映射的物理地址的生成。
符号地址总线直接以序号(字符串)作为地址来寻址,从而可以根据上下文的位置数据直接对框架缓存器进行信息的访问。
符号数据总线主要是完成NLPU与框架缓存器,以及还有其他的外围缓存器件的以符号串形式的数据的信息传递。
直接地址总线用于NLPU访问外围的直接以2进制数的数据为地址的直接地址寻址的器件,比如,以编号地址访问的在综合工作区缓存中的寄存器,以及对外围器件进行参数数据进行设置,比如,对地址译码器的编码写入等。
直接数据总线直接传送2进制数的数据,用于NLPU以直接数据的形式访问相关器件。
ANL指令数据总线该总线主要是完成直接从ANL语言描述库中读取ANL指令,每读一次ANL库的信息,该总线就加载了一条ANL指令,该数据宽度比较宽,对于汉语处理,该数据宽度将超过320Bit。另外,当NLPU被设置在工作模式“01”(写库模式)时,该总线也用于对ANL库进行添加内容时数据传递。
ANL指针数据线主要用于产生NLPU对ANL语言描述库进行访问时所需要的ANL指令行的相应的物理地址。
如图3所示,本发明的工作流程如下1.外部文本首先经过分词环节进行分词后,再通过文本输入接口送入文本缓存(双口RAM)中暂时存放。考虑目前的分词技术还不能达到百分之百的准确率,所以,这里加入一个人工校对的环节,以便于对少量的文本内容的分词结果进行校对2.文本缓存接受到了经过分词的文本后,NLPU就通过直接地址总线和直接数据总线将文本缓存中的内容,按句、词为单位逐个地写入到框架缓存器中。在每次对框架缓存器进行写入之前,都要将根据NLPU内部自动生成的序号和一一对应在框架缓存器的物理地址,来对地址译码器(框架缓存器)进行编码的写入操作,便于系统在工作时,可以根据序号(字符串)直接进行符号地址寻址。
NLPU在将文本缓存中的内容写向框架缓存器时,可以对当前的句子或词的位置自动产生相应的序号,比如文本中的第3个句子的第5个词的序号为“3/5”,当然还可以有嵌套的序号比如“1-2-4-8/5”等(这种嵌套序号的写入情况主要是在处理过程中完成的,而不是在开始时外部文本句子的写入过程中,因为外部文本句子是属于“根句”,它的序号只能是“x/x”,而不可能是“x-x-x/x”),NLPU是按照框架缓存器的排列格式,将句子、词写入到框架缓存器指定的地址单元中。
NLPU除了要完成按指定的格式向框架缓存器(RAM)写入文本缓存中的内容之外,还要对地址译码器(框架缓存器)进行编码设置操作。该地址译码器是采用CAM(直接内容寻址存储器),来完成译码的,每次从文本缓存向框架缓存器写入时,或是把处理过程中NLPU自动生成的句子写入到框架缓存器时,都要进行译码器的编码设置,以建立序号同存储器的物理地址的一一映射,比如“1-2-4-3-6/5”对应的地址码是“00022400H”,“3-4/6”对应的地址码是“00022800H”等等。这样在NLPU在进行按符号地址寻址时,就可以直接以硬件方式通过立即译码,能快速地访问指定的框架缓存器中的指定单元,而不是通过软件的比较耗时的程序查找过程。由于每次处理的外部输入文本内容不同,所以句、词结构的摆列也不相同,在处理一个外部输入文本时建立的编码,在处理下一个外部输入文本时就会毫无用处,所以,每次对新的外部输入文本进行处理时,都要同时建立新的编码操作,当然,在处理过程中的嵌套的句子的写入,是属于在现有的编码的补充,而不是对当前译码器中的编码的刷新重写。比如运行时某一个时刻的编码对应的个数是200个,后来因为有嵌套句子的原因,又在原来200个的基础上补充建立了300个,那么,此时对框架缓存器中序号进行符号地址译码的个数就是500个。
3.当外部输入文本以框架缓存器的指定格式写入框架缓存器后,NLPU内部自动初始化的句子指针的值为“1/1”,也即指向第一句的第一个词。然后根据该句子指针从框架缓存器中,提取一个句子。句子提取器的工作是通过NLPU内部的当前的句子指针来完成的,比如,当前的句子指针是“1/1”,句子提取器则依次根据凡是“1/”前缀的后面只是数字的情况进行提取,比如符合当前的前缀“1/”的只有“1/2”,“1/3”,“1/4”,“1/5”这样五个对象,那么此时提取的句子就是分别由这五个词构成的,提取的句子为“A01 A02 A03A04。”,而这是根据对应情况“A01(1/1)”,“A02(1/2)”,“A03(1/3)”“A04(1/4)”,“。(1/5)”而提取的。
4.对于提取的句子,首先通过硬件检索机进入自然语言描述的知识库中的“句子的自然语言描述库”中进行标题句子匹配,如果匹配成功,那么该标题句子对应的体部的句子又会再写向文本缓存(双口RAM)中,NLPU接着再把该文本缓存中的内容写向框架缓存器,该过程与步骤2类似,只不过是又对地址译码器(框架缓存器)和框架缓存器(RAM)写入了新的内容。然后,NLPU的句指针值就指向当前句子的嵌套的子句的第一个句子的位置,比如“1-1/1”。这里,关于自然语言描述的知识库中的内容都是属于系统工作之前预先输入的内容,硬盘与硬件检索机配合完成的译码地址都是事先建立好的,而不是在系统运行过程中建立的。与此类似的还有“句式的自然语言描述库”和“词的自然语言描述库”。
5.如果提取的句子与句子的自然语言描述库匹配不成功,那么直接通过地址译码器(句子)进入ANL语言描述库的“句子的ANL语言描述库”中进行匹配查找。这里的地址译码器(句子)也可以用非易失性直接寻址存储器(CAM)来担当,也可以用硬件检索机同非易失性的半导体存储器来共同完成译码工作。该地址译码器(句子)与地址译码器(框架缓存器)的区别该译码器的编码都是事先完成的,并不需要在运行过程中进行编码操作。因为如果句子的ANL语言描述库中存在对当前的句子ANL语言的描述的话,该描述在该库中的起始地址几乎是固定的,并不是像地址译码器(框架缓存器)随着运行不同的外部输入文本,译码地址也随着发生改变。因为即使是向句子的ANL语言描述库中增加新的句子,也是接着原有使用空间在剩余的空间上的增加;或者是对库中内容进行修改,那也是对地址译码器(句子)的编码一同进行修改,尽管如此,这些操作也都是在建库时进行的,而不是在系统运行时进行的。
与此类似,还有地址译码器(句式),地址译码器(词)。这些译码器的内部编码都是事先设置的,运行中只使用即可,除非是NLPU设置在工作模式“01”(外部写库)来进行建库操作。
6.如果在句子的ANL语言描述库中匹配成功,就直接运行用ANL语言描述的对当前句子的解释的描述体。同步骤8的执行词的ANL语言指令过程一样,可参见步骤8。只不过在执行完ANL语言描述的句子后,NLPU中的句子指针的值是被写入由句子指针产生器自动生成的下一个句子的指针,比如当前句子指针是“1-2/1”,那么下一个句子指针则是“1-3/1”;而在执行ANL语言描述的词后,如果当前词不是句子的最后一个词,那么,词指针的值是被写入由词指针产生器自动生成的当前句子的下一个词指针,比如当前词指针是“1-2/1”,那么,下一个词指针是“1-2/2”。而且,如果执行完的当前词是当前句子的最后词,那么还要执行句式处理。
7.如果在句子的ANL语言描述库中匹配失败,就要按逐个词的方式来执行当前的句子。首先根据当前的词指针直接从框架缓存器中提取出当前序号对应的词,比如当前的词指针(序号)为“1/3”,那么直接从框架缓存器中提取到“A03”,然后送到词缓存器中暂存。
8.将当前提取的词名称直接通过硬件检索机到词的自然语言描述库中进行匹配,如果匹配成功,那么该词属于高级词汇,直接将知识库该词对应标题的体部中的句子写入到文本缓存中(双口RAM),然后再将文本缓存中的内容写到框架缓存器中,这个过程同前面讲述的步骤2类似,只不过这里的知识库的体部中的句子,是属于嵌套的形式,比如序号都是(x-x/1…….)之类的。之后句子指针的值是被写入由句子指针产生器自动生成的当前句子的子句指针(比如1/1W-1/1),词指针也是被写入该子句的第一个词的序号(比如1/1W-1/1),这里的大写“W”,是表示当前序号的句子是由词的自然语言描述库中的标题词所引起的嵌套句子(也即由自然语言的句子来对当前词进行解释)。如果当前词在词的自然语言描述库中匹配失败,那么直接通过地址译码器(词)进入词的ANL语言描述库中进行匹配,如果此时还继续匹配失败,说明该词在人工智能机的整个库中都没有相关描述,提示“当前库中没有建立当前词,不能继续执行!”。此时,不论是在自然语言的描述库还是ANL语言的描述库中,必须通过建立该词的对应的描述,系统才能工作。对于未知的词,系统需要通过“推理”来分析处理的情况,不在本文讲述之内。
9.如果该词在词的ANL语言描述库中匹配成功,那么地址译码器(词)就输出词的ANL描述库中的对应该词的ANL描述体的开始物理地址;然后,通过ANL行指针数据线直接输出该描述体的ANL指令行指针数据,通常情况下,在开始执行扩展词指令时,NLPU是将ANL指令行指针的数据输出为零,以便于从第一行开始执行,对于执行“悬挂”和使产生生成句的扩展词指令的开始指令行指针为ANL指令所指定的ANL指令行,不一定都是从第一行开始执行。
10.ANL指针地址产生器把地址译码器(词)输出的该词在“词的ANL语言描述库”的开始物理地址,和ANL指针数据线指定的ANL指令所在行的数据共同相加得到的结果,作为NLPU当前的读取ANL语言描述库的绝对物理地址,通过读操作读取该行的ANL指令,并由NLPU进行译码并执行该指令,此时词的ANL语言描述库的库选端设置为有效,以选中词的ANL语言描述库。与此类似,对于读句子ANL语言描述库,或是读句式ANL语言描述库时,都是对应的库选端设置有效,以后不再说明。
11.NLPU在执行ANL语言指令时,主要是完成对框架缓存器(RAM)进行各种访问操作,此外,也包括对其他的所有的可能的操作,比如产生悬挂、生成句、通过输出文本接口输出文本、通过设备I/O口输入传感信息或是控制设备操作等。因为执行指令的内容不同,运行的操作自然地也就不一样。
12.NLPU在每执行完一条ANL指令之后,通常情况,NLPU内部的ANL行指针产生器自动地“加1”,产生下一个ANL指令所在行的数值,并由ANL行指针缓冲器送到ANL行指针数据线上,ANL指针地址产生器再把ANL行指针数据线上的数据与地址译码器(词)中的输出的最开始地址进行相加,得到下一行的ANL指令所在行的词的ANL语言描述库的绝对物理地址,然后再接着读取该行的指令内容并执行,当执行完后,ANL指针产生器再自动地“加1”,ANL指针地址产生器再产生下一行的指令的绝对物理地址,然后NLPU再读取下一条指令并执行,直至执行完“END”指令,就完成了当前扩展词指令的ANL描述体的执行,参见图18。然后,在这个词ANL语言描述体执行后,紧接着执行悬挂工作区缓存中的内容(该操作参见综合工作区缓存的工作情况的描述)。当所有悬挂工作区缓存中的内容执行完之后,词指针产生器又会产生下一个词的序号,比如当前执行完的词的序号为“1/4”,那么下一个词的序号则是“1/5”;系统就是这样通过逐个词的ANL语言描述体的执行完成一个句子的执行。
一般情况下,ANL行指针产生器的自动“加1“操作都是不断进行的,但是若是执行了“CALL调用、GOTO跳转、IF比较判断后跳转”等指令,则直接将跳转的行号数写入ANL指针缓冲器中,以便于跳转到指定的指令行位置开始执行。
13.当如步骤12那样执行完一个扩展词指令的所有ANL语言描述体及悬挂工作区缓存的所有内容后,NLPU的词指针产生器自动产生下一个词的序号并写入到词指针中,然后,再依次地执行后面的词的类似操作,直到当词指针生成器新生成的词指针在通过框架缓存器进行词的提取时,结果不存在,即表示该词指针产生器的前一个值(序号)是当前的句子指针指向的句子的最后一个词,此时,该句子按照逐个词的方式执行句子过程已经结束,需要进入到该句子的句式的处理过程。
14.NLPU中的句式提取器根据当前的句子指针在框架缓存器中提取句式,这个过程主要是通过该句中的词的词性来完成的,如果该句子的所有词在按逐个词执行扩展词指令结束后,每个词都有确定的词性,那么生成的句式是这些词性的排列,比如“名+动+形容+名+。”(标点也算在内),如果有的没有词性,那么以名称来代替,比如“在+名+介+有+名+。”。
15.当按照词的词性生成句式后,将该生成的句式首先在句式的自然语言描述库中匹配查找,如果成功,直接把在句式的自然语言描述库中的与该标题句式对应的体部中的句子写入到文本缓存中,然后NLPU再将文本缓存中的内容写到框架缓存器中,该过程类似于“工作原理----步骤2”,然后句子指针值被刷新,其值对应句子指针产生器指向的该句式的自然语言描述库中体部的第一个句子,也即子句的第一个词,比如“1-2/1F-1/1”,这里的大写“F”表明该子句是由句式的自然语言描述库中的体部句子引起的嵌套句子。然后,再按句子的执行步骤来执行句式的自然语言描述库中的这些标题句式对应的体部的句子,关于执行一个句子的过程,这在前面已经做过讲述,这里不再重复。
16.如果在句式的自然语言描述库中匹配失败,直接通过地址译码器(句式)在句式的ANL语言描述库中进行匹配,如果匹配成功,那么通过ANL指针地址产生器将从地址译码器(句式)得到该句式的在句式的ANL语言描述库中的最开始的物理地址,与ANL行指针数据线上的数据相加得到该句式的ANL的相关指令所在行的绝对物理地址,读取ANL语言指令并执行,直至到整个句式的ANL语言描述体都执行完毕。该过程类似于词的ANL描述体的执行,可参照步骤12所讲述的过程。
17.当句式的ANL描述体全部执行完后,NLPU的句子指针产生器自动产生下一个句子的指针(序号),分两种情况一种是根句,比如当前的句子指针的值是“2/1”(第二个句子),那么下一个句子的指针的值就是“3/1”(第三个句子);直接进入下一个根句子的执行,以上步骤就是一个句子的执行过程;另一种是子句,比如是子句“2-3-4/1”,那么生成的句子指针是“2-3-5/1”;还有一种生成句的子句情况,比如是子句“3-3/3W-2/1”,生成的句子指针“3-3/3W-3/1”,直接进入子句的执行。一个句子执行的过程参见步骤3—步骤16。
如果该句式在句式的ANL描述库中匹配失败,则自动产生下一个句子指针,进入下一个句子的执行,不再有句式执行的过程。
18.当按照以上讲述的步骤,通过NLPU的句子指针生成器自动地产生下一个句子的指针来完成逐个句子的执行过程,就可以来完成一个外部输入文本的所有句子的或是知识库某一个体部中的自然语言描述的句子的执行,以上未考虑产生悬挂的处理情况,实际运行中每次执行一个句子、词、句式之后,都有一个执行悬挂工作区的过程,如图20所示。如果当NLPU中的句子提取器按照句子指针产生器的句子指针来从框架缓存器中提取的结果不存在时,表明要么是当前的外部输入文本的所有句子都执行完毕,如果通过判断当前新生成的不存在,且句子指针之前的句子指针是外部输入文本的最后一个句子(句子指针是根句,该指针的值必须是“x/x”)的序号时,比如当前输入文本句子总共有五个句子,最后的句子指针是“5/1”,根据该指针再生成的句子指针“6/1”是不存在的,那么此时人工智能机对整个外部输入文本的处理就全部结束了。
如果当前的句子指针生成器生成的句子指针不存在,而且又不是根句的序号“x/x”,那么一定是由根句生成的其它的子句的序号,如前面“工作原理---步骤17”举的例子,那么句子指针生成器,会根据当前的子句指针进入到引起该子句的父句的下一个句子指针,也有可能是词指针。比如当前句子指针“2-3-6/1”,而且该句子在框架缓存器中不存在,那么生成的下一个句子指针是“2-4/1”;若当前句子指针是“3-3/3W-2/1”,那么直接进入到句子指针“3-3/1”,词指针“3-3/4”,这是一个由词引导的子句的情况。整个系统的运行,就是这样通过子句的序号,逐渐逐层地进入父句的下一个句子的句子指针和词指针的位置,再继续地执行句子,直至到根据外部输入文本的根句的最后一个句子指针所生成句指针不存在,那么整个外部输入文本的句子至此执行完毕。之后,可以通过输入新的外部输入文本,来执行下一次的对外部输入文本的处理。
当系统在执行某个扩展词指令的ANL指令时,可能会生成新的句子,引起嵌套句子的执行,由此产生生成句处理的工作过程如下1.NLPU首先将处理过程中由MAKE_KNOWS类指令生成的句子的内容送入句子缓存器,然后,通过与句子的自然语言描述库中的标题句子进行匹配,如果匹配成功,直接将知识库中该标题句子对应的体部的句子写入到文本缓存中,然后再由NLPU把文本缓存中的内容以句、词为单位按照框架缓存器的排列格式写入到框架缓存器中,当然,也还包括写入到地址译码器(框架缓存器)中新增加的编码。然后,NLPU直接进入该标题句子所在的第一个子句的指针,开始执行该标题句的体部中所有的子句,关于对于句子的处理在前面的工作原理已经讲述了,这里不再赘述。当执行完所有的由该生成句所引起的子句后,再回到使产生该生成句的那个扩展词指令的ANL指令行的下一行指令继续接着执行。说明一点,在执行ANL描述的句子的过程中生成的句子的序号是以“s”标志,比如“1-2/1s-1/1;在执行ANL描述的词的过程中生成的句子的序号是以“w”标志,比如“1-2/1w-1/1;在执行ANL描述的句式的过程中生成的句子序号是以“f”标志,比如“1-2/1f-1/1。另外,对于不是生成句的嵌套句子标志顺便提一下,在自然语言描述的词的执行过程中嵌套句子的子句序号以“W”,比如“1-2/1W-1/1;在自然语言描述的句式的执行过程嵌套的句子的子句的序号以“F”,比如“1-2/1F-1/1;而对于在自然语言描述的句子的执行过程嵌套句子的子句序号则不加标志,比如“1-2-3-4/1”。
2.如果在自然语言的描述库中匹配失败,就要到句子的ANL语言描述库中进行匹配,如果匹配成功,那么就执行句子的ANL语言描述库中的对该标题句子的ANL描述体。当执行完所有的由ANL语言描述的该句子后,再回到使产生该生成句的那个扩展词指令的ANL指令行的下一行指令继续接着执行。
3.如果该标题句子在句子的自然语言描述库和句子的ANL语言描述库中都匹配失败,那么,系统则产生“必须对生成的句子进行建库后,才能执行生成句!”的提示,此时首先需要针对该句子进行建库,然后再执行。这与非生成句子的处理过程的根本区别就是不再执行按逐个词的执行过程。
4.当执行生成句的知识库中该标题对应的体部中的句子(子句)时,当有向外输出结果指令OUTPUT或OUTPUTR时,该指令会根据句子的标号进行判定,如果是执行中新生成的句子,那么,输出的结果就会直接输出到新生成句子所在的属性名指定单元。具体操作NLPU内部首先在符号地址总线输出该生成句的序号,经过地址译码器(生成句)译码成当前生成句序号对应的物理地址,再由生成句属性地址产生器把该直接物理地址同由直接地址总线送出的属性名编号的相对地址两者相加,就得到了该生成句的属性名的值对应的单元在生成句工作区缓存中的绝对地址。NLPU再向这个绝对地址写入属性名对应的值,也就完成了生成句属性名的值的写入过程。该生成句属性名的值,主要用于使产生生成句的那个指令行以后的指令可以读出该生成句属性名的值,这是通过READ_RESUIT指令完成的,具体过程是OUTPUT类指令的逆过程,大部分的地址译码过程都是一样的,只不过一个是读结果,一个是写结果操作而已。
生成句子的序号分别由执行不同的扩展词指令时生成的,由于对于同一个扩展词指令在执行ANL语言描述体时,会在不同的指令行号上执行生成句指令,为了避免造成错乱,还要加上行号,比如“1-2/6s*5”中,“*5”表明是执行第5行的生成指令(MAKE_KNOW类指令)所生成的生成句子。对于生成句出现嵌套时,对生成句工作区缓存的操作,则总是在离当前的扩展词指令序号最近的那个生成句的序号进行操作,比如一个生成句的子句的序号是“1-2/3w*5-1/3w*8-2-3/1”的扩展词指令的OUTPUT类指令操作总是会向序号是“1-2/3w*5-1/3w*8”的生成句的属性名单元进行写入结果操作,而不会是向序号是“1-2/3w*5”的生成句的属性名单元来写入。当然READ_RESUIT指令地执行也类似。对于如果执行相同一行的ANL指令中的生成句指令(MAKE_KNOW类指令)产生了循环操作,比如总是多次执行该行该指令,那么还要在生成句的序号上再加入“#x”,以表明是第几次循环,比如“1-2/3w*5#2”,就是表明是该指令已经循环了2次,这样的序号用以在各自的执行中都不会造成混乱。这样的处理尤其用在每次循环寄存器中的内容不同时,生成句子的内容也不同的情况的指令“MAKE_KNOWR”。对于READ_RESUIT指令由于本身无法指定是在同一个ANL语言描述体的哪一行的MAKE_KNOW类指令生成的句子,所以,总是通过每个扩展词指令寄存器区中的生成句序号缓冲器中最新的序号来指定。该生成句序号缓冲器在每执行一次MAKE_KNOW类指令时,都会刷新内容,所以READ_RESUIT指令读取的内容生成句的序号总是最后一次通过MAKE_KNOW类指令更新的序号。
在综合工作区缓存中,包含了正在执行的当前扩展词指令的工作区、悬挂的扩展词指令的工作区、产生生成句的扩展词指令工作区以及被清除的悬挂工作区(空白区)。NLPU对综合工作区缓存的访问过程如下
关于综合工作区缓存的工作情况还是通过举例的方式来说明。
比如人工智能机刚开始启动时执行一个句子“A01 A02 A03 A04 A05 A06,”参见图8。
1.刚启动时,整个系统的所有的指针都是设置为初始值,大部分都是零。参见图8中的当前扩展词指令工作区位置指针=000000H,指向综合工作区缓存的最开始的地址,这里假设每个扩展词指令所使用的工作区占用00H-FFH(256个地址单元),包括扩展词指令自身的IF堆栈、CALL堆栈、PUSH堆栈、自定义寄存器区和通用寄存器工作区(包括一个重要的生成句序号缓冲器)等,关于每一个扩展词指令所使用的工作区的内部分布情况,参见图中的描述。扩展词指令地址堆栈指针(产生悬挂)=0000H,扩展词指令地址堆栈指针(产生生成句)=0000H;2.执行第一个词“A01”,见图9。该扩展词指令“A01”使用的当前的扩展词指令工作区是(00-FFH)。也即当前扩展词指令工作区位置指针的值=000000H。由于执行“A01”时既没有产生“悬挂”,也没有产生新的生成句子,所以所有的指针的值都还是初值。只不过是当前扩展词指令工作区位置指针(000000H)开始的(00-FFH)单元的内容可能被执行“A01”时使用过。
3.执行第二个词“A02”,见图10。由于当前扩展词指令工作区位置指针仍然还是“000000H”,所以执行“A02”所使用的当前的扩展的词指令的工作区还是在(000000H)开始的(00-FFH)区域。只不过此时执行的扩展词指令是“A02”,而不是刚才的“A01”。
4.执行第三个词“A03”,见图11,假设该扩展词指令在执行过程中产生了“悬挂”。那么尽管当前在执行“A03”时使用的当前的扩展词指令的工作区还是在(000000H)开始的(00-FFH)区域。但是,当执行完该扩展词指令,该工作区即被“悬挂”并暂时退出当前扩展词指令的执行,下一个扩展词指令的工作区就是不能再使用该工作区了,也即“A03”的工作区现场被保护起来了。此时当前扩展词指令工作区位置指针则通过加一个扩展词指令区的空间长度(00-FFH)指向了下一个工作区,也就是“000100H”开始的(00H-FFH)的空间,而当前扩展词指令工作区位置指针的值也由原来的(000000H)改变为(000100H);另外,悬挂的扩展词指令的工作区的堆栈指针的当前指针(0000)指向的单元也保存了“A03”在综合工作区缓存中的地址(000000H),同时,该指针“加1”后(0001H)指向了在综合工作区缓存中,可能保存产生下一个“悬挂”的扩展词指令地址的单元的地址,参见图中的各值。
5.执行第四个词“A04”,见图12,假设该扩展词指令在执行过程中产生了“悬挂”。那么在执行“A04”时使用的当前的扩展词指令的工作区是在(000100H)开始的(00-FFH)区域。当执行完该扩展词指令,该工作区即被“悬挂”,下一个扩展词指令的工作区则不能再使用该工作区,“A04”的工作区现场被保护起来了。此时当前扩展词指令工作区位置指针则通过加一个扩展词指令工作区的空间长度(00-FFH)指向了下一个工作区的开始地址,现在是“000200H”开始的(00H-FFH)的空间。当前扩展词指令工作区位置指针的值由原来的(000100H)改变为(000200H);另外悬挂的扩展词指令的工作区的堆栈指针当前指针(0001)指向的单元保存了“A04”在综合工作区缓存中的地址(000100H),同时,指针加1后(0002H)指向了在综合工作区缓存中,可能保存产生下一个“悬挂”的扩展词指令地址的单元的地址,参见图中的各个值。
6.执行第五个词“A05”,见图13,假设该扩展词指令在执行过程中产生了生成句子。那么,在执行“A05”时,所使用的当前的扩展词指令的工作区是在(000200H)开始的(00-FFH)区域。当执行完该扩展词指令,该工作区虽然没有被“悬挂”但也属于保护区,以便于当生成的句子执行完之后,还要恢复当前的现场,来接着执行使产生生成句子的那个ANL指令行的下一行指令。此时下一个扩展词指令的工作区不能再使用该工作区,“A05”的工作区现场被保护起来了。此时当前扩展词指令工作区位置指针则通过加一个扩展词指令工作区的空间长度(00-FFH)指向了下一个工作区,现在则是“000300H”开始的(00H-FFH)的空间。当前扩展词指令工作区位置指针的值由原来的(000200H)改变为(000300H);另外由于没有产生“悬挂”,所以,悬挂的扩展词指令的工作区的堆栈指针的当前指针保持不变。这里假设执行生成句的过程都没有产生“悬挂”,或是再次地在执行过程中生成新的生成句这样复杂的嵌套过程,参见图中的各个值。
7.执行第五个词“A05”生成的句子“AA01 AA02 AA03,”,见图14,假设该句子是属于句子的ANL语言描述库中匹配成功的标题句子(此处属于扩展词指令为句子的情况),并假设在执行过程中既没有产生“悬挂”,也没有产生生成句这样复杂嵌套的情况,那么,当前在执行“AA01 AA02 AA03,”时所使用的当前的扩展词指令的工作区则还是在(000300H)开始的(00-FFH)区域。由于在执行该ANL描述句子过程中既没有产生“悬挂”,也没有产生生成句,所以悬挂的扩展词指令的工作区的堆栈指针的当前指针仍然保持不变,参见图中的各个值。
8.执行生成的句子“AA01 AA02 AA03,”被执行完后,还要接着执行“A05”在使产生生成句的那行ANL指令的下一行及以后的指令,直到“A05”扩展词指令全部执行完,此时需要把“当前的扩展词指令的工作区位置指针”的值保存到“当前的扩展词指令的工作区位置指针保护缓存”中,然后将扩展词指令地址堆栈指针(产生生成句)所指的值写入到当前的扩展词指令的工作区位置指针中,并且在执行后,还要把“当前的扩展词指令的工作区位置指针保护缓存”的值在恢复到当前扩展词指令工作区位置指针中。见图15,并假设在执行过程中既没有产生“悬挂”,也没有产生生成句,所以悬挂的扩展词指令的工作区的堆栈指针的当前指针还是保持不变,参见图中的各个值。
9.执行第六个词“A06”,见图16,假设在执行该扩展词指令过程中产生了某个信息,该信息使“A03”的判断指令执行的判断信息为已知,并再在随后的执行悬挂工作区内容时,使“A03”的“悬挂”从综合工作区中消除。当前在执行“A06”时,所使用的当前的扩展词指令的工作区是在(000200H)开始的(00-FFH)区域,当执行完该扩展词指令后,“A3”的“悬挂”从堆栈中的地址被消除了,但是,此时当前扩展词指令工作区位置指针则仍然还是现在的“000300H”开始的(00H-FFH)的空间。而不是移动到“悬挂”消除的那个工作区的开始地址,此时的“A03”工作区虽然是属于存储区“碎片”,但却不对综合工作区的从“悬挂”到消除的存储区“碎片”作处理,之所以这样做,主要是考虑系统处理速度。另外,由于在处理过程中也没有产生生成句,所以产生生成句的扩展词指令的工作区的堆栈指针当前指针保持不变。参见图中的各个值。
10.执行第七个词“。”,见图17,该扩展词指令“。”所使用的当前的扩展词指令工作区则是从当前扩展词指令工作区位置指针的值=000300H开始的(00-FFH)区域。由于执行“。”时既没有产生“悬挂”,也没有产生新的生成句子,所以所有的指针的值都还是初值,只不过当前扩展词指令工作区位置指针(000300H)开始的(00-FFH)单元的内容可能被执行“。”时使用过。
综合工作区缓存就是如上这样的处理扩展词指令执行过程中各种情况产生悬挂工作区,清除悬挂工作区,保护使产生生成句的那个扩展词指令工作区的工作现场。特别是,人工智能机在工作过程中,所执行的当前的扩展词指令的工作区,总是在不断地“浮动”,随着扩展词指令的在产生“悬挂”或是产生生成句时向后移动,当前扩展词指令工作区指针总是向后移动,除非是再接着执行产生生成句那个ANL指令的下一行及以后指令,才重新返回使产生生成句的那个扩展词指令的工作区,当执行完后,还是要回到综合工作区最后的那个指定当前扩展词指令工作区指针。当前扩展词指令工作区指针每从一个工作区移动到下一个工作区的位置,就硬件的保护了“悬挂”的扩展词指令的工作现场,和产生生成句的扩展词指令的工作现场。
下面介绍本发明中中央处理单元NLPU的内部结构,如图2所示,其包括1.ANL指令数据的缓存器NLPU工作时,必须通过ANL数据总线从外部的ANL语言描述库读取ANL语言指令数据到对应的缓存器中。因为指令数据包括指令码、指令操作数1、指令运算符、指令操作符2、判断条件为“真”跳转地址以及判断条件为“假”的跳转地址。那么自然地对应的指令数据缓冲器就包括指令码缓冲器、操作数1缓冲器,运算符缓冲器、操作数2缓冲器、判断条件为“真”缓冲器以及判断条件为“假”缓冲器。在这里,由于指令操作数2可以直接支持词或是短句的数据宽度,所以,对于汉语而言,仅操作数2的数据几乎就是大约占用256Bit的数据宽度,所以操作数2缓冲器的数据宽度就可能超过256Bit。
2.指令译码器对通过ANL指令总线送到指令码缓冲器中的指令码进行译码,并直接控制整个NLPU的所有与ANL指令执行过程相关的工作部件,也是NLPU中一个非常重要的部件。
3.时序控制单元以外部的时钟脉冲为驱动,为指令译码器的操作和其它的在操作过程中需要时序的控制部件提供操作时序。时钟脉冲的主频取决于外部时钟振荡器的频率,也同时取决于NLPU本身芯片的最高工作频率(最高频率取决于芯片复杂程度和芯片加工工艺水平)。
4.算术运算器主要完成算术运算操作,包括加、减、乘、除,以及与、或、非等的逻辑基本运算。由于NLPU处理的数据都是以符号形式来表示的,所以,进行算术运算时,需要将符号变换为数值后再进行运算,运算后的结果还要再转换为符号,以供NLPU在整个过程中的大多数的符号运算。算术运算器在这里的任务是属于辅助性的,而字符运算器则是担当自然语言处理的主要任务,所以对于要求高速复杂的数值运算的处理情况,传统的面向数值处理的CPU还是最佳的选择。
5.字符运算器用来完成字符运算的各种操作,包括比较字符串判断,字符串的加操作(合并字符串)、提取指定个数的字符串、清除字符串某一端的指定个数的字符、计算字符串长度等等。
6.运算操作数寄存器1用于暂时存放进行数值或是符号运算的第一个运算操作数。
7.运算操作数寄存器2用于暂时存放进行数值或是符号运算的第二个运算操作数。
8.结果寄存器用于暂时存放进行数值或是符号运算的结果,以及暂存其他的在处理过程中的信息,比如将操作数2缓存器的数据送到符号数据总线缓冲器,则要通过结果寄存器中转。
9.字符-数值变换器1在进行算术运算时,对存放在运算操作数寄存器1中的字符型数据转换为数值型的数据,以便于在算术运算器进行运算。
10.字符-数值变换器2在进行算术运算时,对存放在运算操作数寄存器2中的字符型数据转换为数值型的数据,以便于在算术运算器进行运算。
11.数值-字符变换器用于在进行算术运算时,对运算后的数值型数据再转换为字符型的数据,以便于在整个NLPU中的符号型的数据传递。
12.行号编解码器用于对产生“悬挂”或者是产生生成句的扩展词指令所保护的现场进行恢复时,对保护的扩展词指令的指针(序号)还有执行的所在行的符号型的数据解码为数值型的数据后,加载到ANL指令行指针产生器中,比如保护的现场为“1-2-3/3w*8”,那么可以解码当时产生生成句的指令行指针是第“8”行;反之,在进行现场保护时,能够把当前的ANL指令行指针数据同当前的扩展词指令的指针(序号)相结合,产生相应的编码数据来进行保存。
13.多路选择器1该多路选择器受指令译码器控制,对于送到NLPU的字符型数据线上的数据,要么是选择将算术运算器的结果,要么是选择字符运算器的结果。
14.句子指针产生器主要是根据当前句的指针值,计算下一个句子指针的值,共有两种情况第一,当通过NLPU把文本缓存中的内容写向框架缓存器中时,自动产生下一句的句子指针,比如当前指针值是“2-3/1”,那么产生的下一个句子的指针的值是“2-4/1”;或是新生成的子句的指针的值,比如当前父句的指针是“2-3/1”,那么产生的子句的指针是“2-3-1/1”;甚至是根据当前运行句子的指针,执行扩展词指令(可以是ANL语言描述的句子、词、句式)时执行“MAKE_KNOW”类指令时产生的生成句的指针值,比如“1/2w-1/1”、“1-2-3/1f-1/1”、“3-3/1s-1/1”及其生成句在句子的自然语言描述库中对应的体部的子句的指针值(序号),比如“1/2w-1-1/1”、“1-2-3/1f-1-1/1”、“3-3/1s-1-1/1”等。第二,当NLPU只是单纯地执行框架缓存器中的内容时,并且,当前句子指针的句子在执行过程中既没有进入下一个子句,也没有产生新的生成句。此时句子指针产生器的工作过程是这样的当新产生的指针值再通过符号地址总线由地址译码器(框架缓存)进行译码时,如果在地址译码器(框架缓存)的存在端输出“0”(不存在)信号时,则逐级地退回到父句下一个句子指针的指针值。比如,当前的指针是“1/2s-1-5/1”,若是新产生的句子指针是“1/2s-1-6/1”这个指针值在译码器(框架缓存)进行译码时输出的结果为“0”(不存在),那么,此时依据当前的指针值退回到父句指针的下一个句的位置“1/2s-2/1”;对于由词意到的子句,则要退回到由扩展词指令(词)执行时产生生成句那个词所在的父句的指针值,比如句子指针产生器产生了一个由词引导的生成句指针“1/2w-4/1”,在译码器(框架缓存)进行译码时输出的结果为“0”(不存在),那么就退回到父句的指针值“1/1”。
15.句子指针缓存器该缓存器直接存放由句子指针产生器生成的有效的句子指针值,主要用于在执行悬挂流程的过程中产生生成句时,需要暂时地保存当前的句子指针产生器中的内容,当执行完悬挂的生成句内容,并返回到主流程时,再将该句子指针缓存器的值重新赋值给句子指针产生器。
16.词指针产生器主要作用是根据当前的词指针的值,直接产生下一个词的指针的值,比如,当前的词指针是“2-4-5/1”,那么下一个词指针的值就是“2-4-5/2”,每执行一个扩展词指令(句子)时,该词指针的初始值都是由句子指针产生器赋值的。
17.词指针缓存器该缓存器直接存放由词指针产生器所生成的有效的词指针值,主要用于在执行悬挂流程的过程中产生生成句执行时,需要暂时地保存当前的词指针产生器中的内容,当执行完悬挂的生成句内容,并返回到主流程时,再将该词指针缓存器的值重新赋值给词指针产生器。
18.目标译码器专门用于对需要访问框架缓存器的那些ANL指令码中的“操作数1”进行译码,根据上下文访问的句位置、词位置,以及属性的所合成的内容产生符号地址总线的地址值。比如“该句.下一句.最前词.大小”,假设当前的词指针是“1-3-4/4”,那么译码后的符号地址总线的值则是“1-3-5/1.大小”。对于“最后词”和“最后句”的访问,译码要访问地址译码器(框架缓存器)多次,以便确认到最终的值,这需要花费很多个时钟周期来完成译码任务。目标译码器内部有一个临时指针产生器,用来产生译码过程中所需要的一些的中间临时值。该内部还有一个主指针用于获取当前的词指令的词指针,可能来自于主执行流程的词指针,也可能是悬挂执行流程中的词指针。译码器中的浮动指针主要用于执行上下文访问,每次开始执行一个主执行流程的扩展词指令时,都以主指针的值刷新浮动指针的值。目标译码器的译码结果直接送到符号地址总线缓存器中,通过符号地址总线输出符号地址的值。在进入悬挂或是产生生成句的时候,主指针和浮动指针都会被保护。
19.主指针是目标译码器中的一个缓存单元,专门保存当前所处理的扩展词指令的序号,在每个扩展词指令的整个处理过程中一直保持不变,除非是产生悬挂和生成句的情况,暂时被新的主指针代替,但是在执行完后,还要再返回原来的值。
20.浮动指针是目标译码器中的一个缓存单元,是动态地保存当前所处理的扩展词指令的一切其他的以主指针为基础的序号,在扩展词指令的整个处理过程中随时都会发生变化,以便完成以当前的扩展词指令的主指针为基础,在框架缓存器的中的所有各处的访问,也即可以完成上下文的处理。最开始执行扩展词指令时,该指针是被主指针赋值,除非是在执行中产生悬挂或是产生生成句;并且在执行过程中也可以通过执行指令“GOBACK”再重新回到主指针的位置,可以再重新进行别的位置的访问。
21.直接地址总线缓存器主要用于对于是寄存器寻址的操作,直接输出指定寄存器编号的直接地址,也包括其他的需要直接地址驱动的操作。NLPU所使用的寄存器是由外部的综合工作区缓存的RAM存储器提供的,这主要是为了考虑,自然语言处理过程的扩展词指令的执行在悬挂时要保存当时的扩展词指令的现场,每一个扩展词指令都有一个现场,主要是依据是否悬挂而保护现场的,所以,每个扩展词指令的相关的寄存器在保存时,只要不使用那个扩展词指令的悬挂区域,就达到保护的目的,再重新申请别的区域,则就是新的扩展词指令的新的寄存器区。也用于对地址译码器(框架缓存器,生成句等)的编码写入,在把文本缓存(双口RAM)的数据写入到框架缓存器过程中,也用于传输输出文本缓存(双口RAM)的地址数据。
22.直接数据总线缓存器用于暂时存放NLPU以直接数据(非字符型数据)向外部进行传输的数据。
23.符号地址总线缓存器主要是存放NLPU在以符号型数据作为地址进行外部访问的符号地址信息。包括与框架缓存器,综合工作区缓存等的读写操作。
24.符号数据总线缓存器主要是存放NLPU在以符号型数据作为数据进行外部访问的符号数据信息。包括与框架缓存器,综合工作区缓存等的读写操作。
25.输出文本接口主要是完成在自然语言处理过程中的把需要产生输出结果的信息通过该接口输出。
26.外部通讯接口用于控制访问外部的传感器和驱动器的信息传递,还兼有通过该接口访问人工智能机的运行信息,比如访问ANL语言描述库、框架缓存器、综合工作区缓存、生成句工作区缓存等,以便于观察运行的整个信息情况;另外,在建库操作时,可以通过该接口对ANL语言描述库的内容进行修改或增删。
27.ANL指令行指针产生器在通常的情况下,自动顺序“加1”产生执行ANL指令时的行地址信息,其内容是数值的地址,比如当前的地址是000034H,那么下一个产生的地址就是000035H。实际上就是一个可预置的计数器,预置的数据可能是ANL指令执行过程中的跳转发生的地址。比如执行“GOTO”、“CALL”、“IF”、“AND”、“OR”等指令都会刷新该指令指针产生器的值。也用于接受判断条件为“真”跳转行的缓冲器或判断条件为“假”跳转行的缓冲器的输出信息,以通过ANL指针数据总线,由NLPU读取的ANL语言指令来指定跳转地址的信息。
28.主流程/悬挂流程控制部件主要是用于切换主流程和悬挂流程的扩展词指令的执行,在执行完悬挂工作区缓存中的所有悬挂的扩展词指令的后,自动地接着原来的主流程的当前处理完的扩展词指令的下一个扩展词指令继续执行。以使两个流程的运行互相独立,不会发生错乱。
29.文本转写器用于将人工智能机的文本缓存中的内容按照句子序号、词的序号和框架缓存器的格式写入到框架缓存器中,在转写过程中,还通过编码写入器(地址译码)来完成对人工智能机的地址译码器(框架缓存)编码的写入。该文本转写器通过直接地址总线和直接数据总线来访问人工智能机的文本缓存的(双口RAM),通过符号地址总线和符号数据总线访问框架缓存器。关于人工智能机的地址译码器(框架缓存)的写入编码操作,参见“编码写入器”。
30.句子提取器根据当前的句子指针产生器中的指针值,从框架缓存器中提取该指针指定的句子。比如句子指针产生器中的指针“1/1”,而该句子的五个词为“1/1”(苹果),“1/2”(长),“1/3”(在),“1/4”(哪里),“1/5”(?),那么,提取的句子就是“苹果长在哪里?”。提取过程中需要多次访问框架缓存器。提取过程结束后,并把提取的句子通过符号数据总线送到人工智能机的句子缓存器。
31.句式提取器根据当前的句子指针产生器中的指针值,从框架缓存器中提取该指针指定的句式。比如句子指针产生器中的指针“1/1”,而该句子的五个词的词性为“1/1”(名词),“1/2”(动词),“1/3”(介词),“1/4”(哪里,**假设没有标明词性),“1/5”(?),那么,提取的句式就是“名+动+介+哪里+?”。提取过程中需要多次访问框架缓存器。提取过程结束后,并把提取的句式通过符号数据总线送到人工智能机的句式缓存器。
32.词提取器根据当前的词指针产生器中的指针值,从框架缓存器中提取该指针指定的词。比如,词指针产生器中的指针“1/4”,而该句子的第四个词是“1/4”(哪里),那么所提取的词就是“哪里”。提取过程只需要访问一次框架缓存器。提取过程结束后,并把提取的词通过符号数据总线送到人工智能机的词缓存器。
33.编码写入器(地址译码)用于在把人工智能机的文本缓存的内容写向框架缓存器时,需要对不同的句子序号,不同的词序号及其在框架缓存器的物理地址直接写入到人工智能机的地址译码器(框架缓存)中。以便于以后NLPU可以直接通过符号地址总线访问框架缓存器。该编码器是通过直接数据总线和符号地址总线完成对地址译码器(框架缓存器)的编码写入工作的。另外,还完成对其他的地址译码器的编码写入操作,比如地址译码器(生成句)。
34.当前流程状态标志表明当前的处理状态是处在主执行流程,还是悬挂执行流程,用于NLPU执行某些操作时,依据该标志所进行的某些操作。
35.当前内容标志(句子、句式、词)表明当前处理的扩展词指令ANL描述体是关于句子,还是句式或者是词。
36.生成句标志(句子、句式、词)表明当前的执行的生成句是由句子引导的,还是句式引导的,甚或是由词引导的。
37.当前扩展词指令的工作区地址指针表明当前主流程中的当前扩展词指令在综合工作区的物理地址,也包括在执行悬挂流程中产生生成句的扩展词指令的在综合工作区的物理地址。复位最开始时,该值为000。指向综合工作区中的最开始的一个扩展词指令所在的物理地址。
38.扩展词指令的工作区长度参数量单元该单元中保存每一个扩展词指令在综合工作区中所占的物理空间长度,以所占用的单元的总数来确定的,比如是256个地址空间(00H-FFH)。该单元的参数一般是以常数形式出现的,除非在工作模式“10”时选择,进行修改该参数。
39.加法器1该加法器通过把“当前扩展词指令的工作区地址指针”的值同“扩展词指令的工作区长度参数量单元”的内容相加,从而得到在综合工作区中当前扩展词指令的工作区指针的下一个扩展词指令的工作区指针,在综合工作区缓存中每一个新的扩展词指令的工作区的所在的最新物理地址就是通过该加法器的结果得到的。
40.加法器2用于在执行某些寄存器操作的时候,通过该加法器得到寄存器的在综合工作区的绝对物理地址的值,并通过直接地址总线缓存器输出到直接地址总线上。比如在执行指令“LETRR临时寄存器1=临时寄存器2”时,送至加法器的数据首先是“当前扩展词指令的工作区地址指针”的值,以决定当前扩展词指令的在综合工作区缓存中最开始的物理地址;其次是来自“自定义寄存器偏移量单元”的值,以根据当前扩展词指令的工作区的物理地址来通过偏移量决定该扩展词指令的自定义的寄存器的最开始物理地址。同时,由于是寄存器操作,所以,选通“零数据产生器”,此时没有堆栈的指针值输出。随后,根据该指令的“操作数1缓存器”指明的寄存器“临时寄存器1”所在寄存器区编号(假设是03H),那么操作数1缓存器的输出的“03H”送到该加法器2进行加操作之后,结果就是在该扩展词指令的寄存器“临时寄存器1”的在综合工作区缓存的绝对的物理地址。同理,对于寄存器“临时寄存器2”则也是在“操作数2缓冲器”中把“临时寄存器2”(假设04H)在送到加法器2相加,得到该寄存器的在综合工作区缓存中的物理地址。
41.IF偏移量单元在执行每个扩展词指令中的“IF…THEN…”ANL指令时,该单元用于保存该扩展词指令的在综合工作区中所占的物理空间中的IF堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移量。比如某一个扩展词指令在综合工作区中所占的开始物理地址为000200H。如果IF偏移量为10H的话,那么该扩展词指令的IF堆栈区的最开始的在综合工作区中的绝对物理地址就是(000200H+10H=000210H)。该单元的参数一般是以常数形式出现的,除非在工作模式“10”时,进行该参数修改。
42.CALL偏移量单元在执行每个扩展词指令中的“CALL…”ANL指令时,该单元用于保存该扩展词指令的在综合工作区中所占的物理空间中的CALL堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移量。比如某一个扩展词指令在综合工作区中所占的开始物理地址为000200H。如果CALL偏移量为20H的话,那么该扩展词指令的CALL堆栈区的最开始的在综合工作区中的绝对物理地址就是(000200H+20H=000220H)。该单元的参数一般是以常数形式出现的,除非在工作模式“10”时,进行该参数修改。
43.PUSH偏移量单元在执行每个扩展词指令中的“PUSH…”ANL指令时,该单元用于保存该扩展词指令的在综合工作区中所占的物理空间中的PUSH堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移量。比如某一个扩展词指令在综合工作区中所占的开始物理地址为000200H。如果PUSH偏移量为30H的话,那么该扩展词指令的PUSH堆栈区的最开始的在综合工作区中的绝对物理地址就是(000200H+30H=000230H)。该单元的参数一般是以常数形式出现的,除非在工作模式“10”时,进行修改该参数。
44.自定义寄存器偏移量单元在执行每个扩展词指令中“DEFINER…”的ANL指令时,该单元用于保存扩展词指令的在综合工作区中所占的物理空间中自定义寄存器区的最开始地址相对于该扩展词指令的最开始的物理地址的偏移量。比如,某一个扩展词指令在综合工作区中所占的开始物理地址为000200H,如果自定义寄存器偏移量为40H的话,那么,该扩展词指令的自定义的寄存器区所在的最开始的在综合工作区中的绝对物理地址就是(000200H+40H=000240H),也即第一个编号为“00”的寄存器绝对物理地址。该单元的参数一般是以常数形式出现的,除非在工作模式“10”时,选择进行该参数的修改。
45.通用寄存器偏移量单元在执行每个扩展词指令中含有统一名称的通用寄存器(i,j,k…等)的ANL指令时,该单元用于保存扩展词指令的在综合工作区中所占的物理空间中通用寄存器区的最开始地址相对于该扩展词指令的最开始的物理地址的偏移量。比如某一个扩展词指令在综合工作区中所占的开始物理地址为000200H。如果通用寄存器偏移量为50H的话,那么,该扩展词指令的自定义的寄存器区所在的最开始的在综合工作区中的绝对物理地址就是(000200H+50H=000250H),该单元的参数一般是以常数形式出现的,除非在工作模式“10”时,进行修改该参数。
以上的举例定义,就可以通过偏移量的计算得到IF堆栈区的范围是CALL偏移量-IF偏移量=20H-10H=10H。因为IF堆栈区之后就是CALL堆栈区,同理可以计算到其他区域的大小,当然,这里是为了举例而假设每个区域的范围都是10H。在系统工作之前,可以通过设置工作模式“10”,来设置这些偏移量的大小,还有扩展词指令的工作区长度参数,从而完成一个扩展词指令的工作区的各个分区的设置,这些参数保存在非易失性的存储单元中(比如FLASH存储类),但这些参数在系统工作时候,则是不可更改的。
46.IF调转地址堆栈指针产生器当扩展词指令执行IF指令时,自动将该IF指令的行号写入该扩展词指令的IF堆栈区,当出现IF…THEN…嵌套时,则不断的将对应IF指令的行号写入到该堆栈区内,当执行到“ENDIF”指令时,根据ENDIF指令的操作数,不断地执行出栈操作,从而完成嵌套的进入和退出。该指针产生器在执行IF进栈时指针加1,保存数据;执行ENDIF出栈时,先弹出数据,然后堆栈指针减1。每次最开始执行扩展词指令时,该指针值为000。
47.CALL调转地址堆栈指针产生器当扩展词指令执行CALL指令时,自动地将该CALL指令的行号写入该扩展词指令的CALL堆栈区,当出现CALL嵌套时,则不断的将对应CALL指令的行号写入到该堆栈区内,当执行到“RETURN”指令时,根据RETURN指令的操作数,则不断地执行出栈操作,从而完成嵌套的进入和退出。而该指针产生器在执行CALL进栈时指针加1,保存数据;执行POP出栈时,先弹出数据,然后堆栈指针减1。每次最开始执行扩展词指令时,该指针值为000。
48.PUSH调转地址堆栈指针产生器当扩展词指令执行PUSH指令时,自动将该PUSH指令的指定的操作数(寄存器)的内容写入该扩展词指令的PUSH堆栈区。当出现连续PUSH时,则不断地将对应PUSH指令指定的操作数(寄存器)的内容写入到该堆栈区内,当执行到“POP”指令时,根据POP指令的操作数,不断地来执行出栈操作,将堆栈中的数据出栈到指令指定的操作数(寄存器)。而该指针产生器在执行PUSH进栈时指针加1,保存数据;执行POP出栈时,先弹出数据,然后堆栈指针减1。每次最开始执行扩展词指令时,该指针值为000;49.零数据产生器该产生器只是产生一个0000H的数据输出,用于在执行扩展词指令的非IF、CALL、PUSH等指令时,使之加法器2上的来自堆栈指针的数据是零。此时,关闭各个堆栈的指针产生器的输出,只选通零数据产生器的输出为0000。注意所有堆栈指针产生器,像IF堆栈指针产生器、CALL堆栈指针产生器、PUSH堆栈指针产生器等,在保护现场时,它们的值都要写入到扩展词指令的工作区的指定单元,用于在恢复现场后,再接着继续原来的执行。
50.扩展词指令地址堆栈区(产生悬挂)该堆栈区为NLPU内部的一个支持堆栈操作的存储区,用于在执行扩展词指令的MAKE_ROM指令时,来保存产生“悬挂”的这些扩展词指令的在综合工作区缓存中的物理地址。以便于“主流程/悬挂流程控制部件”在执行悬挂流程时,根据这些保存的物理地址直接再恢复到当时产生悬挂时的那个扩展词指令的现场,以接着使产生悬挂的那个ANL指令行所指定的那一行指令重新执行,通过判断产生悬挂的未知信息是否为已知,以决定要么继续悬挂,要么退出悬挂。
51.扩展词指令地址堆栈指针(产生悬挂)该堆栈指针用来指明“扩展词指令地址堆栈区(产生悬挂)”中的当前的最后进入堆栈保存的那个扩展词指令的地址所在单元的位置,当NLPU复位时,该指针指向堆栈区的最底层(000H),当有进栈操作时,该指针先自动加1,然后,保存信息进入该指针的所在位置的单元;该堆栈指针只是单调的加1操作,也即只有进栈操作,对于属于先有悬挂,后来被清除的扩展词指令的地址则是建立清除标志,以便于在悬挂执行流程时,当指针指向该单元时,通过判断是属于已被清除的地址时,则直接加1进入下一个指针,该指针总是在每次开始执行悬挂流程的开始时被指向最底层(000H)。
52.扩展词指令计数器(产生悬挂)用于记录在整个处理过程中产生的悬挂的扩展词指令的个数,每当产生一个悬挂的扩展词指令,该计数器就加1,该值并不随着悬挂的扩展词指令在执行中的悬挂被清除而改变。该计数器主要是为了在执行悬挂流程中,对扩展词指令地址堆栈区中的悬挂的扩展词指令在逐个执行时,如果执行的个数等于该计数器的值,就结束一次悬挂工作区缓存的执行。
53.比较器该比较器专门用于在执行悬挂工作区的内容时,判断扩展词指令地址堆栈指针(产生悬挂)通过不断加1的值,是否等于扩展词指令计数器(产生悬挂)中的值,如果相等,那么结束一次悬挂工作区缓存的执行。
54.扩展词指令地址堆栈区(产生生成句)该堆栈区为NLPU内部的一个支持堆栈操作的存储区域,用于保存在执行扩展词指令的MAKE_KNOWS/R指令时,出现的生成句,甚至多个生成句的在嵌套执行的情况时,这些扩展词指令在综合工作区缓存中的物理地址。以便“主流程/悬挂流程控制部件”在根据句子指针产生器产生的生成句指针进行回退时,回退到产生该生成句的那个扩展词指令所在的指针时,直接在恢复当时的现场,以接着使产生生成句的那个ANL指令行的下一行指令接着执行,而对于生成句所在的现场的保护是通过在该堆栈区直接保护当时的扩展词指令在综合工作区缓存的物理地址。比如根据句子指针“1-2-3/2w*3-2/1”进行回退时,产生的句子指针是“1-2-3/1”,词指针是“1-2-3/2w”,行号解码器根据“*3”解码的ANL行指针为第“3”行。当时的产生生成句的扩展词指令的现场,包括序号,寄存器,IF堆栈,CALL堆栈,PUSH堆栈等就可以通过存放在“扩展词指令地址堆栈区(产生生成句)”中的该扩展词指令在综合工作区缓存的物理地址而恢复。对于嵌套的情况,则是通过逐层恢复,逐层执行来完成的。
55.扩展词指令地址堆栈指针(产生生成句)该堆栈指针指明“扩展词指令地址堆栈区(产生生成句)”中的当前的最后进入堆栈保存的那个扩展词指令的地址所在单元的位置,或是最后弹出堆栈的那个扩展词指令的地址所在单元的下一个单元位置。当NLPU复位时,该指针指向堆栈区的最底层(000H),当有进栈操作时,该指针先自动加1,然后保存信息进入该指针的所在位置的单元;出栈操作时,先弹出当前指针指向单元的内容,然后指针自动减1。
56.根句比较器用于判断当前的外部输入文本的内容是否全部执行完毕。当句子指针产生器所产生的句子指针(序号)在通过地址译码器(框架缓存器)进行译码时,如果译码的结果为“不存在”,也即“地址译码不存在(框架缓存器)”端的信号为有效时,并且,此时句子指针产生器中的句子指针在“根句比较器”也是被判断为“根句”,那么,“根句比较器”直接输出“全程结束”信号,该信号控制“主流程/悬挂流程控制部件”产生整个NLPU运行结束的操作,并在“运行结束”端输出有效信号,以表明此次NLPU运行结束。
57.当前内容标志缓存器(句子、句式、词)用于在进入悬挂执行流程时,先暂时地保存当前内容标志(句子、句式、词)的内容,当从悬挂执行流程返回到主指令流程时,再将该缓存器的内容返回到当前内容标志(句子、句式、词)中。
58.悬挂消除控制部件用于在执行悬挂流程中,对于在扩展词指令地址堆栈区(产生悬挂)中的由原来的“悬挂”状态转换为不“悬挂”,也即从扩展词指令地址堆栈区(产生悬挂)中清除操作时,该悬挂消除部件完成对堆栈区的相应处理,主要是对被清除的原来地址内容进行清除,清除操作是通过向对应地址单元写入清除标志来完成的。
对NLPU而言,当外部输入文本通过外部输入接口送到文本缓冲后,随即启动NLPU的工作时序。整个过程分为两个流程主执行流程和悬挂执行流程。
主执行流程主要是直接按正常顺序逐个执行文本(外部输入文本或是知识库中体部中的句子文本)中的内容的扩展词指令(句子、句式、词),直到所有的文本执行结束的过程,在主执行流程中,每执行一个扩展词指令之后,都要执行一次悬挂执行流程。
悬挂执行流程根据在悬挂工作区缓存中存放的那些悬挂的扩展词指令(句子、句式、词)的顺序,来逐个执行那些曾经在主执行流程中执行过,但因在处理过程中某些信息的暂时不全,而“悬挂”在悬挂工作区缓存中的那些“悬挂”的扩展词指令的过程。此外,在悬挂执行流程中,也会由MAKE_KNOWS类指令再产生生成句的执行,该过程属于悬挂中的主执行流程,但在该悬挂中的主执行流程中不再执行悬挂执行流程。
NLPU的总体工作过程如下1.首先,对NLPU内部中的所有的部件进行初始化,比如大部分的寄存器被初始化为零;句子指针产生器的值为“1/1”(最开始的一个根句的句子指针值),同时,也会设置词指针产生器的值为“1/1”(最开始的一个根句的第一个词的指针值),因为,每次句子指针产生器的值发生改变,都会直接刷新词指针产生器的值;同时直接根据句子指针产生器的值或是词指针产生器的值的变化,而刷新目标译码器中的当前扩展词指令的主指针和浮动指针的值;主流程/悬挂流程部件中的流程状态标志初始化设置为“主流程”状态。另外,ANL指令行指针产生器也被初始化为零,因为在主执行流程中,只要是句子指针产生器的值,或者是词指针产生器的值发生变化,都会直接对ANL指令行指针产生器进行清零,除非是在悬挂执行流程中,对ANL指令行指针产生器的值则是通过保护过的现场进行赋值,因为“悬挂”扩展词指令进入“悬挂”时保护了当时的各种现场,包括ANL指针值;此外,在产生生成句的那个扩展词指令返回现场时,也是通过保护的现场数据恢复当初的ANL指针值。
2.通过NLPU中的文本转写器把人工智能机的文本缓存(双口RAM)中的内容写入到框架缓存器中,该过程是通过直接地址总线和直接数据总线来读取文本缓存(双口RAM)中的数据。然后,再通过符号地址总线和符号数据总线,将文本缓存(双口RAM)中的数据,按照框架缓存器的格式写入到框架缓存器中。当然,这期间也包括根据当前的文本内容对地址译码器(框架缓存)进行编码写入操作,这部分任务是由文本转写器中的编码写入器(地址译码)来完成的。
3.根据当前的句子指针产生器的值,句子提取器不断地以当前句子指针的前缀来产生递增的词的序号,比如,当前的句子值为“1-2/1”,那么句子指针的前缀是“1-2/”,不断产生的递增的词的序号可能就是“1-2/2”、“1-2/3”、“1-2/4”、“1-2/5”等等,然后通过符号地址总线缓存器送到符号地址总线上,并由地址译码器(框架缓存)转换成框架缓存器的物理地址,从而完成从框架缓存器中读取相应的词的名称,并通过地址译码器(框架缓存)对产生的递增的词序号在进行译码时,是否发出“不存在”标志,来决定一个句子的提取过程结束,比如上个例子该句子总共4个词,产生的“1-2/5”在经过译码时,地址译码器(框架缓存)必然输出不存在的信号,也表明此次的由四个词组成的句子已经提取完毕。之后,则将提取到的在句子提取器中的句子,再通过符号数据总线传送到人工智能机的句子缓存器中。
4.句子缓存器在读到NLPU送来的句子后,主流程/悬挂流程控制部件的“知识库匹配启动”端则发出有效信号,直接启动“句子的自然语言描述库”针对该句子缓存器中的句子进行匹配查找,直接将匹配的结果送NLPU的“知识库匹配结果”信号线,该信号线由2根线构成,当匹配初期时,传送给NLPU的是“00”(匹配中);匹配结束后,传送的“01”表明匹配成功,而传送的“10”则表明匹配失败。
5.当知识库匹配成功时,主流程/悬挂流程控制部件直接控制句子指针产生器产生该句子指针的子句的指针值,比如当前是“1/1”,那么子句指针是“1-1/1”,同时也直接以此值刷新词指针产生器的值。与此同时,句子的自然语言描述库中该句子对应的体部中的所有句子,也写向文本缓存(双口RAM)中,NLPU根据文本缓存已经写入的情况,将其中的数据由文本转写器写入到框架缓存器中,此时写入框架缓存器所依据的指针是根据句子指针产生器中的值,也即刚才产生的子句的指针值来进行的。关于对文本缓存内容写向框架缓存器的操作,在前面已讲述,参见“NLPU工作过程--总体过程—步骤2”。
6.当文本缓存的内容全部写向框架缓存器后,则再继续重复“NLPU工作过程--总体过程—步骤3-5”,只不过每次是基于不同的句子指针的操作而已,直到在知识库中匹配失败为止,也即“知识库匹配结果”信号线上出现“10”,此时,主流程/悬挂流程控制部件的“ANL库匹配启动”端则发出有效信号,直接启动句子缓存器中的内容进入ANL语言描述库的“句子的ANL语言描述库”进行匹配查找。同知识库的匹配过程类似,直接将匹配结果送NLPU的“ANL库匹配结果”信号线,该信号线由2根线构成,在匹配初期时,传送给NLPU的是“00”(匹配中);匹配结束后,传送的“01”表明匹配成功,而传送的“10”则表明匹配失败。只不过这里是在地址译码器(句子)中的匹配,而不是在自然语言描述的知识库中进行匹配而已。
7.如果在ANL语言描述库中匹配成功,那么就直接执行关于该句子的ANL语言描述的描述体,参见“NLPU工作过程---指令执行”。如果匹配失败,那么还要通过当前的词指针产生器的指针值通过词提取器,来提取当前词的名称,这同句子的提取操作的过程类似,然后将词送到词缓存器中,先到词的自然语言描述库进行匹配,如果成功,那么类似于句子的从文本缓存向框架缓存器的操作,不再赘述。如果匹配失败,直接进入词的ANL语言描述库中进行匹配,如果匹配成功,那么就执行词的ANL语言描述库的关于该词的ANL语言描述体,参见“NLPU工作过程---指令执行”。如果是匹配失败,那么,在文本输出接口中,输出“该词库中没有对应描述!”的提示信息,系统执行直接被终止,必须先建有该词库后才能执行。
8.当一个ANL描述体被执行完之后,如果当前主流程/悬挂流程控制部件的“当前流程状态标志”是主执行流程的状态的话,则直接切换到悬挂执行流程状态,并设置“当前流程状态标志”为悬挂执行流程标志,执行悬挂工作区缓存中的“悬挂”的扩展词指令,参见“NLPU工作过程---指令执行”。当悬挂工作区缓存中的内容执行完后,再切换为“当前流程状态标志”为主执行流程标志。
9.主流程/悬挂流程控制部件根据其中的“当前内容标志(句子,句式,词)”状态来决定下一个步骤是执行下一个句子,下一个词,还是句式的执行。该标志不被悬挂执行流程所影响,只是供主执行流程或是悬挂中的主执行流程所使用。比如“当前内容标志”是句子或者是句式,那么,直接控制“句子指针产生器”来产生下一个句子的指针;如果“当前内容标志”是词的话,那么,直接控制“词指针产生器”产生下一个词的指针。假设是按照词的提取并执行的,当产生的词指针在进行词提取时,若“地址译码不存在(框架缓存)”端有效,则进入句式提取的操作,关于句式提取和执行同句子的操作过程类同,如果是在自然语言描述的知识库匹配成功,或者是在ANL语言描述库匹配成功,其具体执行过程参看步骤“NLPU工作过程--总体过程---步骤3---8”的句子执行。
10.在执行过程中,如果句子指针产生器产生的指针在地址译码器(框架缓存)进行译码时,“地址译码不存在(框架缓存)”端有效,并且主流程“根句比较器”的根句判断的输出也有效(当前句指针是根句),那么,整个人工智能机的对外部文本的操作全部执行完毕。可用于进入下一个新的外部输入文本的执行。否则,如果不是全部执行结束,那么就继续按照句子指针产生器的句子指针,或者是词指针产生器的词指针,按照前面讲述的过程接着继续不断地执行下去,直至执行到全程输入文本的执行结束。
NLPU对指令的执行过程如下1.ANL指令行指针产生器的值,通常在主执行流程中执行一个扩展词指令时,都是随句子指针产生器和词指针产生器的变化而被清零,也即都是从第0行(BEGIN)来开始执行扩展词指令的ANL语言描述体的,对于悬挂流程中的扩展词指令的执行,则是通过直接数据总线读取综合工作区中的悬挂工作区缓存中的扩展词指令在保护现场时所记录的当时的ANL指令行的指针的值。并且再通过行号编解码器把符号型的行号数据转换到数值数据写入到ANL指令行指针产生器中。当然在写“悬挂”的扩展词指令的现场时,也是通过行号编解码器将当前的ANL指令行指针发生器中的数值型的行号数据转换成字符型的数据,写入到综合工作区缓存中的该悬挂的扩展词指令的对应的保护ANL指令行指针的单元中的。
2.NLPU从ANL语言描述库读取一条ANL指令时,首先,根据ANL指令的指令格式,分别进入相应的缓冲器中进行缓存,比如指令码缓冲器、操作数1缓冲器,运算符缓冲器、操作数2缓冲器等。指令码译码器首先对指令码缓冲器中的指令码进行译码,然后,通过指令译码器来产生NLPU针对该指令操作的所有相关部件的工作时序。随着指令码内容的不同,指令译码器所产生的操作过程也不相同。
下面对ANL语言指令进行详细说明。
一个扩展词指令的ANL语言描述的格式为
注“……”部分为指令操作的的附加项,除了注释外(解释列),其余的则为编译后自动生成的部分。
下面是与执行ANL指令有关的具体列的内容。
这里的目标不存在调转的行号(地址)--------可人为设置,IF指令条件为“真”跳转行号(地址),IF指令条件为“假”跳转行号(地址)都是系统编译时自动生成的相应的跳转地址,对于是人为地进行设置的目标不存在调转的行号(地址),则系统根据人为设置的标号行(一般都是以标号形式来表示的,如“LP1”,“NN2”等,而不是绝对的行号地址如“1000”,“2500”等)进行编译。
DEFINER格式DEFINER自定义寄存器名称(操作数1)内部寄存器号(MEMxx)(操作数2)举例DEFINER位置寄存器MEM01说明该指令是对自定义名称的寄存器,与内部的寄存器区空间编号建立相应的映射,比如,例子中的“位置寄存器”映射内部的寄存器“MEM01”。
注意自定义的寄存器名称不能有重名,内部寄存器号也不能有重复,否则容易造成执行上的错误。再有,内部寄存器号都不能超出范围,比如,目前设置的值是40,也即最多可有40个寄存器能够提供使用,当确实要增加更多时,应重新设置范围值。此外,系统在编译时也都能够检查出来有重名和超范围的错误。
TEXT格式TEXT描述性的文字(操作数1)举例TEXT这是一个测试的程序!说明该指令是声明这是陈述一个说明性的内容,不执行任何操作,只是便于理解程序而设置的。比如,例子中“这是一个测试的程序!”就是说明当前程序的内容是一个测试的程序。
注意该指令一般只在必要时候使用,通常时的关于程序解释的陈述性文字,最好设置指令的解释列中。因为虽然不执行任何操作,但还是占用指令时间,因为是作为一个指令来操作的,而对于解释列中的内容,则是属于机器执行时“不予理会”的内容,仅是便于程序阅读和理解的。同时在解释列中的内容,更可方便对每一条ANL指令进行解释说明。再有,该指令中的操作数1中的字符数不宜过多,通常限制在20个字以内。
IF格式IF直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假举例IF该句.该句.该词.产地=上海jump01\20jump02\30说明该指令是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为“真”,那么就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。一般情况是“跳转”到当前这个IF指令对应的“THEN_…”这个指令行,除非是在该IF指令之后紧接着有“ANDx”或“ORx”之类指令;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况下,是“跳转”到当前这个IF指令对应的“ELSE_…”这个指令行,除非是该IF指令之后没有对应的“ELSE_…”类指令,此时直接跳转到该IF指令对应的“ENDIF”这个行指令,以便结束该次IF指令的判断操作。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是指在当前句子的第一个词的位置上了,若是再执行“该句.该句.上一词.产地”这个操作数,其中的“上一词”是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是在系统编译时,自动生成的一个产生“目标不存在!”的这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统在编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
4.该指令还可以使用″△″(存在)和″¢″(不存在)操作数,操作数来判断当前寻址的目标是否存在,比如“IF该句.该句.上一词.产地=△”就是表明如果当前寻址目标存在……,“IF该句.该句.上一词.产地=¢”就是表明如果当前寻址目标不存在……,当然,采用″!=″(不等于)也同样可以完成判断,比如“IF该句.该句.上一词.产地!=△”就是表明如果当前寻址目标不存在……,IFR格式IFR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假举例IFR该句.该句.该词.产地=位置寄存器jump01\20jump02\30说明该指令是一个对当前直接寻址的内容与寄存器内容进行逻辑判断的指令,如果条件为“真”,那么就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。一般情况是“跳转”到当前这个IFR指令对应的“THEN_…”这个指令行,除非是该IFR指令之后紧接着有“ANDxx”或“ORxx”之类指令;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况下,是“跳转”到当前这个IFR指令对应的“ELSE_…”这个指令行,除非是该IFR指令之后没有对应的“ELSE_…”类指令,此时直接跳转的是该IFR指令对应的“ENDIF”这个行指令,以便结束该次IFR指令的判断操作。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是指在当前句子的第一个词位置了,若是执行“该句.该句.上一词.产地”这个操作数,这时的“上一词”操作则是非法的,是不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统在编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也即操作数2内容必须是该扩展词指令描述中采用DEFINER指令所声明的寄存器名。比如例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
IFRK格式IFRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假举例IFRK位置寄存器=上海jump01\20jump02\30说明该指令是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为“真”,那么,就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。一般情况下,是“跳转”到当前这个IFRK指令对应的“THEN_…”这个指令行,除非是在该IFRK指令之后紧接着有“ANDxx”或“ORxx”之类指令;如果条件为“假”,那么,就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况下,是“跳转”到当前这个IFRK指令对应的“ELSE_…”这个指令行,除非是该IFRK指令之后没有对应的“ELSE_…”类指令,此时直接跳转的是该IFRK指令对应的“ENDIF”这个行指令,以便结束该次IFRK指令的判断操作。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令所声明的寄存器名。比如例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…。比如例子中“上海”就是一个字符型立即数。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
IFRR格式IFRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假举例IFRR位置寄存器1=位置寄存器2jump01\20jump02\30说明该指令是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为“真”,那么就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。一般情况下,是“跳转”到当前这个IFRR指令对应的“THEN_…”这个指令行,除非是在该IFRR指令之后紧接着有“ANDxx”或“ORxx”之类指令;如果条件为“假”,那么,就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况下,是“跳转”到当前这个IFRR指令对应的“ELSE_…”这个指令行,除非是该IFRR指令之后没有对应的“ELSE_…”类指令,此时直接跳转的是该IFRR指令对应的“ENDIF”这个行指令,以便结束该次IFRR指令的判断操作。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令所声明的寄存器名。比如例子中,“位置寄存器1”就可以是执行指令“DEFINER位置寄存器1 MEM15”声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是寄存器,要求同1,比如这里的“位置寄存器2”就可以是指令“DEFINER位置寄存器2 MEM25”执行后,声明的寄存器。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
AND格式;AND直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假举例AND该句.该句.该词.产地=上海jump01\20jump02\30说明该指令接着IFxx类指令之后,由多个该指令并列完成多个“与”判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为“真”,那么就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。直接是“跳转”到当前这个AND指令所对应的前面的IFxx类指令对应的“THEN_…”这个指令行;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况是“跳转”到当前这个AND指令对应的前面的IFxx类指令对应的“ELSE_…”这个指令行,除非是该IFxx类指令之后没有对应的“ELSE_…”类指令,此时则直接跳转的是该IFxx类指令对应的“ENDIF”这个行指令,以便结束该次IFxx类指令的判断操作。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
4.该指令还可以使用″△″(存在)和″¢″(不存在)操作数,操作数来判断当前寻址的目标是否存在,比如“AND该句.该句.上一词.产地=△”就是表明如果当前寻址目标存在……,“AND该句.该句.上一词.产地=¢”就是表明如果当前寻址目标不存在……,当然,采用″!=″(不等于)也同样可以完成判断,比如“AND该句.该句.上一词.产地!=△”就是表明如果当前寻址目标不存在……,1.该指令可以在IFxx类指令之后多个并排使用该指令来完成多个“与”判断,也可以是ANDR,ANDRK,ANDRR。
比如IF该句.该句.该词.产地=上海AND该句.该句.该词.数量=100AND该句.该句.该词.颜色=红色ANDR该句.该句.该词.颜色=颜色寄存器………ANDR格式ANDR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假举例ANDR该句.该句.该词.产地=上海jump01\20jump02\30说明该指令接着IFxx类指令之后,由多个该指令并列完成多个“与”判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为“真”,那么就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。直接是“跳转”到当前这个ANDR指令对应的前面的IFxx类指令对应的“THEN_…”这个指令行;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况是“跳转”到当前这个ANDR指令对应的前面的IFxx类指令对应的“ELSE_…”这个指令行,除非是在该IFxx类指令之后没有对应的“ELSE_…”类指令,此时直接跳转的是该IFxx类指令对应的“ENDIF”这个行指令,以便结束该次IFxx类指令的判断操作。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
4.指令可以在IFxx指令之后多个并排使用完成多个“与”判断,也可以是AND,ANDRK,ANDRR。
比如IF该句.该句.该词.产地=上海ANDR该句.该句.该词.数量=数量寄存器ANDR该句.该句.该词.颜色=颜色寄存器……ANDRK格式ANDRK寄存器(操作数1)运算符立即数(操作数2)跳转-真 跳转-假举例ANDRK位置寄存器=上海jump01\20jump02\30说明该指令接着IFxx类指令之后,由多个该指令并列完成多个“与”判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为“真”,那么,就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。一般情况是“跳转”到当前这个IFxx指令对应的“THEN_…”这个指令行;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。在一般情况,是“跳转”到当前这个IFxx指令对应的“ELSE_…”这个指令行,除非是该IFxx指令之后没有对应的“ELSE_…”类指令,此时直接跳转的是该IFxx指令对应的“ENDIF”这个行指令,以便结束该次IFxx指令的判断操作。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…。比如例子中“上海”就是一个字符型立即数。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
ANDRR格式ANDRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假举例ANDRR位置寄存器1=位置寄存器2jump01\20jump02\30说明该指令接着IFxx类指令之后,由多个该指令并列完成多个“与”判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为“真”,那么就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。一般情况是“跳转”到当前这个IFxx指令对应的“THEN_…”这个指令行;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况是“跳转”到当前这个IFxx指令对应的“ELSE_…”这个指令行,除非是在该IFxx指令之后没有对应的“ELSE_…”类指令,此时直接跳转的是该IFxx指令对应的“ENDIF”这个行指令,以便结束该次IFxx指令的判断操作。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器1”就可以是执行指令“DEFINER位置寄存器1 MEM15”所声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是寄存器,要求同1,比如这里的“位置寄存器2”就可以是指令“DEFINER位置寄存器2 MEM25”执行后,声明的寄存器。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
OR格式OR直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假举例OR该句.该句.该词.产地=上海jump01\20jump02\30说明该指令接着IFxx类指令之后,由多个该指令并列完成多个“或”判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为“真”,那么,就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。直接是“跳转”到当前这个OR指令所对应的前面的IFxx类指令对应的“THEN_…”这个指令行;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况该“跳转”是指向当前这个OR指令后面的指令行,以便继续执行后面的可能的ORxx类的指令或是遇到THEN_xx为止。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
4.该指令还可以使用″△″(存在)和″¢″(不存在)操作数,操作数来判断当前寻址的目标是否存在,比如“OR该句.该句.上一词.产地=△”就是表明如果当前寻址目标存在……,“OR该句.该句.上一词.产地=¢”就是表明如果当前寻址目标不存在……,当然,采用″!=″(不等于)也同样可以完成判断,比如“OR该句.该句.上一词.产地!=△”就是表明如果当前寻址目标不存在……,2.该指令可以在IFxx类指令之后多个并排使用该指令来完成多个“或”判断,也可以是ORR,ORRK,ORRR。
比如IF该句.该句.该词.产地=上海OR该句.该句.该词.数量=100OR该句.该句.该词.颜色=红色ORR该句.该句.该词.颜色=颜色寄存器……
…ORR格式ORR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假举例ORR该句.该句.该词.产地=上海jump01\20jump02\30说明该指令接着IFxx类指令之后,由多个该指令并列完成多个“或”判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为“真”,那么就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。直接是“跳转”到当前这个ORR指令所对应的前面的IFxx类指令对应的“THEN_…”这个指令行;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况该“跳转”是指向当前这个ORR指令后面的指令行,以便继续执行后面的可能的ORxx类的指令或是遇到THEN_xx为止。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
4.指令可以在IFxx指令之后多个并排使用完成多个“或”判断,也可以是OR,ORRK,ORRR。
比如IF该句.该句.该词.产地=上海
ORR该句.该句.该词.数量=数量寄存器ORR该句.该句.该词.颜色=颜色寄存器……ORRK格式ORRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假举例ORRK位置寄存器=上海jump01\20jump02\30说明该指令接着IFxx类指令之后,由多个该指令并列完成多个“或”判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为“真”,那么,就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。一般情况下,是“跳转”到当前这个IFxx指令对应的“THEN_…”这个指令行;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况该“跳转”是指向当前这个ORR指令后面的指令行,以便继续执行后面的可能的ORxx类的指令或是遇到THEN_xx为止。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…。比如例子中“上海”就是一个字符型立即数。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
ORRR格式ORRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假举例ORRR位置寄存器1=位置寄存器2jump01\20jump02\30说明该指令接着IFxx类指令之后,由多个该指令并列完成多个“或”判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为“真”,那么就跳转到该指令的“跳转-真”这个列中的所指明的地址,比如例子中的“jump01\20”。一般情况是“跳转”到当前这个IFxx指令对应的“THEN_…”这个指令行;如果条件为“假”,那么就跳到该指令的“跳转-假”这个列中的所指明地址,比如例子中的“jump02\30”。一般情况下,该“跳转”是指向当前这个ORRR指令后面的指令行,以便继续执行后面的可能的ORxx类的指令或是遇到THEN_xx为止。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器1”就可以是执行指令“DEFINER位置寄存器1 MEM15”所声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是寄存器,要求同1,比如这里的“位置寄存器2”就可以是指令“DEFINER位置寄存器2 MEM25”执行后,声明的寄存器。
3.该指令的运算符可以是″=″(等于),″!=″(不等于),″>″(大于),″>=″(大于等于),″<″(小于),″<=″(小于等于)。
ENDIF格式ENDIF标号(操作数1)举例ENDIFtt00说明该指令接着IFxx类指令之后,完成一个“IFxx…THEN_xx…ELSE_xx…ENDIF”,来表明这样一个IFxx类语句体的结束。
注意该指令的操作数1(标号),必须是在标号列中存在的名称,可以是数字和字符的某种组合,并且该标号正好是该ENDIF指令对应的IFxx指令的行号。
比如tt00IFxx……THEN_xx……ELSE_xx……ENDIF tt00这里的“tt00”就是对应的IFxx指令的行号。
END格式END说明该指令是表明对一个描述扩展词指令的ANL语言描述体的结束的指令,每一个ANL描述体必须有一个“END”指令。当系统执行到该指令就从当前的扩展词指令执行中退出。
注意该指令的操作数部分都是全空的。该指令也可以在ANL语言描述的中途出现,用于直接从某个“中途”位置退出来,主要用于调试时使用。
LET
格式LET直接寻址的内容(操作数1)运算符立即数(操作数2)举例LET该句.该句.该词.产地=上海说明该指令是一个对当前直接寻址的内容通过立即数进行赋值的指令,比如在例子中,就是完成将立即数“上海”(字符型)赋值给当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.产地”操作数1指定的位置,该指令执行完后,浮动指针所指的当前词的“产地”属性被赋予“上海”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于),″~+=″(字符串的加操作),″+″(算数的加操作),″-″(算术的减操作),″*″(算术的乘操作),″/″(算术的除操作)。
LETR格式LETR直接寻址的内容(操作数1)运算符寄存器(操作数2)举例LETR该句.该句.该词.产地=位置寄存器说明该指令是一个对当前直接寻址的内容通过寄存器进行赋值的指令,比如在例子中,假设“位置寄存器”中当前的值是“上海”,那么,就会通过寄存器(位置寄存器)将“上海”(字符型)赋值给当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.产地”的操作数1指定的位置,当该指令执行完后,浮动指针所指的当前词的“产地”属性被赋予“上海”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于),″~+=″(字符串的加操作),″+″(算数的加操作),″-″(算术的减操作),″*″(算术的乘操作),″/″(算术的除操作)。
LETRK格式LETRK寄存器(操作数1)运算符立即数(操作数2)举例LETRK位置寄存器=上海说明该指令是一个对当前寄存器中的内容通过立即数进行赋值的指令,比如在例子中,就是完成将立即数“上海”(字符型)赋值给当前扩展词指令的当前的寄存器寻址的寄存器“位置寄存器”中,当该指令执行完后,“位置寄存器”被赋予“上海”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…。比如例子中“上海”就是一个字符型立即数。
3.该指令的运算符可以是″=″(等于),″~+=″(字符串的加操作),″+″(算数的加操作),″-″(算术的减操作),″*″(算术的乘操作),″/″(算术的除操作)。
LETRR格式LETRR寄存器(操作数1)运算符寄存器(操作数2)举例LETRR位置寄存器1=位置寄存器2说明该指令是一个对当前寄存器中的内容通过寄存器进行赋值的指令,比如例子中,就是将寄存器“位置寄存器2”的内容赋值给当前扩展词指令的当前的寄存器寻址的寄存器“位置寄存器1”中,如果“位置寄存器2”的值是“上海”,那么当该指令执行完后,“位置寄存器1”被赋予“上海”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器1”就可以是执行指令“DEFINER位置寄存器1 MEM15”所声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是寄存器,要求同1,比如这里的“位置寄存器2”就可以是指令“DEFINER位置寄存器2 MEM25”执行后,声明的寄存器。
3.该指令的运算符可以是″=″(等于),″~+=″(字符串的加操作),″+″(算数的加操作),″-″(算术的减操作),″*″(算术的乘操作),″/″(算术的除操作)。
TRIM_LEFT格式TRIM_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)举例TRIM_LEFT该句.该句.该词.地点=上海说明该指令是一个对当前直接寻址的内容(字符串)从左边删除与立即数(操作数2)相同的部分的操作指令,比如例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,即浮动指针的当前词的“地点”属性的值是“上海高科技园”,那么,当该指令执行完后,浮动指针所指的当前词的“地点”属性的值就被被修整为“高科技园”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是在系统编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于)。
TRIM_LEFTR格式TRIM_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)举例TRIM_LEFTR该句.该句.该词.地点=位置寄存器说明该指令是一个对当前直接寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,即浮动指针的当前词的“地点”属性的值是“上海高科技园”,并假设位置寄存器中的值是“上海”,那么当该指令执行完后,浮动指针所指的当前词的“地点”属性的值就被被修整为“高科技园”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于)。
TRIM_LEFTRK格式TRIM_LEFTRK寄存器(操作数1)运算符立即数(操作数2)
举例TRIM_LEFTRK位置寄存器=上海说明该指令是一个对当前寄存器寻址的内容(字符串)从左边删除与立即数(操作数2)内容相同的部分的操作指令,比如在例子中,假设当前扩展词指令的当前寄存器寻址的“位置寄存器”(操作数1)的内容是“上海高科技园”,那么,当该指令执行完后,“位置寄存器”的值就被修整为“高科技园”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…。比如例子中“上海”就是一个字符型立即数。
3.该指令的运算符可以是″=″(等于)。
TRIM_LEFTRR格式TRIM_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)举例TRIM_LEFTRR位置寄存器1=位置寄存器2说明该指令是一个对当前的寄存器寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令,比如,在例子中,假设当前的扩展词指令的当前寄存器寻址的寄存器“位置寄存器1”(操作数1)的内容是“上海高科技园”,并切假设“位置寄存器2”的内容是“上海”,那么当该指令执行后,“位置寄存器1”的值就被被修整为“高科技园”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如例子中,“位置寄存器1”就可以是指令“DEFINER位置寄存器1 MEM15”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是寄存器,要求同1,比如这里的“位置寄存器2”就可以是指令“DEFINER位置寄存器2 MEM25”执行后,声明的寄存器。
3.该指令的运算符可以是″=″(等于)。
TRIM_RIGHT格式TRIM_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)举例TRIM_RIGHT该句.该句.该词.地点=高科技园说明该指令是一个对当前直接寻址的内容(字符串)从右边删除与立即数(操作数2)相同的部分的操作指令,比如例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,即浮动指针的当前词的“地点”属性的值是“上海高科技园”,那么当该指令执行后,浮动指针所指的当前词的“地点”属性的值就被被修整为“上海”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于)。
TRIM_RIGHTR格式TRIM_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)举例TRIM_RIGHTR该句.该句.该词.地点=位置寄存器说明该指令是一个对当前直接寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令,比如例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,即浮动指针的当前词的“地点”属性的值是“上海高科技园”,并假设位置寄存器中的值是“高科技园”,那么,当该指令执行完后,浮动指针所指的当前词的“地点”属性的值就被被修整为“上海”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,不可以是数字,字符,短句的,也即操作数2内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如例子中,“位置寄存器”就可以是执行指令“DEFINER位置寄存器MEM01”时所声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
3.该指令的运算符可以是″=″(等于)。
TRIM_RIGHTRK格式TRIM_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)举例TRIM_ RIGHTRK位置寄存器=高科技园说明该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与立即数(操作数2)内容相同的部分的操作指令,比如在例子中,假设当前扩展词指令的当前寄存器寻址的“位置寄存器”(操作数1)的内容是“上海高科技园”,那么当该指令执行完后,“位置寄存器”的值就被被修整为“上海”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是属于立即数的内容,比如数字,字符,短句都是可以的,就是不能是寄存器寻址的内容,也即操作数2内容不能是该扩展词指令描述中采用DEFINER指令声明的寄存器名,当然也不能是该扩展词指令的公用寄存器i,j,k…。比如例子中“上海”就是一个字符型立即数。
3.该指令的运算符可以是″=″(等于)。
TRIM_RIGHTRR格式TRIM_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)举例TRIM_RIGHTRR位置寄存器1=位置寄存器2说明该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令,比如在例子中,假设当前扩展词指令的当前寄存器寻址的“位置寄存器1”(操作数1)的内容是“上海高科技园”,并假设“位置寄存器2”的内容是“高科技园”,那么当该指令执行完后,“位置寄存器1”的值就被被修整为“上海”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器1”就可以是执行指令“DEFINER位置寄存器1 MEM15”所声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是寄存器,要求同1,比如这里的“位置寄存器2”就可以是指令“DEFINER位置寄存器2 MEM25”执行后,声明的寄存器。
3.该指令的运算符可以是″=″(等于)。
GET_LEFT格式GET_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)举例GET_LEFT该句.该句.该词.地点=2说明该指令是一个对当前直接寻址的内容(字符串)从左边截取到立即数(操作数2)个字符长度的部分的操作指令,比如例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,即浮动指针的当前词的“地点”属性的值是“上海高科技园”,那么,当该指令执行完后,浮动指针所指的当前词的“地点”属性的值就被被修整为“上海”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然“目标不存在调转的行号(地址)”这个列中指明的地址内容,也可以人为地进行修改,比如跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译就会按照人指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是属于立即数的内容,这里只能是数字,不能是其他的内容。
3.该指令的运算符可以是″=″(等于)。
GET_LEFTR格式GET_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)举例GET_LEFTR该句.该句.该词.地点=位置寄存器说明该指令是一个对当前直接寻址的内容(字符串)从左边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,也即浮动指针的当前词的“地点”属性的值是“上海高科技园”,并切假设位置寄存器中的值是“2”,那么当该指令执行后,浮动指针所指的当前词的“地点”属性的值就被被修整为“上海”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,并且其内容只能是数值,不能是其他内容。
3.该指令的运算符可以是″=″(等于)。
GET_LEFTRK格式GET_LEFTRK寄存器(操作数1)运算符立即数(操作数2)举例GET_LEFTRK位置寄存器=2说明该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令,比如在例子中,假设当前扩展词指令的当前寄存器寻址的“位置寄存器”(操作数1)的内容是“上海高科技园”,那么当该指令执行完后,“位置寄存器”的值就被被修整为“上海”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是属于立即数的内容,并且只能是数值,不能是其他内容。
3.该指令的运算符可以是″=″(等于)。
GET_LEFTRR格式GET_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)
举例GET_LEFTRR位置寄存器1=位置寄存器2说明该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令,比如在例子中,假设当前扩展词指令的当前寄存器寻址的“位置寄存器1”(操作数1)的内容是“上海高科技园”,并假设“位置寄存器2”的内容是“2”,那么当该指令执行完后,“位置寄存器1”的值就被被修整为“上海”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器1”就可以是执行指令“DEFINER位置寄存器1 MEM15”所声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是寄存器,要求同1,寄存器的内容必须是数值,不能是其他内容。
3.该指令的运算符可以是″=″(等于)。
GET_RIGHT格式GET_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)举例GET_RIGHT该句.该句.该词.地点=4说明该指令是一个对当前直接寻址的内容(字符串)从右边截取到立即数(操作数2)个字符长度的部分的操作指令,比如例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,即浮动指针的当前词的“地点”属性的值是“上海高科技园”,那么,当该指令执行完后,浮动指针所指的当前词的“地点”属性的值就被被修整为“高科技园”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是属于立即数的内容,这里只能是数字,不能是其他的内容。
3.该指令的运算符可以是″=″(等于)。
GET_RIGHTR格式GET_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)举例GET_RIGHTR该句.该句.该词.地点=位置寄存器说明该指令是一个对当前直接寻址的内容(字符串)从右边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,也即浮动指针的当前词的“地点”属性的值是“上海高科技园”,并且假设位置寄存器中的值是“4”,那么当该指令执行完后,浮动指针所指的当前词的“地点”属性的值就被被修整为“高科技园”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,其中的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,并且其内容只能是数值,不能是其他内容。
3.该指令的运算符可以是″=″(等于)。
GET_RIGHTRK格式GET_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)举例GET_RIGHTRK位置寄存器=4说明该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令,比如在例子中,假设当前扩展词指令的当前寄存器寻址的“位置寄存器”(操作数1)的内容是“上海高科技园”,那么当该指令执行完后,“位置寄存器”的值就被被修整为“高科技园”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器”就可以是指令“DEFINER位置寄存器MEM01”执行后,声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是属于立即数的内容,并且只能是数值,不能是其他内容。
3.该指令的运算符可以是″=″(等于)。
GET_RIGHTRR格式GET_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)举例GET_RIGHTRR位置寄存器1=位置寄存器2说明该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令,比如在例子中,假设当前扩展词指令的当前寄存器寻址的“位置寄存器1”(操作数1)的内容是“上海高科技园”,并假设“位置寄存器2”的内容是“4”,那么当该指令执行完后,“位置寄存器1”的值就被被修整为“高科技园”这样一个值。
注意1.该指令的操作数1必须是寄存器,不可以是数字,字符,短句的,也即操作数1内容必须是该扩展词指令描述中采用DEFINER指令声明的寄存器名。比如在例子中,“位置寄存器1”就可以是执行指令“DEFINER位置寄存器1 MEM15”所声明的寄存器。当然,也可以是该扩展词指令的公用寄存器i,j,k…,尽管不是用DEFINER指令声明的。
2.该指令的操作数2必须是寄存器,要求同1,寄存器的内容必须是数值,不能是其他内容。
3.该指令的运算符可以是″=″(等于)。
GOTO格式GOTO标号(操作数1)举例GOTOloop1说明该指令是完成直接地无条件跳转到指定行号的位置开始执行的操作。
注意该指令的操作数1(标号),必须是在标号列中存在的名称,也可以是数字和字符的某种组合,但标号不能是有重复的命名。
比如loop1LETxx……LETxx……GOTO loop1…这里的“loop1”就是一个跳转的行号。
GOTOR格式GOTOR寄存器(操作数1)举例GOTOR执行寄存器说明该指令是完成直接地无条件跳转到寄存器寻址的寄存器的值指定行号的位置开始执行的操作。
注意该指令的寄存器(操作数1)中的值必须是数值,且在当前扩展词指令ANL描述块指定的范围内。
CALL格式CALL标号(操作数1)举例CALLloop1说明该指令是同RETURN指令配合使用的。共同完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置。
注意该指令的操作数1(标号),必须是在标号列中存在的名称,可以是数字和字符的某种组合,但标号不能是有重复的命名。调用可以嵌套,但是嵌套层数是有限制的,不能无限次调用操作,比如目前设置最大为40级,也即可以连续调用操作40次,再大了就会溢出。若想再要更多的层次的嵌套,应预先调整设置范围。
比如CALL loop1……loop1LETxx……RETURN loop1………这里的“CALL loop1”就是一个调用以开始行号命名的子程序的操作。
RETURN格式RETURN标号(操作数1)举例RETURNloop1说明该指令是同CALL指令配合使用的。共同来完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置。
注意该指令的操作数1(标号),必须是在标号列中存在的名称,也可以是数字和字符的某种组合,但标号不能是有重复的命名。
比如CALL loop1……loop1LETxx……RETURN loop1……
…这里的“RETURN loop1”就是一个以开始行号命名的子程序返回的操作。
PUSH格式PUSH寄存器(操作数1)举例PUSH位置寄存器说明该指令是同POP指令配合使用的。完成将当前寄存器寻址的寄存器的内容进行压栈操作,比如举例中,将当前位置寄存器中的内容压入堆栈的当前指针位置,假设“位置寄存器”中的值是“上海”,那么,当该指令执行后,堆栈指针的位置内容是“上海”,然后,栈指针又向上移动一级。
注意该指令的操作数1,必须是已经声明了寄存器的名称。堆栈的深度是有限制的,不能无限压栈操作,比如目前设置最大为40级,也即可以连续进栈操作40次,再大了就会溢出。若想再要更深的堆栈深度,应预先调整设置范围。
POP格式POP寄存器(操作数1)举例POP位置寄存器说明该指令是同PUSH指令配合使用的。完成将当前寄存器寻址的寄存器的内容进行出栈操作。比如举例中,将当前的堆栈指针指定的内容弹栈进入寄存器寻址的寄存器“位置寄存器”,如果当前堆栈指针指定的位置的内容是“上海”。那么该指令执行后,位置寄存器的内容是“上海”,然后,栈指针又向下移动一级。
注意该指令的操作数1,必须是已经声明了寄存器的名称。堆栈的深度是有限制的,不能无限出栈操作,比如目前设置最大为40级,也即可以连续出栈操作40次,再大了就会溢出。若想再要更深的堆栈深度,应预先调整设置范围。
SETON格式SETON直接寻址的内容(操作数1)举例SETON该句.该句.下一词.名称说明该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的直接寻址的内容(操作数1)所指定的位置上的操作指令,比如例子中,假设当前扩展词指令的当前的浮动指针指定的位置的内容是“我们 爱 科学”的第一个词“我们”的位置上,那么当该指令执行完后,浮动指针所指定的位置,就是该句“我们 爱 科学”的第一个词“我们”的下一个词“爱”的位置。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.产地”,如果寻址的内容不存在,比如,该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.产地”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数1中的属性名必须是以“名称”来定位的,也即对象的名称,比如“该句.上一句.最前词.名称”,就是建立到当前句的的上一个句的第一个词的位置,这里属性名使用的是“名称”。
SETONR格式SETONR寄存器(操作数1)举例SETONR词位置寄存器说明该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的寄存器寻址的内容(操作数1)所指定的位置上的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针指定的位置的内容是“我们 爱 科学”的第一个词“我们”的位置上,并切假设在寄存器“词位置寄存器”中保存的是第三个词“科学”的位置,那么当该指令执行后,浮动指针所指定的位置,就是该句“我们 爱 科学”的第三个词“科学”的位置。
注意该指令的操作数1,必须是已经声明了寄存器的名称。并且该寄存器必须是记录了或某一句子的某个词的位置。该内容是通过执行SENDPOS指令,将当时的浮动指针位置记录到寄存器中的。
GOBACK格式GOBACK举例GOBACK说明该指令是将当前的可能已经是“访问”到上下文的其他某个位置的浮动指针恢复到当前的扩展词指令的主指针的位置上的操作指令,比如例子中,假设当前执行的扩展词指令所对应的词是第一个词“我们”的位置,而当前扩展词指令的主指针指定的位置的内容是“我们 爱 科学”的第三个词“科学”的位置上,那么当该指令执行完后,当前扩展词指令的浮动指针所指定的位置就会再“回到”该句“我们 爱 科学”的第一个词“我们”的位置。
注意该指令只有指令码,没有任何其它的操作数。
SEND格式SEND直接寻址的内容(操作数1)运算符寄存器(操作数2)举例SEND该句.该句.该词.地点=位置寄存器说明该指令是一个对当前直接寻址的内容发送到寄存器(操作数2)中的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,那么,当该指令执行完后,寄存器“位置寄存器”就被赋值为“上海”这样一个值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.地点”,如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.地点”这个操作数,其中的“上一词”是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,其被赋值的内容可以是数值,字符串等。
3.该指令的运算符可以是″=″(等于)。
SENDPOS格式SENDPOS直接寻址的内容(操作数1)运算符寄存器(操作数2)举例SENDPOS该句.该句.该词.名称=位置寄存器说明该指令是一个将当前的直接寻址的内容所在的位置发送到寄存器(操作数2)中的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置,其内容是“上海高科技园”所在位置“2/5”(第二个句子的第五个词),那么,当该指令执行后,寄存器“位置寄存器”就被被赋值为“2/5”这样一个表示位置的值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.名称”,如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.名称”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,其被赋值的内容是表示位置的值。
3.该指令的运算符可以是 ″=″(等于)。
SENDLENGTH格式SENDLENGTH直接寻址的内容(操作数1)运算符寄存器(操作数2)举例SENDLENGTH该句.该句.该词.名称=数量寄存器说明该指令是一个将当前的直接寻址的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.位置”(操作数1)指定的位置其内容是“上海高科技园”,其所占的字符的个数是“6”(这里共6个汉字),那么,当该指令执行完后,寄存器“位置寄存器”就被被赋值为“6”这样一个表示字符个数的值。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.名称”,如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.名称”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,其被赋值的内容是表示字符个数的值。
3.该指令的运算符可以是″=″(等于)。
SENDLENGTHR格式SENDLENGTHR寄存器(操作数1)运算符寄存器(操作数2)举例SENDLENGTHR颜色寄存器=数量寄存器说明该指令是一个对当前寄存器的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令,比如在例子中,假设当前的扩展词指令的当前的寄存器“颜色寄存器”的内容是“红色”,该内容所占的字符的个数是“2”(这里共2个汉字),那么,当该指令执行完后,寄存器“数量寄存器”就被被赋值为“2”这样一个表示字符个数的值。
注意1.该指令的操作数1,必须是已经声明了寄存器的名称。
2.该指令的操作数2必须是该指令的操作数1,必须是已经声明了的寄存器,其被赋值的内容是表示字符个数的值。
3.该指令的运算符可以是″=″(等于)。
FIND
格式FIND立即数(操作数1)运算符寄存器(操作数2)举例FIND发展=位置寄存器说明该指令是一个根据立即数(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址指定的内容所在的句子内容是“上海高科技园发展迅速!”,并假设“发展”是第二个句子的第三个词所在的词位置的是“2/3”,那么,当该指令执行后,寄存器“位置寄存器”就被被赋值为“2/3”这样一个表示位置的值。如果被查找的词不存在,那么向寄存器(操作数2)写入“-1”。
注意1.该指令的操作数1必须是一个立即数,可以是数值或是字符。
2.该指令的操作数2必须是寄存器,其被赋值的内容是表示位置的值。
3.该指令的运算符可以是″=″(等于)。
FINDR格式FINDR寄存器(操作数1)运算符寄存器(操作数2)举例FINDR内容寄存器=位置寄存器说明该指令是一个根据寄存器(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令,比如在例子中,假设当前扩展词指令的当前的浮动指针所直接寻址指定的内容所在的句子内容是“上海 高科技园 发展 迅速!”,并假设寄存器“内容寄存器”的内容是“发展”,且“发展”是第二个句子的第三个词所在的词位置的是“2/3”,那么,当该指令执行后,寄存器“位置寄存器”就被被赋值为“2/3”这样一个表示位置的值。如果被查找的词不存在,那么向寄存器(操作数2)写入“-1”。
注意1.该指令的操作数1必须是一个寄存器,可以是数值或是字符。
2.该指令的操作数2必须是寄存器,其被赋值的内容是表示位置的值。
3.该指令的运算符可以是″=″(等于)。
NOP格式NOP举例NOP说明该指令是一个不执行任何操作的空操作指令,仅是占有一个指令行。该指令主要用于调试使用,或是对准备取消的指令临时用该指令代替,而不会改变指令行的数目。
注意该指令没有其他的操作数。
ERROR格式ERROR描述性的文字(操作数1)举例ERROR错误,这个操作是非法的!说明该指令是将根据操作数1内容(描述性的文字),生成一个错误提示窗口,窗口显示的内容就是该指令后面的操作数1的内容。比如在例子中,当执行完该指令,那么就会产生一个错误提示窗口,窗口的内容就是“错误,这个操作是非法的!”,便于根据提示信息进行相关调试。
注意该指令一般用在一些可能的非法操作,作提示,或是在调试中显示中间信息。并且该指令中的操作数1中的字符数不宜过多,通常限制在20个字以内。
ILET_RAM格式ILET_RAM直接寻址的内容(操作数1)运算符寄存器(操作数2)举例ILET_RAM该句.该句.该词.数量=数量寄存器说明该指令是一个通过寄存器间接寻址的寄存器对当前直接寻址的内容进行赋值的操作指令,比如在例子中,假设寄存器“数量寄存器”的值是“20”,而该扩展词指令的声明的第20号寄存器的内容此时是“100”,那么,当该指令执行完后,当前的扩展词指令的当前的浮动指针所直接寻址的“该句.该句.该词.数量”(操作数1)的属性名“数量”的属性值是“100”。
注意1.该指令的操作数1必须是属于直接寻址的内容,或说是直接以当前扩展词指令的浮动指针的值来进行寻址的,比如该指令中的“该句.该句.该词.名称”,如果寻址的内容不存在,比如该扩展词指令的浮动指针已经是指在当前句子的第一个词了,若是执行“该句.该句.上一词.名称”这个操作数,执行的“上一词”则是非法的,不存在的。此时,系统会自动执行“目标不存在调转的行号(地址)”这个列中指明的地址,该地址是系统在编译时,自动生成的一个产生“目标不存在!”这个错误提示的指令行的地址。当然,“目标不存在调转的行号(地址)”这个列中指明的地址的内容,也可以人为地进行修改,比如,跳转到人为指定的位置继续执行下去,而不会产生错误提示。当人为地修改地址内容时,系统编译时就会按照人的指定的标号行来编译,不再自动生成跳转的自动生成的那一个产生“目标不存在!”错误提示的指令行的地址。
2.该指令的操作数2必须是寄存器,其被赋值的内容是表示在扩展词指令的ANL语言描述块中的已经声明的寄存器号码的值。
3.该指令的运算符可以是″=″(等于)。
ILET_REG格式ILET_REG寄存器(操作数1)运算符寄存器(操作数2)举例ILET_REG临时寄存器=数量寄存器说明该指令是一个通过寄存器间接寻址的寄存器对当前寄存器(操作数1)的内容进行赋值的操作指令,比如在例子中,假设寄存器“数量寄存器”的值是“20”,而该扩展词指令的的声明的第20号寄存器的内容此时是“100”,那么,当该指令执行完后,当前的扩展词指令的当前的寄存器“临时寄存器”(操作数1)的内容被赋值为“100”。
注意1.该指令的操作数2必须是寄存器,必须是在扩展词指令的中已经声明的寄存器。
2.该指令的操作数2必须是寄存器,其被赋值的内容是表示在扩展词指令的ANL语言描述块中的已经声明的寄存器号码的值。
3.该指令的运算符可以是″=″(等于)。
MAKE_OUTPUT格式MAKE_OUTPUT属性名(操作数1)运算符描述性的文字(操作数2)举例MAKE_OUTPUT名称=所有的运行结束!说明1.该指令是一个把该指令后面的操作数2的内容写入到系统的输出窗口的操作指令。比如在例子中,当执行完该指令,那么就会在输出窗口中显示“所有的运行结束!”,用于显示处理过程中的提示信息。
2.如果当前的扩展词指令的句或词或句式是由MAKE_KNOWS或MAKE_KNOWSR指令生成的句子话,那么,其操作数2的内容不写向输出窗口,而是写向由MAKE_KNOWS或MAKE_KNOWSR指令生成的句子的生成句对应的工作区中对应的属性名的属性值区域。比如在例子中,当执行完该指令,那么就会在生成句对应的工作区中的“名称”属性名的值中写入“所有的运行结束!”,而不再写入到系统的输出窗口。
3.属性名(操作数1)必须是生成句工作区中的所规定的那些属性名,其内容可以在生成句的属性名库中进行编辑和修改。
注意该指令的作用类似于ERROR指令,也可以用在一些可能的非法操作,作提示,或是在调试中显示中间信息,但是ERROR指令是生成信息提示窗口,并不写入到系统的输出窗口,而MAKE_OUTPUT指令则也不生成信息提示窗口。并且该指令中的操作数2中的字符数不宜过多,通常限制在20个字以内。
MAKE_OUTPUTR格式MAKE_OUTPUTR属性名(操作数1)运算符寄存器(操作数2)举例MAKE_OUTPUTR名称=结果寄存器说明1.该指令是一个把寄存器(操作数2)的内容写入到系统的输出窗口的操作指令。比如在例子中,假设寄存器“结果寄存器”的内容是“所有的运行结束!”,当执行完该指令,那么就会在输出窗口中显示“所有的运行结束!”,用于显示处理过程中的提示信息。
2.如果当前的扩展词指令的句或词或句式是由MAKE_KNOWS或MAKE_KNOWSR指令生成的句子话,那么,其操作数2的内容不写向输出窗口,而是写向由MAKE_KNOWS或MAKE_KNOWSR指令生成的句子的生成句对应的工作区中对应的属性名的属性值区域。比如在例子中,当执行完该指令,那么就会在生成句对应的工作区中的“名称”属性名的值中写入“所有的运行结束!”,而不再写入到系统的输出窗口。
3.属性名(操作数1)必须是生成句工作区中的所规定的那些属性名,其内容可以在生成句的属性名库中进行编辑和修改。
注意该指令的作用也可以用在一些可能的非法操作提示,或是在调试中来显示中间信息,但是该指令更多的作用还是用于通过寄存器来输出运算结果,包括输出到输出窗口或是写向生成句工作区对应的属性名的属性值区域。。
MAKE_ROM格式MAKE_ROM标号(操作数1)举例MAKE_ROMloop1说明该指令是完成将当前正在执行的扩展词指令进行“悬挂”处理,也即将当前的扩展词指令执行的现场,保存进悬挂工作区缓存中,以便下一次执行处于“悬挂”中的该扩展词指令。保存的现场则包括该扩展词指令的各种IF_THEN_…,CALL…嵌套的环境、寄存器的值、主指针、浮动指针的值等一切相关的内容,当然还要保存该指令的标号(操作数1)的行号,来做为下一次执行处于“悬挂”中的该扩展词指令的ANL指令开始执行的行指针。当进入“悬挂”后(保存完现场),也即退出该扩展词指令的执行,以便于开始执行下一个扩展词指令的。这里的标号(操作数1)一般都是执行某种判断的开始行的标号,因为产生“悬挂”的原因是某种判断的条件是“未知”,所以下一次执行“悬挂”的内容是,还是要判断该条件是否为“已知”,如果是的话,可能就会从该悬挂工作区缓存中消除,因为没有产生“悬挂”的条件,或者是在新的ANL指令行产生新的“悬挂”;如果仍然“未知”,那么继续“悬挂”,等待下一次的执行“悬挂”的该指令。这也正是该指令的目的,所以标号(操作数1)所在的行号,是一个对致使产生该“悬挂”的条件进行不断判断的行号,否则,“悬挂”就失去了意义。
注意该指令的操作数1(标号),必须是在标号列中存在的名称,也可以是数字和字符的某种组合,但标号不能是有重复的命名。
比如lp1IFxx……MAKE_ROM lp1…这里的“lp1”就是一个对产生“悬挂”的条件进行判断的指令的开始行号。
MAKE_ROMR格式MAKE_ROMR标号(操作数1)举例MAKE_ROMRloop1说明暂时保留的指令,用于以后扩展。
MAKE_KNOWS格式MAKE_KNOWS描述性的文字(操作数1)举例MAKE_KNOWS鲸鱼是鱼类吗?说明该指令是一个通过该指令后面的立即数的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令。比如在例子中,当执行完该指令时,那么就会产生一个“鲸鱼是鱼类吗?”的句子,然后,到知识库中匹配到该句子,如果知识库中有这样的句子,那么就执行知识库中的该对应的知识块体部的用自然语言句子对“是否是鱼?”的所有判断操作。当执行完后,退出该“调用知识库句子”的操作,然后执行该指令下一个ANL指令,一般都是READ_RESULT指令,因为通过该指令读取判断的结果是“是”还是“否”,来决定后面的一些操作,如果没有READ_RESULT指令,那么,该指令执行的判断的结果就没有意义,因为之所以执行判断就是为了指导判断的结果,否则为何要执行判断,另外其他的是某种过程的操作,只是为了执行一个过程,可能没有中间结果,比如可能“把所有的英文的大写改为小写。”的句子,那么就不需要结果,但是对于判断的句子,必须有结果。该结果就是通过READ_RESULT指令来读取的,至于生成句子执行中输出的结果是通过MAKE_OUTPUT或MAKE_OUTPUTR指令写入到该生成句工作区对应属性名的区域的,因为是生成句,所以生成句中的MAKE_OUTPUT或MAKE_OUTPUTR指令的输出是直接写入到生成句工作区,而不是写到系统的输出窗口。
如果描述性的文字(操作数1)的内容句子,在知识库中没有查找匹配到,那么,会生成提示信息“知识库中没有该对应句子,系统不能继续!”,信息不全,无法执行,需要编写相应的知识进入到知识库中。
注意该指令完成了在某些时候,通过依靠常识性知识和专业知识来理解自然语言过程。描述性的文字(操作数1)的内容必须是知识库中存在的已经被用自然语言描述过的句子,否则,不能完成“调用知识库中的句子”的过程,并且该指令中的操作数1中的字符数不宜过多,通常限制在20个字以内。
MAKE_KNOWSR格式MAKE_KNOWSR寄存器(操作数1)举例MAKE_KNOWSR问题寄存器说明该指令是一个通过该指令后面的寄存器的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令。比如例子中,假设寄存器“问题寄存器”中的内容是“鲸鱼是鱼类吗?”,当执行完该指令时,那么就会产生一个“鲸鱼是鱼类吗?”的句子,然后到知识库中匹配到该句子,如果知识库中有这样的句子,那么就执行知识库中的该对应的知识块体部的用自然语言句子对“是否是鱼?”的所有判断操作。当执行完后,则退出该“调用知识库句子”的操作,然后执行该指令下一个ANL指令,一般都是READ_RESULT指令,因为通过该指令读取判断的结果是“是”还是“否”,来决定后面的一些操作,如果没有READ_RESULT指令,那么该指令执行的判断的结果就没有意义,因为之所以执行判断就是为了指导判断的结果,否则为何要执行判断,另外其他的是某种过程的操作,只是为了执行一个过程,可能没有中间结果,比如可能“把所有的英文的大写改为小写。”的句子,那么就不需要结果,但是对于判断的句子,必须有结果。该结果就是通过READ_RESULT指令来读取的,至于生成句子执行中输出的结果,是通过MAKE_OUTPUT或MAKE_OUTPUTR指令写入到该生成句工作区对应属性名的区域的,因为是生成句,所以生成句中的MAKE_OUTPUT或MAKE_OUTPUTR指令的输出是直接写入到生成句工作区的,而不是写到系统的输出窗口。
如果寄存器(操作数1)的内容的句子,在知识库中没有查找匹配到,那么就会生成提示信息“知识库中没有该对应句子,系统不能继续!”,信息不全,无法执行,需要编写相应的知识进入到知识库中。
注意该指令完成了在某些时候,通过依靠常识性知识和专业知识来理解自然语言过程。在寄存器(操作数1)的内容必须是知识库中存在的已经被用自然语言描述过的句子,否则,不能完成“调用知识库中的句子”的过程,并且该指令中的操作数1中的字符数不宜过多,通常限制在20个字以内。
READ_RESULT格式READ_RESULT属性名(操作数1)运算符 寄存器(操作数2)举例READ_RESULT名称=结果寄存器说明该指令是一个把由该扩展词指令的ANL语言的MAKE_KNOWS或MAKE_KNOWSR指令生成的句子,在执行完后,生成的在生成句工作区的结果(一般是通过执行句子时运行的MAKE_OUTPUT或MAKE_OUTPUTR指令完成写入操作),通过该指令把相应的内容通过指定的属性名(操作数1)读取送到寄存器(操作数2)的操作指令,是与MAKE_KNOWS或MAKE_KNOWSR指令配合使用的,一般都是紧接着它们之后,单独的该指令没有意义。比如在例子中,假设在生成句工作区中属性名为“名称”的属性值是“计算机”,当执行完该指令,那么,寄存器“结果寄存器”的内容就会被写入“计算机”,也即结果的读取操作完成。
注意属性名(操作数1)必须是生成句工作区中的所规定的那些属性名,并且其内容可以在生成句的属性名库中进行编辑和修改,操作数2必须是已经声明的寄存器名。
THEN_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LET的话,那么,使用该指令。其他的格式和功能都同“LET”指令完全一样。具体参见LET指令。
THEN_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETR的话,那么,使用该指令。其他的格式和功能都同“LETR”指令完全一样。具体参见LETR指令。
THEN_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRK的话,那么使用该指令。其他的格式和功能都同“LETRK”指令完全一样。具体参见LETRK指令。
THEN_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRR的话,那么使用该指令。其他的格式和功能都同“LETRR”指令完全一样。具体参见LETRR指令。
THEN_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFT的话,那么使用该指令。其他的格式和功能都同“TRIM_LEFT”指令完全一样。具体参见TRIM_LEFT指令。
THEN_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTR的话,那么使用该指令。其他的格式和功能都同“TRIM_LEFTR”指令完全一样。具体参见TRIM_LEFTR指令。
THEN_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRK的话,那么,使用该指令。其他的格式和功能都同“TRIM_LEFTRK”指令完全一样。具体参见TRIM_LEFTRK指令。
THEN_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRR的话,那么,使用该指令。其他的格式和功能都同“TRIM_LEFTRR”指令完全一样。具体参见TRIM_LEFTRR指令。
THEN_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHT的话,那么使用该指令。其他的格式和功能都同“TRIM_RIGHT”指令完全一样。具体参见TRIM_RIGHT指令。
THEN_TRIM_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTR的话,那么,使用该指令。其他的格式和功能都同“TRIM_RIGHTR”指令完全一样。具体参见TRIM_RIGHTR指令。
THEN_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,那么使用该指令。其他的格式和功能都同“TRIM_RIGHTRR”指令完全一样。具体参见TRIM_RIGHTRR指令。
THEN_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,那么使用该指令。其他的格式和功能都同“TRIM_RIGHTRR”指令完全一样。具体参见TRIM_RIGHTRR指令。
THEN_GET_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_LEFT的话,那么使用该指令。其他的格式和功能都同“GET_LEFT”指令完全一样。具体参见GET_LEFT指令。
THEN_GET_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_LEFTR的话,那么使用该指令。其他的格式和功能都同“GET_LEFTR”指令完全一样。具体参见GET_LEFTR指令。
THEN_GET_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_LEFTRK的话,那么使用该指令。其他的格式和功能都同“GET_LEFTRK”指令完全一样。具体参见GET_LEFTRK指令。
THEN_GET_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_LEFTRR的话,那么使用该指令。其他的格式和功能都同“GET_LEFTRR”指令完全一样。具体参见GET_LEFTRR指令。
THEN_GET_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_RIGHT的话,那么使用该指令。其他的格式和功能都同“GET_RIGHT”指令完全一样。具体参见GET_RIGHT指令。
THEN_GET_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_RIGHTR的话,那么使用该指令。其他的格式和功能都同“GET_RIGHTR”指令完全一样。具体参见GET_RIGHTR指令。
THEN_GET_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_RIGHTRK的话,那么使用该指令。其他的格式和功能都同“GET_RIGHTRK”指令完全一样。具体参见GET_RIGHTRK指令。
THEN_GET_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_RIGHTRR的话,那么使用该指令。其他的格式和功能都同“GET_RIGHTRR”指令完全一样。具体参见GET_RIGHTRR指令。
THEN_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTO的话,那么使用该指令。其他的格式和功能都同“GOTO”指令完全一样。具体参见GOTO指令。
THEN_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTOR的话,那么使用该指令。其他的格式和功能都同“GOTOR”指令完全一样。具体参见GOTOR指令。
THEN_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是CALL的话,那么使用该指令。其他的格式和功能都同“CALL”指令完全一样。具体参见CALL指令。
THEN_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是RETURN的话,那么使用该指令。其他的格式和功能都同“RETURN”指令完全一样。具体参见RETURN指令。
THEN_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是PUSH的话,那么使用该指令。其他的格式和功能都同“PUSH”指令完全一样。具体参见PUSH指令。
THEN_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是POP的话,那么使用该指令。其他的格式和功能都同“POP”指令完全一样。具体参见POP指令。
THEN_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SETON的话,那么使用该指令。其他的格式和功能都同“SETON”指令完全一样。具体参见SETON指令。
THEN_SETONR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SETONR的话,那么使用该指令。其他的格式和功能都同“SETONR”指令完全一样。具体参见SETONR指令。
THEN_GOBACK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOBACK的话,那么使用该指令。其他的格式和功能都同“GOBACK”指令完全一样。具体参见GOBACK指令。
THEN_SEND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SEND的话,那么使用该指令。其他的格式和功能都同“SEND”指令完全一样。具体参见SEND指令。
THEN_SENDPOS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDPOS的话,那么使用该指令。其他的格式和功能都同“SENDPOS”指令完全一样。具体参见SENDPOS指令。
THEN_SENDLENGTH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTH的话,那么使用该指令。其他的格式和功能都同“SENDLENGTH”指令完全一样。具体参见SENDLENGTH指令。
THEN_SENDLENGTHR
仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTHR的话,那么使用该指令。其他的格式和功能都同“SENDLENGTHR”指令完全一样。具体参见SENDLENGTHR指令。
THEN_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是FIND的话,那么,使用该指令。其他的格式和功能都同“FIND”指令完全一样。具体参见FIND指令。
THEN_FINDR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是FINDR的话,那么使用该指令。其他的格式和功能都同“FINDR”指令完全一样。具体参见FINDR指令。
THEN_NOP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是NOP的话,那么,使用该指令。其他的格式和功能都同“NOP”指令完全一样。具体参见NOP指令。
THEN_ERROR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ERROR的话,那么使用该指令。其他的格式和功能都同“ERROR”指令完全一样。具体参见ERROR指令。
THEN_ILET_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_RAM的话,那么使用该指令。其他的格式和功能都同“ILET_RAM”指令完全一样。具体参见ILET_RAM指令。
THEN_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_REG的话,那么使用该指令。其他的格式和功能都同“ILET_REG”指令完全一样。具体参见ILET_REG指令。
THEN_MAKE_OUTPUT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUT的话,那么,使用该指令。其他的格式和功能都同“MAKE_OUTPUT”指令完全一样。具体参见MAKE_OUTPUT指令。
THEN_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUTR的话,那么使用该指令。其他的格式和功能都同“MAKE_OUTPUTR”指令完全一样。具体参见MAKE_OUTPUTR指令。
THEN_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROM的话,那么使用该指令。其他的格式和功能都同“MAKE_ROM”指令完全一样。具体参见MAKE_ROM指令。
THEN_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROMR的话,那么使用该指令。其他的格式和功能都同“MAKE_ROMR”指令完全一样。具体参见MAKE_ROMR指令。
THEN_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWS的话,那么使用该指令。其他的格式和功能都同“MAKE_KNOWS”指令完全一样。具体参见MAKE_KNOWS指令。
THEN_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWSR的话,那么,使用该指令。其他的格式和功能都同“MAKE_KNOWSR”指令完全一样。具体参见MAKE_KNOWSR指令。
THEN_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是READ_RESULT的话,那么,使用该指令。其他的格式和功能都同“READ_RESULT”指令完全一样。具体参见READ_RESULT指令。
===================================ELSE开头的指令ELSE_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LET的话,那么,使用该指令。其他的格式和功能都同“LET”指令完全一样。具体参见LET指令。
ELSE_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETR的话,那么,使用该指令。其他的格式和功能都同“LETR”指令完全一样。具体参见LETR指令。
ELSE_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRK的话,那么,使用该指令。其他的格式和功能都同“LETRK”指令完全一样。具体参见LETRK指令。
ELSE_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRR的话,那么,使用该指令。其他的格式和功能都同“LETRR”指令完全一样。具体参见LETRR指令。
ELSE_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFT的话,那么使用该指令。其他的格式和功能都同“TRIM_LEFT”指令完全一样。具体参见TRIM_LEFT指令。
ELSE_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTR的话,那么使用该指令。其他的格式和功能都同“TRIM_LEFTR”指令完全一样。具体参见TRIM_LEFTR指令。
ELSE_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRK的话,那么,使用该指令。其他的格式和功能都同“TRIM_LEFTRK”指令完全一样。具体参见TRIM_LEFTRK指令。
ELSE_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRR的话,那么,使用该指令。其他的格式和功能都同“TRIM_LEFTRR”指令完全一样。具体参见TRIM_LEFTRR指令。
ELSE_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHT的话,那么使用该指令。其他的格式和功能都同“TRIM_RIGHT”指令完全一样。具体参见TRIM_RIGHT指令。
ELSE_TRIM_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTR的话,那么使用该指令。其他的格式和功能都同“TRIM_RIGHTR”指令完全一样。具体参见TRIM_RIGHTR指令。
ELSE_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRK的话,那么使用该指令。其他的格式和功能都同“TRIM_RIGHTRK”指令完全一样。具体参见TRIM_RIGHTRK指令。
ELSE_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRR的话,那么使用该指令。其他的格式和功能都同“TRIM_RIGHTRR”指令完全一样。具体参见TRIM_RIGHTRR指令。
ELSE_GET_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFT的话,那么使用该指令。其他的格式和功能都同“GET_LEFT”指令完全一样。具体参见GET_LEFT指令。
ELSE_GET_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTR的话,那么使用该指令。其他的格式和功能都同“GET_LEFTR”指令完全一样。具体参见GET_LEFTR指令。
ELSE_GET_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRK的话,那么使用该指令。其他的格式和功能都同“GET_LEFTRK”指令完全一样。具体参见GET_LEFTRK指令。
ELSE_GET_LEFTRR
仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRR的话,那么使用该指令。其他的格式和功能都同“GET_LEFTRR”指令完全一样。具体参见GET_LEFTRR指令。
ELSE_GET_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHT的话,那么使用该指令。其他的格式和功能都同“GET_RIGHT”指令完全一样。具体参见GET_RIGHT指令。
ELSE_GET_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTR的话,那么使用该指令。其他的格式和功能都同“GET_RIGHTR”指令完全一样。具体参见GET_RIGHTR指令。
ELSE_GET_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRK的话,那么使用该指令。其他的格式和功能都同“GET_RIGHTRK”指令完全一样。具体参见GET_RIGHTRK指令。
ELSE_GET_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRR的话,那么使用该指令。其他的格式和功能都同“GET_RIGHTRR”指令完全一样。具体参见GET_RIGHTRR指令。
ELSE_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTO的话,那么,使用该指令。其他的格式和功能都同“GOTO”指令完全一样。具体参见GOTO指令。
ELSE_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTOR的话,那么使用该指令。其他的格式和功能都同“GOTOR”指令完全一样。具体参见GOTOR指令。
ELSE_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是CALL的话,那么,使用该指令。其他的格式和功能都同“CALL”指令完全一样。具体参见CALL指令。
ELSE_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是RETURN的话,那么使用该指令。其他的格式和功能都同“RETURN”指令完全一样。具体参见RETURN指令。
ELSE_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是PUSH的话,那么,使用该指令。其他的格式和功能都同“PUSH”指令完全一样。具体参见PUSH指令。
ELSE_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是POP的话,那么,使用该指令。其他的格式和功能都同“POP”指令完全一样。具体参见POP指令。
ELSE_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETON的话,那么使用该指令。其他的格式和功能都同“SETON”指令完全一样。具体参见SETON指令。
ELSE_SETONR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETONR的话,那么使用该指令。其他的格式和功能都同“SETONR”指令完全一样。具体参见SETONR指令。
ELSE_GOBACK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOBACK的话,那么使用该指令。其他的格式和功能都同“GOBACK”指令完全一样。具体参见GOBACK指令。
ELSE_SEND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SEND的话,那么,使用该指令。其他的格式和功能都同“SEND”指令完全一样。具体参见SEND指令。
ELSE_SENDPOS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDPOS的话,那么使用该指令。其他的格式和功能都同“SENDPOS”指令完全一样。具体参见SENDPOS指令。
ELSE_SENDLENGTH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTH的话,那么使用该指令。其他的格式和功能都同“SENDLENGTH”指令完全一样。具体参见SENDLENGTH指令。
ELSE_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTHR的话,那么,使用该指令。其他的格式和功能都同“SENDLENGTHR”指令完全一样。具体参见SENDLENGTHR指令。
ELSE_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FIND的话,那么,使用该指令。其他的格式和功能都同“FIND”指令完全一样。具体参见FIND指令。
ELSE_FINDR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FINDR的话,那么使用该指令。其他的格式和功能都同“FINDR”指令完全一样。具体参见FINDR指令。
ELSE_NOP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是NOP的话,那么,使用该指令。其他的格式和功能都同“NOP”指令完全一样。具体参见NOP指令。
ELSE_ERROR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ERROR的话,那么使用该指令。其他的格式和功能都同“ERROR”指令完全一样。具体参见ERROR指令。
ELSE_ILET_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_RAM的话,那么使用该指令。其他的格式和功能都同“ILET_RAM”指令完全一样。具体参见ILET_RAM指令。
ELSE_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_REG的话,那么使用该指令。其他的格式和功能都同“ILET_REG”指令完全一样。具体参见ILET_REG指令。
ELSE_MAKE_OUTPUT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUT的话,那么,使用该指令。其他的格式和功能都同“MAKE_OUTPUT”指令完全一样。具体参见MAKE_OUTPUT指令。
ELSE_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUTR的话,那么使用该指令。其他的格式和功能都同“MAKE_OUTPUTR”指令完全一样。具体参见MAKE_OUTPUTR指令。
ELSE_MAKEROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROM的话,那么使用该指令。其他的格式和功能都同“MAKE_ROM”指令完全一样。具体参见MAKE_ROM指令。
ELSE_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROMR的话,那么使用该指令。其他的格式和功能都同“MAKE_ROMR”指令完全一样。具体参见MAKE_ROMR指令。
ELSE_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,那么使用该指令。其他的格式和功能都同“MAKE_KNOWS”指令完全一样。具体参见MAKE_KNOWS指令。
ELSE_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,那么,使用该指令。其他的格式和功能都同“MAKE_KNOWSR”指令完全一样。具体参见MAKE_KNOWSR指令。
ELSE_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是READ_RESULT的话,那么,使用该指令。其他的格式和功能都同“READ_RESULT”指令完全一样。具体参见READ_RESULT指令。
权利要求
1.一种人工智能机实现自然语言理解的方法,其特征在于它以面向自然语言的汇编语言——ANL语言为基础,以扩展词指令的方式对外部输入的自然语言描述的文本内容进行理解,扩展词指令是针对词、句子、句式的由若干个ANL语言指令构成的描述体,工作过程如下(1)向人工智能机输入用ANL语言描述的有关自然语言的知识,建造ANL语言描述库,主要包括三个部分,句子的ANL语言描述库、句式的ANL语言描述库、词的ANL语言描述库;(2)向人工智能机输入用自然语言直接描述的各种内容,建造自然语言描述库,包括句子的自然语言描述库、句式的自然语言描述库、词的自然语言描述库三部分,这些库是按知识块形式进行组织的,每个知识块包括头部标题和体部,体部是由若干个自然语言句子构成的对头部标题的解释;(3)人工智能机对送来的经过分词后的句子暂时先去掉分词分隔符后合成原句;(4)在句子的ANL语言描述库中,进行查找该合成的原句,如果查找成功,就把该扩展词指令的ANL内容从句子的ANL语言描述库中调出来,从第一行开始逐条地执行每条指令,当该描述该扩展词指令的所有相关的ANL指令执行完毕,那么人工智能机对这个句子的理解过程结束;(5)如果在句子的ANL语言描述库中查找失败,就执行按常规逐个词的理解方式;首先取出送来的经过分词后的句子中的第一个词,如果该词是数字,机器能够自动地生成对应的关于数字的ANL语言描述;如果该词不是数字,则在词的自然语言描述库中进行查找匹配该词,如果查找成功,则直接执行知识块体部的对该词的自然语言解释的句子,否则,则进入词的ANL语言描述库中进行查找;(6)如果在词的ANL语言的描述库中查找成功,就把该扩展词指令的ANL内容从词的ANL描述库中调出来,按指令逐条执行,当该扩展词指令的所有相关的ANL指令执行完毕,人工智能机对这个句子中的这个词的理解过程结束;如果查找失败,人工智能机则终止当前处理过程,必须先在词库中建立对应的词的描述,系统才能处理;(7)按步骤5,依次读取当前句子的下一个词并执行,直至当前句子的所有的词,包括标点都执行完毕,那么当前的句子按照逐个词的理解结束;下一步进行句式处理;(8)将上述逐个词理解的句子的每个词的词性所生成的相应的句式,先在句式的自然语言描述库中进行查找,如果查找成功,那么直接执行知识块体部中的对该句式的自然语言解释的句子,否则,则在句式的ANL语言描述库中进行查找该句式,如果查找成功,就把该扩展词指令的ANL语言描述的内容调出来,按指令逐条执行,当该操作的所有相关的ANL指令执行完毕时,人工智能机对这个句子的附加的句式的理解过程结束;如果在句式的ANL语言描述库中查找失败,句式处理过程结束;此时人工智能机对当前句子的理解结束。其中ANL语言的指令如下DEFINER格式DEFINER自定义寄存器名称(操作数1)内部寄存器号(MEMxx)(操作数2)该指令是对自定义名称的寄存器,与内部的寄存器区空间编号建立相应的映射;TEXT格式TEXT描述性的文字(操作数1)该指令是声明这是陈述一个说明性的内容,不执行任何操作,只是便于理解程序而设置的;IF格式IF直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;IFR格式IFR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令是一个对当前直接寻址的内容与寄存器内容进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;IFRK格式IFRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;IFRR格式IFRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;AND格式AND直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ANDR格式ANDR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;ANDRK格式ANDRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ANDRR格式ANDRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真 跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;OR格式OR直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;格式ORR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址,;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ORRK格式ORRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ORRR格式ORRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;ENDIF格式ENDIF标号(操作数1)该指令接着IFxx类指令之后,完成一个IFxx…THEN_xx…ELSE_xx…ENDIF,来表明这样一个IFxx类语句体的结束;END格式END说明该指令是表明对一个描述扩展词指令的ANL语言描述体的结束的指令,每一个ANL描述体必须有一个END指令;当系统执行到该指令就从当前的扩展词指令执行中退出;LET格式LET直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容通过立即数进行赋值的指令;LETR格式LETR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容通过寄存器进行赋值的指令;LETRK格式LETRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器中的内容通过立即数进行赋值的指令;LETRR格式LETRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器中的内容通过寄存器进行赋值的指令;TRIM_LEFT格式TRIM_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边删除与立即数(操作数2)相同的部分的操作指令;TRIM_LEFTR格式TRIM_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_LEFTRK格式TRIM_LEFTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边删除与立即数(操作数2)内容相同的部分的操作指令;TRIM_LEFTRR格式TRIM_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前的寄存器寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_RIGHT格式TRIM_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边删除与立即数(操作数2)相同的部分的操作指令;TRIM_RIGHTR格式TRIM_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_RIGHTRK格式TRIM_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与立即数(操作数2)内容相同的部分的操作指令;TRIM_RIGHTRR格式TRIM_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令;GET_LEFT格式GET_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边截取到立即数(操作数2)个字符长度的部分的操作指令;GET_LEFTR格式GET_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令;GET_LEFTRK格式GET_LEFTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令;GET_LEFTRR格式GET_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令;GET_RIGHT格式GET_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边截取到立即数(操作数2)个字符长度的部分的操作指令;GET_RIGHTR格式GET_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令;GET_RIGHTRK格式GET_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令;GET_RIGHTRR格式GET_RIGHTRR寄存器(操作数1)运算符寄在器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令;GOTO格式GOTO标号(操作数1)该指令是完成直接地无条件跳转到指定行号的位置开始执行的操作;GOTOR格式GOTOR寄存器(操作数1)该指令是完成直接地无条件跳转到寄存器寻址的寄存器的值指定行号的位置开始执行的操作;CALL格式CALL标号(操作数1)该指令是同RETURN指令配合使用的,共同完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置;RETURN格式RETURN标号(操作数1)该指令是同CALL指令配合使用的;共同来完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置;PUSH格式PUSH寄存器(操作数1)该指令是同POP指令配合使用的;完成将当前寄存器寻址的寄存器的内容进行压栈操作;POP格式POP寄存器(操作数1)该指令是同PUSH指令配合使用的;完成将当前寄存器寻址的寄存器的内容进行出栈操作;SETON格式SETON直接寻址的内容(操作数1)该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的直接寻址的内容(操作数1)所指定的位置上的操作指令;SETONR格式SETONR寄存器(操作数1)该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的寄存器寻址的内容(操作数1)所指定的位置上的操作指令;GOBACK格式GOBACK该指令是将当前的可能已经是访问到上下文的其他某个位置的浮动指针恢复到当前的扩展词指令的主指针的位置上的操作指令SEND格式SEND直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容发送到寄存器(操作数2)中的操作指令;SENDPOS格式SENDPOS直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个将当前的直接寻址的内容所在的位置发送到寄存器(操作数2)中的操作指令;SENDLENGTH格式SENDLENGTH直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个将当前的直接寻址的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令;SENDLENGTHR格式SENDLENGTHR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令;FIND格式FIND立即数(操作数1)运算符寄存器(操作数2)该指令是一个根据立即数(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令;FINDR格式FINDR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个根据寄存器(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令;NOP格式NOP该指令是一个不执行任何操作的空操作指令,仅是占有一个指令行;该指令主要用于调试使用,或是对准备取消的指令临时用该指令代替,而不会改变指令行的数目;ERROR格式ERROR描述性的文字(操作数1)该指令是将根据操作数1内容(描述性的文字),生成一个错误提示窗口,窗口显示的内容就是该指令后面的操作数1的内容;ILET_RAM格式ILET_RAM直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前直接寻址的内容进行赋值的操作指令;ILET_REG格式ILET_REG寄存器(操作数1)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前寄存器(操作数1)的内容进行赋值的操作指令;MAKE_OUTPUT格式MAKE_OUTPUT属性名(操作数1)运算符描述性的文字(操作数2)该指令是一个把该指令后面的操作数2的内容写入到系统的输出窗口的操作指令;MAKE_OUTPUTR格式MAKE_OUTPUTR属性名(操作数1)运算符寄存器(操作数2)该指令是一个把寄存器(操作数2)的内容写入到系统的输出窗口的操作指令;MAKE_ROM格式MAKE_ROM标号(操作数1)该指令是完成将当前正在执行的扩展词指令进行悬挂处理,也即将当前的扩展词指令执行的现场,保存进悬挂工作区缓存中,以便下一次执行处于悬挂中的该扩展词指令;MAKE_ROMR格式MAKE_ROMR标号(操作数1)暂时保留的指令,用于以后扩展;MAKE_KNOWS格式MAKE_KNOWS描述性的文字(操作数1)该指令是一个通过该指令后面的立即数的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令;MAKE_KNOWSR格式MAKE_KNOWSR寄存器(操作数1)该指令是一个通过该指令后面的寄存器的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令;READ_RESULT格式READ_RESULT属性名(操作数1)运算符寄存器(操作数2)该指令是一个把由ANL语言的MAKEvKNOWS或MAKE_KNOWSR指令生成的句子,在执行完后,生成的在生成句工作区的结果,通过该指令把相应的内容通过指定的属性名(操作数1)读取送到寄存器(操作数2)的操作指令,是与MAKE_KNOWS或MAKE_KNOWSR指令配合使用的;THEN_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一样;THEN_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETR的话,则使用该指令;THEN_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完全一样;THEN_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完全一样;THEN_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFT的话,则使用该指令;其他的格式和功能都同TRIM_LEFT指令完全一样;THEN_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR指令完全一样;THEN_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRK的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRK指令完全一样;THEN_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRR指令完全一样;THEN_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RIGHT指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTR指令完全一样;THEN_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;THEN_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;THEN_GET_LEFT仅用在IFxx…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仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_RIGHT的话,则使用该指令;其他的格式和功能都同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指令完全一样;THEN_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全一样;THEN_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTOR的话,则使用该指令;其他的格式和功能都同GOTOR指令完全一样;THEN_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全一样;THEN_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令完全一样;THEN_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;THEN_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一样;THEN_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完全一样;THEN_SETONR仅用在IFxx…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仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;THEN_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同SENDLENGTHR指令完全一样;THEN_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样;THEN_FINDR仅用在IFxx…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_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM指令完全一样;THEN_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_REG的话,则使用该指令;其他的格式和功能都同ILET_REG指令完全一样;THEN_MAKE_OUTPUT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUT的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUT指令完全一样;THEN_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUTR的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUTR指令完全一样;THEN_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROM的话,则使用该指令;其他的格式和功能都同MAKE_ROM指令完全一样;THEN_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE_ROMR指令完全一样;THEN_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWS指令完全一样;THEN_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWSR的话,则使用该指令;其他的格式和功能都同MAKE_KNOWSR指令完全一样;THEN_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是READ_RESULT的话,则使用该指令;其他的格式和功能都同READ_RESULT指令完全一样;ELSE_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一样;ELSE_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETR的话,则使用该指令;其他的格式和功能都同LETR指令完全一样;ELSE_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完全一样;ELSE_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完全一样;ELSE_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFT的话,则使用该指令;其他的格式和功能都同TRIM_LEFT指令完全一样;ELSE_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR指令完全一样;ELSE_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRK的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRK指令完全一样;ELSE_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRR指令完全一样;ELSE_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RIGHT指令完全一样;ELSE_TRIM_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTR指令完全一样;ELSE_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRK的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRK指令完全一样;ELSE_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;ELSE_GET_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFT的话,则使用该指令;其他的格式和功能都同GET_LEFT指令完全一样;ELSE_GET_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTR的话,则使用该指令;其他的格式和功能都同GET_LEFTR指令完全一样;ELSE_GET_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRK的话,则使用该指令;其他的格式和功能都同GET_LEFTRK指令完全一样;ELSE_GET_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRR的话,则使用该指令;其他的格式和功能都同GET_LEFTRR指令完全一样;ELSE_GET_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHT的话,则使用该指令;其他的格式和功能都同GET_RIGHT指令完全一样;ELSE_GET_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTR的话,则使用该指令;其他的格式和功能都同GET_RIGHTR指令完全一样;ELSE_GET_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRK的话,则使用该指令;其他的格式和功能都同GET_RIGHTRK指令完全一样;ELSE_GET_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRR的话,则使用该指令;其他的格式和功能都同GET_RIGHTRR指令完全一样;ELSE_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全一样;ELSE_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTOR的话,则使用该指令;其他的格式和功能都同GOTOR指令完全一样;ELSE_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全一样;ELSE_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令完全一样;ELSE_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;ELSE_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一样;ELSE_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完全一样;ELSE_SETONR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETONR的话,则使用该指令;其他的格式和功能都同SETONR指令完全一样;ELSE_GOBACK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOBACK的话,则使用该指令;其他的格式和功能都同GOBACK指令完全一样;ELSE_SEND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SEND的话,则使用该指令;其他的格式和功能都同SEND指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDPOS的话,则使用该指令;其他的格式和功能都同SENDPOS指令完全一样;ELSE_SENDLENGTH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;ELSE_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同SENDLENGTHR指令完全一样;ELSE_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样;ELSE_FINDR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FINDR的话,则使用该指令;其他的格式和功能都同FINDR指令完全一样;ELSE_NOP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是NOP的话,则使用该指令;其他的格式和功能都同NOP指令完全一样;ELSE_ERROR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ERROR的话,则使用该指令;其他的格式和功能都同ERROR指令完全一样;ELSE_ILET_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM指令完全一样;ELSE_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_REG的话,则使用该指令;其他的格式和功能都同ILET_REG指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUT的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUT指令完全一样;ELSE_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUTR的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUTR指令完全一样;ELSE_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROM的话,则使用该指令;其他的格式和功能都同MAKE_ROM指令完全一样;ELSE_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE_ROMR指令完全一样;ELSE_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWS指令完全一样;ELSE_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWSR指令完全一样;ELSE_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是READ_RESULT,则使用该指令;其他的格式和功能都同READ_RESULT指令完全一样。
2.一种人工智能机,其特征在于它主要包括面向自然语言处理的中央处理单元NLPU和以此为核心的外围设备,其中包括中央处理单元NLPU以ANL语言为其汇编语言,面向符号处理,支持对自然语言文本的上下文访问,支持符号地址总线、符号数据总线等多种总线;文本输入接口用于对预先分词处理过的外部输入文本进行接收;文本输出接口用于将处理的中间结果及最终结果以文字数据流的格式向外输出;输入/输出设备扩展接口用于输入外部的传感信息和驱动外部设备;自然语言描述的知识库存储媒介是硬盘,包括分别存储句子的自然语言描述库、句式的自然语言描述库、词的自然语言描述库的三块;每块硬盘分别带有各自的硬件检索机;双口RAM作为文本缓存器用于暂存通过文本输入接口获取的文本数据;框架缓存器是按表格方式分配的RAM存储器,其中的内容包括句子、词名称、定位序号、相关属性名及属性值的物理空间,中央处理单元NLPU可直接通过符号地址总线,以字符串形式的序号为地址直接访问该存储器;框架缓存器的地址译码器用于中央处理单元NLPU通过直接数据总线和读写控制来操作地址译码器的编码,直接将框架式缓存的序号译码成框架缓存器的物理地址;句子缓存器存放中央处理单元NLPU依据句子指针的序号形式的值从框架缓存器中提取的句子,该句子缓存器直接输出到通过硬件检索机连接的句子的自然语言描述库,和通过地址译码器连接的句子的ANL语言描述库;句式缓存器存放中央处理单元NLPU在依据句子指针的序号形式的值从框架缓存器中提取的句式,该句式缓存器直接输出到通过硬件检索机连接的句式的自然语言描述库,和通过地址译码器连接的句式的ANL语言描述库;词缓存器存放中央处理单元NLPU在依据词指针的序号形式的值从框架式缓存中提取的词,该词缓存器直接输出到通过硬件检索机连接的词的自然语言描述库,和通过地址译码器连接的词的ANL语言描述库;综合工作区缓存为RAM存储器,包括当前执行的扩展词指令的工作现场暂存、悬挂工作区、生成句的工作区;生成句工作区缓存保存生成的句子的内容,包括句子的名称、序号、生成句的属性名对应的值;生成句的地址译码器在NLPU输出的某一个生成句的字符串形式的序号时,直接在生成句工作区缓存中定位到该生成句的开始物理地址;生成句属性地址产生器将在生成句工作区缓存中的开始物理地址,与生成句属性名的编号的相对地址进行相加运算,得到该产生生成句属性名的绝对物理地址;句子的地址译码器为直接内容寻址存储器CAM,该地址译码器直接将来自于句子缓冲器中的句子的字符串译码成句子的ANL语言描述库中映射该句子的开始物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来完成;句式的地址译码器为直接内容寻址存储器CAM,该地址译码器直接将来自于句式缓冲器中的句式的字符串译码成在句式的ANL语言描述库中映射该句式的开始物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来完成;词的地址译码器为直接内容寻址存储器CAM,该地址译码器直接将来自于词缓冲器中的词的字符串译码成在词的ANL语言描述库中映射该词的开始物理地址,其编码的操作由NLPU通过直接数据总线和读写控制来完成;ANL指针地址产生器将通过句子、句式、词的地址译码器译码后的对于在ANL语言描述中的句子、句式、词的相应描述库中映射句子、句式、词的字符串的开始物理地址,与中央处理单元NLPU的ANL行指针数据相加,得到它们在对应的ANL语言描述库中的ANL指令行的地址;ANL语言描述库为可擦写的ROM存储器,主要包括三个部分,句子的ANL语言描述库、句式的ANL语言描述库、词的ANL语言描述库,直接为中央处理单元NLPU提供ANL语言指令;符号地址总线直接传输以字符串形式的序号作为地址的数据,通过文本上下文的位置数据完成对框架缓存器的访问;符号数据总线主要是完成中央处理单元NLPU与框架缓存器,以及还有其他的外围缓存器件的以符号串形式的数据的信息传递;直接地址总线用于NLPU访问外围的直接以2进制数据为地址的直接地址寻址的器件;直接数据总线直接传送2进制数据,用于中央处理单元NLPU完成需要以直接数据进行传递的器件的访问;ANL指令数据总线该总线主要是用于中央处理单元NLPU直接从ANL语言描述库中读取ANL指令,每读一次ANL库的信息,该总线就加载了一条ANL指令;ANL行指针数据线主要用于产生中央处理单元NLPU对ANL语言描述库进行访问时所需要的ANL指令行的相应物理地址。其中ANL语言的指令如下DEFINER格式DEFINER自定义寄存器名称(操作数1)内部寄存器号(MEMxx)(操作数2)该指令是对自定义名称的寄存器,与内部的寄存器区空间编号建立相应的映射;TEXT格式TEXT描述性的文字(操作数1)该指令是声明这是陈述一个说明性的内容,不执行任何操作,只是便于理解程序而设置的;IF格式IF直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;IFR格式IFR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令是一个对当前直接寻址的内容与寄存器内容进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;IFRK格式IFRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;IFRR格式IFRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真 跳转-假该指令是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;AND格式AND直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ANDR格式ANDR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;ANDRK格式ANDRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ANDRR格式ANDRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个与判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,那么就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;OR格式OR直接寻址的内容(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IF指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;格式ORR直接寻址的内容(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFR指令,是一个对当前直接寻址的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址,;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ORRK格式ORRK寄存器(操作数1)运算符立即数(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFRK指令,是一个对当前寄存器的内容与立即数进行逻辑判断的指令,如果条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,那么就跳到该指令的跳转-假这个列中的所指明地址;ORRR格式ORRR寄存器(操作数1)运算符寄存器(操作数2)跳转-真跳转-假该指令接着IFxx类指令之后,由多个该指令并列完成多个或判断的指令,功能相当于IFRR指令,是一个对当前寄存器的内容与寄存器内容进行逻辑判断的指令,如果是条件为真,就跳转到该指令的跳转-真这个列中的所指明的地址;如果条件为假,就跳到该指令的跳转-假这个列中的所指明地址;ENDIF格式ENDIF标号(操作数1)该指令接着IFxx类指令之后,完成一个IFxx…THEN_xx…ELSE_xx…ENDIF,来表明这样一个IFxx类语句体的结束;END格式END说明该指令是表明对一个描述扩展词指令的ANL语言描述体的结束的指令,每一个ANL描述体必须有一个END指令;当系统执行到该指令就从当前的扩展词指令执行中退出;LET格式LET直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容通过立即数进行赋值的指令;LETR格式LETR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容通过寄存器进行赋值的指令;LETRK格式LETRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器中的内容通过立即数进行赋值的指令;LETRR格式LETRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器中的内容通过寄存器进行赋值的指令;TRIM_LEFT格式TRIM_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边删除与立即数(操作数2)相同的部分的操作指令;TRIM_LEFTR格式TRIM_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_LEFTRK格式TRIM_LEFTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边删除与立即数(操作数2)内容相同的部分的操作指令;TRIM_LEFTRR格式TRIM_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前的寄存器寻址的内容(字符串)从左边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_RIGHT格式TRIM_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边删除与立即数(操作数2)相同的部分的操作指令;TRIM_RIGHTR格式TRIM_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令;TRIM_RIGHTRK格式TRIM_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与立即数(操作数2)内容相同的部分的操作指令;TRIM_RIGHTRR格式TRIM_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边删除与寄存器(操作数2)中内容相同的部分的操作指令;GET_LEFT格式GET_LEFT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边截取到立即数(操作数2)个字符长度的部分的操作指令;GET_LEFTR格式GET_LEFTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从左边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令;GET_LEFTRK格式GET_LEFTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令;GET_LEFTRR格式GET_LEFTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从左边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令;GET_RIGHT格式GET_RIGHT直接寻址的内容(操作数1)运算符立即数(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边截取到立即数(操作数2)个字符长度的部分的操作指令;GET_RIGHTR格式GET_RIGHTR直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容(字符串)从右边截取到寄存器(操作数2)中数值指定的字符长度的部分的操作指令;GET_RIGHTRK格式GET_RIGHTRK寄存器(操作数1)运算符立即数(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到立即数(操作数2)中的数值指定的字符长度的部分的操作指令;GET_RIGHTRR格式GET_RIGHTRR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器寻址的内容(字符串)从右边截取到寄存器(操作数2)中的数值指定的字符长度的部分的操作指令;GOTO格式GOTO标号(操作数1)该指令是完成直接地无条件跳转到指定行号的位置开始执行的操作;GOTOR格式GOTOR寄存器(操作数1)该指令是完成直接地无条件跳转到寄存器寻址的寄存器的值指定行号的位置开始执行的操作;CALL格式CALL标号(操作数1)该指令是同RETURN指令配合使用的,共同完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置;RETURN格式RETURN标号(操作数1)该指令是同CALL指令配合使用的;共同来完成直接地无条件调用指定的以行号命名的子程序执行的操作,并通过RETURN从子程序中返回到该指令的下一个指令的位置;PUSH格式PUSH寄存器(操作数1)该指令是同POP指令配合使用的;完成将当前寄存器寻址的寄存器的内容进行压栈操作;POP格式POP寄存器(操作数1)该指令是同PUSH指令配合使用的;完成将当前寄存器寻址的寄存器的内容进行出栈操作;SETON格式SETON直接寻址的内容(操作数1)该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的直接寻址的内容(操作数1)所指定的位置上的操作指令;SETONR格式SETONR寄存器(操作数1)该指令是将当前的浮动指针建立到以当前浮动指针的位置为参照的寄存器寻址的内容(操作数1)所指定的位置上的操作指令;GOBACK格式GOBACK该指令是将当前的可能已经是访问到上下文的其他某个位置的浮动指针恢复到当前的扩展词指令的主指针的位置上的操作指令SEND格式SEND直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个对当前直接寻址的内容发送到寄存器(操作数2)中的操作指令;SENDPOS格式SENDPOS直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个将当前的直接寻址的内容所在的位置发送到寄存器(操作数2)中的操作指令;SENDLENGTH格式SENDLENGTH直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个将当前的直接寻址的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令;SENDLENGTHR格式SENDLENGTHR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个对当前寄存器的内容所占的字符的个数发送到寄存器(操作数2)中的操作指令;FIND格式FIND立即数(操作数1)运算符寄存器(操作数2)该指令是一个根据立即数(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令;FINDR格式FINDR寄存器(操作数1)运算符寄存器(操作数2)该指令是一个根据寄存器(操作数1)中的内容对当前的扩展词指令的浮动指针的直接寻址的内容所在的句子的每一个词进行查找的操作指令;NOP格式NOP该指令是一个不执行任何操作的空操作指令,仅是占有一个指令行;该指令主要用于调试使用,或是对准备取消的指令临时用该指令代替,而不会改变指令行的数目;ERROR格式ERROR描述性的文字(操作数1)该指令是将根据操作数1内容(描述性的文字),生成一个错误提示窗口,窗口显示的内容就是该指令后面的操作数1的内容;ILET_RAM格式ILET_RAM直接寻址的内容(操作数1)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前直接寻址的内容进行赋值的操作指令;ILET_REG格式ILET_REG寄存器(操作数1)运算符寄存器(操作数2)该指令是一个通过寄存器间接寻址的寄存器对当前寄存器(操作数1)的内容进行赋值的操作指令;MAKE_OUTPUT格式MAKE_OUTPUT属性名(操作数1)运算符描述性的文字(操作数2)该指令是一个把该指令后面的操作数2的内容写入到系统的输出窗口的操作指令;MAKE_OUTPUTR格式MAKE_OUTPUTR属性名(操作数1)运算符寄存器(操作数2)该指令是一个把寄存器(操作数2)的内容写入到系统的输出窗口的操作指令;MAKE_ROM格式MAKE_ROM标号(操作数1)该指令是完成将当前正在执行的扩展词指令进行悬挂处理,也即将当前的扩展词指令执行的现场,保存进悬挂工作区缓存中,以便下一次执行处于悬挂中的该扩展词指令;MAKE_ROMR格式MAKE_ROMR标号(操作数1)暂时保留的指令,用于以后扩展;MAKE_KNOWS格式MAKE_KNOWS描述性的文字(操作数1)该指令是一个通过该指令后面的立即数的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令;MAKE_KNOWSR格式MAKE_KNOWSR寄存器(操作数1)该指令是一个通过该指令后面的寄存器的(操作数1)的内容产生一个新的自然语言句子的并到知识库中查找匹配并执行的操作指令;READ_RESULT格式READ_RESULT属性名(操作数1)运算符寄存器(操作数2)该指令是一个把由ANL语言的MAKE_KNOWS或MAKE_KNOWSR指令生成的句子,在执行完后,生成的在生成句工作区的结果,通过该指令把相应的内容通过指定的属性名(操作数1)读取送到寄存器(操作数2)的操作指令,是与MAKE_KNOWS或MAKE_KNOWSR指令配合使用的;THEN_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一样;THEN_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETR的话,则使用该指令;THEN_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完全一样;THEN_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完全一样;THEN_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFT的话,则使用该指令;其他的格式和功能都同TRIM_LEFT指令完全一样;THEN_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR指令完全一样;THEN_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRK的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRK指令完全一样;THEN_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_LEFTRR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRR指令完全一样;THEN_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RIGHT指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTR指令完全一样;THEN_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;THEN_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;THEN_GET_LEFT仅用在IFxx…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仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GET_RIGHT的话,则使用该指令;其他的格式和功能都同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指令完全一样;THEN_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全一样;THEN_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是GOTOR的话,则使用该指令;其他的格式和功能都同GOTOR指令完全一样;THEN_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全一样;THEN_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令完全一样;THEN_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;THEN_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一样;THEN_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完全一样;THEN_SETONR仅用在IFxx…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仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;THEN_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同SENDLENGTHR指令完全一样;THEN_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样;THEN_FINDR仅用在IFxx…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_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM指令完全一样;THEN_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是ILET_REG的话,则使用该指令;其他的格式和功能都同ILET_REG指令完全一样;THEN_MAKE_OUTPUT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUT的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUT指令完全一样;THEN_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_OUTPUTR的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUTR指令完全一样;THEN_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROM的话,则使用该指令;其他的格式和功能都同MAKE_ROM指令完全一样;THEN_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE_ROMR指令完全一样;THEN_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWS指令完全一样;THEN_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是MAKE_KNOWSR的话,则使用该指令;其他的格式和功能都同MAKE_KNOWSR指令完全一样;THEN_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在THEN位置的第一个指令是READ_RESULT的话,则使用该指令;其他的格式和功能都同READ_RESULT指令完全一样;ELSE_LET仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LET的话,则使用该指令;其他的格式和功能都同LET指令完全一样;ELSE_LETR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETR的话,则使用该指令;其他的格式和功能都同LETR指令完全一样;ELSE_LETRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRK的话,则使用该指令;其他的格式和功能都同LETRK指令完全一样;ELSE_LETRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是LETRR的话,则使用该指令;其他的格式和功能都同LETRR指令完全一样;ELSE_TRIM_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFT的话,则使用该指令;其他的格式和功能都同TRIM_LEFT指令完全一样;ELSE_TRIM_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTR指令完全一样;ELSE_TRIM_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRK的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRK指令完全一样;ELSE_TRIM_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_LEFTRR的话,则使用该指令;其他的格式和功能都同TRIM_LEFTRR指令完全一样;ELSE_TRIM_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHT的话,则使用该指令;其他的格式和功能都同TRIM_RIGHT指令完全一样;ELSE_TRIM_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTR指令完全一样;ELSE_TRIM_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRK的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRK指令完全一样;ELSE_TRIM_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是TRIM_RIGHTRR的话,则使用该指令;其他的格式和功能都同TRIM_RIGHTRR指令完全一样;ELSE_GET_LEFT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFT的话,则使用该指令;其他的格式和功能都同GET_LEFT指令完全一样;ELSE_GET_LEFTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTR的话,则使用该指令;其他的格式和功能都同GET_LEFTR指令完全一样;ELSE_GET_LEFTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRK的话,则使用该指令;其他的格式和功能都同GET_LEFTRK指令完全一样;ELSE_GET_LEFTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_LEFTRR的话,则使用该指令;其他的格式和功能都同GET_LEFTRR指令完全一样;ELSE_GET_RIGHT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHT的话,则使用该指令;其他的格式和功能都同GET_RIGHT指令完全一样;ELSE_GET_RIGHTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTR的话,则使用该指令;其他的格式和功能都同GET_RIGHTR指令完全一样;ELSE_GET_RIGHTRK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRK的话,则使用该指令;其他的格式和功能都同GET_RIGHTRK指令完全一样;ELSE_GET_RIGHTRR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GET_RIGHTRR的话,则使用该指令;其他的格式和功能都同GET_RIGHTRR指令完全一样;ELSE_GOTO仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTO的话,则使用该指令;其他的格式和功能都同GOTO指令完全一样;ELSE_GOTOR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOTOR的话,则使用该指令;其他的格式和功能都同GOTOR指令完全一样;ELSE_CALL仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是CALL的话,则使用该指令;其他的格式和功能都同CALL指令完全一样;ELSE_RETURN仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是RETURN的话,则使用该指令;其他的格式和功能都同RETURN指令完全一样;ELSE_PUSH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是PUSH的话,则使用该指令;其他的格式和功能都同PUSH指令完全一样;ELSE_POP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是POP的话,则使用该指令;其他的格式和功能都同POP指令完全一样;ELSE_SETON仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETON的话,则使用该指令;其他的格式和功能都同SETON指令完全一样;ELSE_SETONR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SETONR的话,则使用该指令;其他的格式和功能都同SETONR指令完全一样;ELSE_GOBACK仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是GOBACK的话,则使用该指令;其他的格式和功能都同GOBACK指令完全一样;ELSE_SEND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SEND的话,则使用该指令;其他的格式和功能都同SEND指令完全一样;ELSE_SENDPOS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDPOS的话,则使用该指令;其他的格式和功能都同SENDPOS指令完全一样;ELSE_SENDLENGTH仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTH的话,则使用该指令;其他的格式和功能都同SENDLENGTH指令完全一样;ELSE_SENDLENGTHR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是SENDLENGTHR的话,则使用该指令;其他的格式和功能都同SENDLENGTHR指令完全一样;ELSE_FIND仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FIND的话,则使用该指令;其他的格式和功能都同FIND指令完全一样;ELSE_FINDR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是FINDR的话,则使用该指令;其他的格式和功能都同FINDR指令完全一样;ELSE_NOP仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是NOP的话,则使用该指令;其他的格式和功能都同NOP指令完全一样;ELSE_ERROR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ERROR的话,则使用该指令;其他的格式和功能都同ERROR指令完全一样;ELSE_ILET_RAM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_RAM的话,则使用该指令;其他的格式和功能都同ILET_RAM指令完全一样;ELSE_ILET_REG仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是ILET_REG的话,则使用该指令;其他的格式和功能都同ILET_REG指令完全一样;仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUT的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUT指令完全一样;ELSE_MAKE_OUTPUTR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_OUTPUTR的话,则使用该指令;其他的格式和功能都同MAKE_OUTPUTR指令完全一样;ELSE_MAKE_ROM仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROM的话,则使用该指令;其他的格式和功能都同MAKE_ROM指令完全一样;ELSE_MAKE_ROMR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_ROMR的话,则使用该指令;其他的格式和功能都同MAKE_ROMR指令完全一样;ELSE_MAKE_KNOWS仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWS指令完全一样;ELSE_MAKE_KNOWSR仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是MAKE_KNOWS的话,则使用该指令;其他的格式和功能都同MAKE_KNOWSR指令完全一样;ELSE_READ_RESULT仅用在IFxx…THEN…ELSE…ENDIF语句,如果在ELSE位置的第一个指令是READ_RESULT,则使用该指令;其他的格式和功能都同READ_RESULT指令完全一样。
3.如权利要求2所述的人工智能机,其特征在于所述的面向自然语言处理的中央处理单元NLPU,主要完成自然语言的符号处理,其内部包括ANL指令数据的缓存器存放NLPU通过ANL指令数据总线从外部的ANL语言描述库读取的ANL语言指令数据;指令译码器对通过ANL指令数据总线送到指令码缓冲器中的指令码进行译码,并直接控制整个NLPU的所有与ANL指令执行过程相关的工作部件;时序控制单元以外部的时钟脉冲为驱动,为指令译码器的操作和其它的在操作过程中需要时序的控制部件提供操作时序;算术运算器主要完成算术运算操作,包括加、减、乘、除,以及与、或、非等的逻辑基本运算;字符运算器用来完成字符运算的各种操作,包括比较字符串判断,字符串的加操作、提取指定个数的字符串、清除字符串某一端的指定个数的字符、计算字符串长度等;运算操作数寄存器1用于暂时存放进行数值或是符号运算的第一个运算操作数;运算操作数寄存器2用于暂时存放进行数值或是符号运算的第二个运算操作数;结果寄存器用于暂时存放进行数值或是符号运算的结果,以及暂存其他的在处理过程中的信息;字符-数值变换器1在进行算术运算时,对存放在运算操作数寄存器1中的字符型数据转换为数值型的数据;字符-数值变换器2在进行算术运算时,对存放在运算操作数寄存器2中的字符型数据转换为数值型的数据;数值-字符变换器在进行算术运算时,对运算后的数值型数据再转换为字符型的数据;行号编解码器在对产生悬挂或者产生生成句的扩展词指令所保护的现场进行恢复时,将保护的扩展词指令的指针所在行的符号型的数据解码为数值型的数据,并加载到ANL指令行指针产生器中;多路选择器1该多路选择器受指令译码器控制,对送到NLPU的字符型数据线上的数据,选择算术运算器或字符运算器的结果进行输出;句子指针产生器根据当前句的指针值,生成下一个句子指针的值;句子指针缓存器该缓存器直接存放由句子指针产生器生成的有效的句子指针值;词指针产生器根据当前的词指针的值,生成下一个词的指针的值;词指针缓存器该缓存器直接存放由词指针产生器所生成的有效的词指针值;目标译码器对需要访问框架缓存器的ANL指令中的操作数1进行译码,并根据上下文访问的句位置、词位置以及属性名所合成的内容产生符号地址总线的地址值;主指针是目标译码器中的一个缓存单元,保存当前所处理的扩展词指令的序号;浮动指针是目标译码器中的一个缓存单元,动态地保存当前所处理的扩展词指令的以主指针为基础的序号;直接地址总线缓存器对寄存器寻址操作时,直接输出指定寄存器编号的直接地址,及存放其他的需要进行直接地址驱动操作的地址数据;直接数据总线缓存器暂时存放2进制数据;符号地址总线缓存器存放NLPU在以符号型数据作为地址进行外部访问的符号地址信息;符号数据总线缓存器主要是存放NLPU在以符号型数据作为数据进行外部访问的符号数据信息;输出文本接口在处理过程中的把需要产生输出结果的信息通过该接口输出;外部通讯接口用于与外部的传感器和驱动器的信息传递,及输出人工智能机的运行信息;ANL指令行指针产生器自动依次加1产生执行ANL指令时的行地址信息,其内容是数值的地址;主流程/悬挂流程控制部件用于切换主流程和悬挂流程的扩展词指令的执行;文本转写器用于将人工智能机的文本缓存中的内容按照句子序号、词的序号和框架缓存器的格式写入到框架缓存器中,及对地址译码器的编码工作;句子提取器根据当前的句子指针产生器中的指针值,从框架缓存器中提取该指针指定的句子;句式提取器根据当前的句子指针产生器中的指针值,从框架缓存器中提取该指针指定的句式;词提取器根据当前的词指针产生器中的指针值,从框架缓存器中提取该指针指定的词;地址译码的编码写入器对不同的句子序号,不同的词序号及其在框架缓存器或生成句工作区缓存的物理地址编码操作后写入到地址译码器中;当前流程状态标志表明当前的处理状态是处在主执行流程还是悬挂执行流程;当前内容标志表明当前处理的扩展词指令ANL描述体的对象是句子、句式或者词;生成句标志表明当前执行的生成句是由句子、句式、或是词引导的;当前扩展词指令的工作区地址指针表明主流程中的当前扩展词指令在综合工作区的物理地址,及执行悬挂流程中产生的生成句的扩展词指令在综合工作区的物理地址;扩展词指令的工作区长度参数量单元该单元中保存每一个扩展词指令在综合工作区中所占的物理空间长度;加法器1该加法器通过把当前扩展词指令的工作区地址指针的值同扩展词指令的工作区长度参数量单元的内容相加,得到在综合工作区中当前扩展词指令的工作区指针的下一个扩展词指令的工作区指针;加法器2将当前扩展词指令工作区地址指针值与来自不同偏移量单元的值相加,得到寄存器在综合工作区中的绝对物理地址的值;IF偏移量单元保存扩展词指令的在综合工作区中所占的物理空间中的IF堆栈区最开始地址相对于该扩展词指令的最开始物理地址的偏移量;CALL偏移量单元保存扩展词指令的在综合工作区中所占的物理空间中的CALL堆栈区最开始地址相对于该扩展词指令的最开始物理地址的偏移量;PUSH偏移量单元保存扩展词指令的在综合工作区中所占的物理空间中的PUSH堆栈区最开始地址相对于该扩展词指令的最开始的物理地址的偏移量;自定义寄存器偏移量单元用于保存扩展词指令的在综合工作区中所占的物理空间中自定义寄存器区的最开始地址相对于该扩展词指令的最开始的物理地址的偏移量;通用寄存器偏移量单元保存扩展词指令在综合工作区中所占的物理空间中通用寄存器区的最开始地址相对于该扩展词指令的最开始的物理地址的偏移量;IF调转地址堆栈指针产生器产生当前扩展词指令执行中所需的IF堆栈区的指针值;CALL调转地址堆栈指针产生器产生当前扩展词指令执行中所需的CALL堆栈区的指针值;PUSH调转地址堆栈指针产生器产生当前扩展词指令执行中所需的PUSH堆栈区的指针值;零数据产生器对加法器2上的来自堆栈指针的数据赋值为零;产生悬挂的扩展词指令地址堆栈区该堆栈区为NLPU内部的一个支持堆栈操作的存储区,保存产生悬挂的扩展词指令在综合工作区缓存中的物理地址;产生悬挂的扩展词指令地址堆栈指针该堆栈指针用来指明产生悬挂的扩展词指令地址堆栈区中当前的最后进入堆栈保存的那个扩展词指令的地址所在单元的位置;产生悬挂的扩展词指令计数器记录在整个处理过程中产生的悬挂的扩展词指令的个数;比较器该比较器用于在执行悬挂工作区的内容时,判断产生悬挂的扩展词指令地址堆栈指针通过不断加1的值,是否等于产生悬挂的扩展词指令计数器中的值;产生生成句的扩展词指令地址堆栈区为NLPU内部支持堆栈操作的存储区域,用于保存出现生成句的扩展词指令在综合工作区缓存中的物理地址;产生生成句的扩展词指令地址堆栈指针指明产生生成句的扩展词指令地址堆栈区中当前的最后进入堆栈保存的那个扩展词指令的地址所在单元的位置,及最后堆栈弹出的那个扩展词指令的地址所在单元的下一个单元位置;根句比较器用于判断当前的外部输入文本的内容是否全部执行完毕;当前内容标志缓存器用于进入悬挂执行流程时保存当前句子、句式、词的内容标志;悬挂消除控制部件用于在执行悬挂流程中向对应地址单元写入清除标志。
全文摘要
本发明公开了一种人工智能机及其实现自然语言理解的方法。该人工智能机直接用自然语言描述其知识库中的知识,并以面向自然语言的汇编语言——ANL语言为基础,通过自然语言理解系统,以扩展词指令的方式对外部输入的自然语言描述的文本内容进行理解,从而使人工智能机能够理解人类用自然语言表达的问题,并能够通过联系上下文的背景知识和常识知识来进行理解,进而解决比较复杂的问题,具有较高的智能水平。
文档编号G06F9/45GK1493980SQ02133300
公开日2004年5月5日 申请日期2002年10月28日 优先权日2002年10月28日
发明者王伟, 王 伟 申请人:王伟, 王 伟