Score
0
Watch 1 Star 2 Fork 1

hiwii / hiwiiLangJavaApache-2.0

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
海微语言是介于人们日常使用的自然语言和计算机语言之间的一种语言。目标是建立一种适合于人机语言交互的语言。 spread retract

https://gitee.com/hiwii/hiwiiLang

Clone or download
Syntax.md 29.51 KB
Copy Edit Web IDE Raw Blame History
hiwii authored 2020-09-20 17:54 . a

语言概述

符号组合

语言由基本符号组成。不同的自然语言由不同的字符集组成。比如英文由26个英文字母组成,而中文由几万个汉字组成。构成语言的基本符合不仅包括字母和中文,也包括特殊字符,比如标点符号等。

基本符号组合成了词汇。词汇是自然语言中能够表示真实意义的最小单位。英文等字符语言中,除少量字符可以单独使用(比如"I",“a”)以外,字符通常不是词汇。而汉语中的每个字符也都可以作为独立的词汇。

词汇的顺序组合形成语句。而语句的顺序组合又形成了段落。

表达式

表达式是能够表示特定意义的符号组合。语言是表达式的有序组合,表达式是语言的组成部分。

一个词、一句话、一段话、一个章节、一本书都可以认为是一个表达式。

自然语言最初必定是以口语形式出现的,随着字符的确定,才出现了书面语言。在人类有记录以来的数千年文明中,书面语言并没有进化出和口语太大不同的 地方。因此,自然语言无论口语还是书面语言,仍然以词汇作为基本组成部分。而计算机语言中,除了词汇,函数也是基本表达式,此外,小括号、中括号、大括号等进一步完善了计算机语言的表达能力。 比如:

f(x)

这个表达式是数学和计算机语言中最常见的表达式之一,但是在自然语言中却难以见到。

三种表达式

自然语言的词汇往往分为实词和虚词。实词包括名词、动词、形容词、数词、量词、代词六类。虚词包括副词、介词、连词、助词、叹词、拟声词六类。(在一些语法书中,副词实词,或者半虚半实的词)

是自然语言单一的词汇形式导致不得不把词汇分为实词和虚词,并进一步分为十几种词汇。

表达式的描述能力大大超过词汇,没有必要像词汇一样分为十几种。

语言表达式可以只分为三种,即对象表达式、状态表达式和动作表达式。客观世界的对象、状态、动作是语言的表示对象。因此三种基本表达式分别了对应了实词中的名词、形容词和动词。数词、量词、代词都可以看作是名词表达式。

所有的表达式都表示有真实的意义。自然语言中,连词、介词等虚词不能单独表示真实意义,必须和实词结合才能表示真实含义。

虚词可以以函数或映射的形式存在于表达式之中。比如:“我和你”,可以表示为函数形式:和(我,你)。因此表达式没有虚词形,而是通过函数形式来替代虚词形式。

根据表达式表示的目标,对象表达式有三种,分别是具体对象表达式、抽象表达式和关系表达式。

海微语言的三类表达式,即计算表达式、判断表达式和动作表达式,分别对应了实词的名词、形容词和动词。而自然语言中,还有数词、代词也是实词。汉语中实词还有量词,而英语中并没有量词。这些实词在海微语言中没有对应的表达式。

海微语言中有数的概念,比如:1,2.1, 1/3等。但是海微语言并没有把数定义为特殊的词汇,仍然看作是计算机表达式,属于名词。这个和计算机面向对象语言的思想是一致的。面向对象语言认为一切皆对象。数也是对象,也是真实的存在,这在罗素的《数学与哲学导论》和彭罗斯的《皇帝新脑》中都有叙述。

计算机语言虽然把数看作和桌子、房子等一样的实在对象。在使用中,人们也用引用名词的方法来引用数。比如:我的房子,和我的身高。房子是一个实在对象,而身高是一个数。

在表示方式上数和其它表达式有区别的,海微语言和大部分计算机一样,数必须是以阿拉伯数字表示的。

海微语言和英语一样,没有量词。

代词在计算机语言中也消失了。名词分为关系、对象和抽象,代词就是一种关系。计算机语言中的变量也是一种关系。

交互语言

只是由词汇构成的语言在当前是难以成为真正的人机交互语言的。人类当前的书面语言与口语类似,都是以词汇为基本单位。这种语言形式妨碍了自然语言进一步成为人机交互语言。

人工智能和自然语言处理技术的发展,使人机语言交互在一定程度上是可行的,但是试图通过自然语言处理来实现人机语言交互还有很长的路要走。自然语言普通存在歧义、一词多义、语法复杂、习惯性用法多、不够严谨等多方面的问题。因为这些问题,当前情况下,自然语言并不适合作为一种人机交互语言,通过人工智能使自然语言成为交互语言是一条错误的道路。

目前的计算机语言基于传统的计算机原理。传统的计算机原理基于二进制代码,所有的计算机语言是在满足更好的转换为二进制代码,从设计原理上,计算机语言是面向程序员的,而不是面向普通用户的,也不注重人机语言交互。用户和程序员都习惯了图形交互界面,逐渐失去了人机交互的需求。

本语言希望从哲学的世界观出发,设计一种任何人都能熟练掌握的人机语言,不仅作为人机交互语言,同时更好的应用人与人的交互、机器与机器的交互。

若要实现上述目标,该语言必须结合自然语言和计算机语言的特征,设计易于理解的交互语言。为此,需要设计一套简单、易于理解和使用的表达式系统。

只是由词汇构成的自然语言不能用于人机交互的主要问题是语法结构混乱。目前以词汇为基本组成方式的自然语言,如果要获得语言的意义,必须理解每一个词汇的属性和含义词。同时词汇的组合顺序也很重要,不同解析的顺序将造成歧义。

引入函数等多种形式的表达式可以很好的解决上述问题。通过合理的表达式设计,比如在主语和谓语之间加入特殊符号,可以在理解每一个词汇含义之前,就能够清楚语句的主语、谓语等成分,完全解决自然语言的歧义问题,并能够方便机器的解析与存储。

函数

函数是一个数学概念,表示一个非空集合到另一个非空集合的元素映射关系。通常用f(x)表示。映射并不一定只有一个参数,可以有多个参数,表示为:f(x1,x2,x3,......)

海微语言中,计算动作正是完成了这个数学过程。

自然语言并没有类似函数这样的表达式,这是因为当前的自然语言是从口语发展而来。但是自然语言的一些词汇起到了函数的表示作用,一些虚词,如介词、连词。

函数的表示必然伴随着一些特殊符号的使用,如果括号,逗号。口语自然难以表示这些特殊符号,而口语的顺序表达形式也不支持括号的使用。但是在书面语言有数千年发展的今天,函数应该引人书面语言,而不是继续沿用口语表达的词汇顺序排列形式。

函数在计算机语言中大量使用。海微语言中,函数表达式是基本表达式之一。

表达式可以作为函数的参数。数学和计算机中经常引用的lambda表达式正是以表达式作为参数的。

为了区别表达式和真实对象,海微语言引人了映射表达式。

映射和函数在数学中具有相同的意义。但是在海微语言中,函数表达式和映射表达式是不同的。函数表达式的参数只能是对象,而映射表达式的参数只能是表达式。

它们的格式是类似的,如下:

函数表达式:f(x1,x2,x3,......)

映射表达式:f[x1,x2,x3,......]

java、C等计算机语言中,函数定义是有返回类型的,如:

public int f(x){

....

}

海微语言的函数定义中,通常是没有类型的。这和海微语言的运行方式有关。java等面向对象语言在编译和运行中需要检查数据类型,而海微语言中,函数是动态绑定于对象的,因此不需要检查对象的类型。

从理论上看,我们也没有必要绑定函数的类型。函数的三要素是:源集合、目的集合、函数体。三者是紧密相关的,如果确定了其中的两个,则剩余的一个就可以自然确定了。如果确定了源和函数体,则目的集合也就自然确定了。同意,如果确定了源和目的集合的一一映射,则函数体也就确定了。如果是规则的映射,则函数体可以用表达式表示,在极端情况下,函数体是无法用表达式表示的。

语法初步

海微语言确定了表达式语法,表达式分为三类:计算表达式、判断表达式和动作表达式。

三种表达式从语法上看是相似的,根据执行环境最终确定是作为那种表达式执行。系统最初默认接收到的表达式是动作表达式,根据执行语法的判断,进行计算或判断动作。

字符串和数

字符串和数是所有语言中都必须处理的表达式,海微语言也不例外。字符串的表示方法和java\C等计算机语言中的字符串处理类似。

海微语言中,没有java/C语言中的int/float/double等数。海微语言根据数学习惯,数的表达式分为四种,即:整数、分数、小数、科学计数。

整数:如3,56,8239,-36等。整数没有长度限制,可以写123456789100021384495698437698560808343794739748938

小数如:2.3,1.23445

分数必须符合小时的表示规则,分子和分母都必须是整数。如:1/2,5/8。分数的分子、分母和"/"之间不能有空格,否则"/"作为除法符号处理。

科学计数必须符合数学上科学计数的规则,值的部分必须在[1,10)区间内,包括1,不包括10。可以是整数,也可以是小数。指数部分必须是整数,可以是正值,也可以是负值。

如:

3e2 //表示3的2次方

1.45e-3

三种基本表达式

标识符(identifier)、函数表达式(function)、映射表达式(mapping)是三种基本表达式。

标识符

identifier标识符相当于自然语言中的词汇。identifier的语法规则和一般计算机语言相同,不能以数字开始,必须以英文字母或其它语言的一般字符开始。identifier的其它字符可以是一般字符。有一个特殊情况,和一般计算机语言类似,下划线"_"不是特殊字符,可以作为一般字符放在identifier的任何位置。比如:

"abc"

"变量1"

"_1"

函数

函数表达式的格式如下:

函数名(参数1,参数2,参数,...)

函数名是一个identifier,函数表达式可以有一到多个参数。计算机语言中,通常允许没有参数的函数,比如:f()。海微语言规定,函数至少有一个参数,但是允许参数值是空。f()在海微语言也是允许的,不是表示没有参数的函数,而是表示有一个空值参数的函数。

映射

映射在数学中和函数是相同的含义,二者是等价的。

映射表达式的格式如下:

函数名[参数1,参数2,参数,...]

映射表达式与函数表达式在格式上的区别只是映射表达式使用"[]",而不是"()"。

虽然二者参数表达式是近似的,但是表示的含义是不同的。函数表达式的参数表示具体的对象,而映射表达式的参数表示一个表达式。

作为映射参数的表达式还未确定是动词、形容词或名词,由映射表达式定义。

函数表达式是映射表达式的一种特殊形式,当映射表达式的参数表示对象,那么映射表达式的含义与函数表达式相同。

括号表达式

海微语言有三种括号,小括号()、中括号[]、大括号{}。

函数表达式中包括小括号表达式,映射表达式中包括中括号表达式。但是括号表达式是可以独立使用的。

在计算机语言中,大括号表达式是常用的,通常用来表示程序。海微语言也支持大括号表达式作为程序。

括号表达式参数之间用","分隔。最后一个表达式不能使用","。但即使最后多余一个",",系统也不会报错,因为表达式可以为空。

举例如下:

(x+y)

[1,2,3]

{x:=1, //和java一样,可以任意换行,不影响程序的执行。

y:=2}

[1,2,] //包含3个参数,最后一个为空

主谓表达式

由于有三种基本动作,计算、判断和动作,因此有三种主谓表达式。主谓表达式的主语和谓语之间用连接符分开。三种表达式的不同只在于主谓连接符不同。判断由于有肯定判断和否定判断,因此判断语句的主谓分隔符有两个,肯定的和否定的。计算机表达式的主谓连接符号用".",动做表达式的主谓连接符号用"#",肯定判断用"$",否定判断用"!"。

汽车.发动机 //计算表达式

他#踢足球 //动作表达式

气球$红色 //肯定判断表达式

气球!红色 //否定判断表达式

主谓表达式对谓语有严格的规定。主语可以是任何合法的表达式,而谓语必须是三种基本表达式之一。

状语

在三个基础表达式之后,可以跟一个大括号表达式,表示状语。

如:

Project{exp1,expr2,...}

f(x){exp1}

m[x]{exp1}

海微语言中,状语是修饰谓语的,因此一个典型的语句是主语+谓语+状语。

操作符

除三种基本表达式外,其它表达式都可以看作是函数表达式或映射表达式的变形。

操作符表达式分为一元操作符表达式和二元操作符表达式。

所有的一元和二元操作符都是和一个函数或映射表达式等价的。一元和二元操作符表达式是函数或映射表达式的语法简化形式。每一个操作符都有对应的标识符,用于转化为函数或映射表达式形式。

如:1+2 //plus(1,2)

5-2 //minus(5,2)

-3 //minus(3)

多元的操作符表达式可以表示为嵌套的二元表达式。比如:

1+2+3 //等价于1+(2+3)

操作符列表

操作符 名称
"" Space
=> lambda
; SEMI
: describe
:= assign
= EQ
? HOOK
| or
& and
!= NE
== LEQ
:: turn
<- contain
-> belong
<= LE
>= GE
< LT
> GT
<> LTGT
- minus
+ plus
/ divide
% Percent
* multiply
<< LSHIFT
>> RSHIFT
|| SCor
&& SCand
` FENG
~ tilde
@ AT
^ pow

优先级

操作符是有优先级的,优先级高的操作符先于低优先级操作符执行。最常见的是先乘除后加减。

1+2*3 //相当于 1+(2 * 3)

语言示例


疑问

疑问表达式分为两种:计算疑问和判定疑问。

ask[3+4]
whether["abc" = "efg"]
//判定分为肯定和否定形式,上述判定表达式的否定形式如下:
whether[!("abc" = "efg")]

ask和whether疑问是计算和判定的应用。首先二者是一个动作请求,请求系统在完成疑问处理后,返回结果。在交互环境中,单独的计算和判定是不能成为语句的。

目前计算机语言大都没有考虑这些问题,计算、判定和动作是不区分的,独立的计算作为语句也是合法的,但是却得不到任何结果。比如java语言中:

"abcde".substring(3);

这是一个计算,如果没有赋值或者使用,这个语句是无用的,但是这个语句在java中是可以合法存在的。

这种情况在海微语言中是不存在的。计算表达式不能单独作为语句存在,必须作为主语或参数使用。

分支

if[true,ask[3]]
if[3>4,ask[5],ask[6]]

number:运算和判断

加减乘除,大小关系

ask[2+3]
ask[5-3*4]

字符串:运算和判断

ask["abc"+"efg"]   //字符串相加
whether["abc" > "efg"]  //比较大小

程序

变量

变量都是identifier,随runtime执行确定生命范围。 有三种类型,

variable:指向对象

var[x, Integer]
x:=3
ask[x]  //3
//或者,像传统方式一样
Integer x
x:=3
ask[x]
//或者,包含条件的变量
Integer x{x>0}

boolean:指向true/false

>boolean[boo]
>whether[boo]
Null
>boo::false
>whether[boo]
false

expression:指向表达式

express[exp, 3+4]
ask[exp]

refer

格式:refer[varName, Value]

与变量定义不同,refer参数只能表示固定的对象,不可改变。

refer[val, 3] 

在C语言中,常量的定义有以下方式

#define NUM 3.14159 //常量宏
const doulbe Num = 3.14159; //此时并未将Pi放入ROM中 ......

refer语言更像define方式,没有设定常量的类型。而const方式只是在变量定义的基础上增加了修改限制。

变量作用域

变量定义后,只有所在模块及子模块能够访问,在模块外无法访问。

>exec("test1.hiw")
//以下是执行文件test1.hiw的内容
{
	var[x, Integer],
	x:=3,
	{
			var[y, Integer],
			y:=5,
			ask[x],                //可以访问
			ask[y]                 //可以访问
	},
	ask[x],             //可以访问
	ask[y]                 //不可以访问
}

执行程序

最简单的程序是指令的顺序执行。

{ask[3],ask[4]}

循环

var[x, Integer]
x:=3
while[x>1, x:=x-1]
ask[x] //x=1

for循环

for[x:=1,x < 10, x:=x+1,ask[x]]

for循环的循环参数,执行体可以访问,但是不允许修改。而java中是可以修改的。

流程控制

skip

当顺序执行的程序遇到skip指令,则退出执行,skip以后的指令不会执行。

{ask[3],ask[4],skip,ask[5]}  //只输出3,4

break

for[x:=1,x < 10, x:=x+1,{ask[x],if[x=5, break]}]

return

是动作程序的结束语句。当动作执行遇到return,结束当前动作程序,返回。

{ask[3],ask[4],if[3>2, return],ask[5]} //只输出3,4

return[参数]

是计算程序的结束语句。当计算过程遇到return[参数],计算参数表达式,返回参数表达式表示的对象值。

ask[{var[x, Integer], x:=3, return[x+2]}] //结果5

decide[参数]

是判定程序的结束语句。当判定程序遇到decide,结束当前动作判定过程,返回decide参数表示的判定结果。

whether[{var[x, Integer], x:=3, decide[x > 4]}] //结果是false

throw(type)

except[e, Exception.new]
throw(e)

表达式设定

英语中,定义的名词和动词形式是不同的,分别是definition和define,但是汉语中,只有一种形式:定义。为了区分两种不同形式,本文中,定义指名词形式(definition),设定是动词形式(define)。

表达式的含义是通过系统设定功能实现。

表达式可以表示为对象、状态、动作、关联和抽象。 其中,对象、关联和抽象都是名词性质。

设定语言一般由两个表达式组成,前一个参数是需要设定的表达式,后一个参数是表达式的性质。 格式如下:

define[表达式1, 表达式2]

"表达式1"只允许是三种基本表达式形式,即:

  • id表达式,如:abc, a1, 小明
  • 函数表达式,如:f(x)
  • 映射表达式,如: define[参数]

设定抽象

自然语言中,大部分名词都是抽象名词。如果设定表达式没有参数,默认该表达式就是一个抽象定义。

define[People]  //当父类是Object,可以省略。等同于:define[People, Object]

对象

define[three, Object:3]  //ask[three] 结果是3

action

define[act1, Action]   //设定act1为动作表达式

Link

define[age, Link:Integer]
define[f(Integer), Link:Integer]  //设定一个函数表达式为Link。

Link不同于数学中的映射。

两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素a,B中总有有唯一的一个元素b与它对应,就这种对应为从A到B的映射。 对于A中不同的元素,在B中不一定有不同的象;比如:|x|,1和-1在目标集合中的映射都是1。

State

define[tall, State]  //设定tall作为一个状态表达式。

表达式可用性

状态可用

maybe[expr1, expr2...]

声明(declare)

计算、判定和动作是对象收到信息的后响应方式。使用声明指令可以用表达式来表示响应的具体执行过程。该执行过程就是计算机程序。

Caculation

define[f(Integer), Link:Integer] //如果已设定,请省略
declare[Calculation:f(Integer x), x+1]   //ask[f(3)]

Decision

define[compare(Integer, Integer), State] //如果已设定,请省略
declare[Decision:compare(Integer x, Integer y), decide[x > y]]   //if true when(x>y), else false
whether[compare(5, 3)] //return true

Action

define[act1, Action] //如果已设定,请省略
declare[Action:act1, ask[4]]
act1   //输出结果 4

抽象

具有相同特征的对象成为一个集合,这些集合命名为抽象。抽象是分级的,最高级的名词是对象,对于对象的具体化形成了次一级的抽象。

抽象因对象集合而产生,但是抽象并不依赖对象存在,即存在不包含对象元素的抽象。抽象是一种独立的存在。对于语言而言,抽象是最重要的表示目标。

定义是特殊的抽象。系统中的定义是严格按照设定顺序排列的,一个子定义只能有一个父定义;对于同级的定义,一个对象只能从属于一个定义,不能从属于多个定义,即同级的定义是没有重合域的。

分类和定义的设定方法是一致的,但是分类是另外一种抽象方法,一个对象可以同时从属于同一级的多个类。比如:

定义

define[People]

子定义

define[Police, People]
define[动物]
define[脊椎动物, 动物]
define[鸟类, 动物]

条件定义

条件定义的表达式:抽象{条件}

条件可以是多个表达式。如:抽象{条件1,条件2}

define[哺乳动物, 脊椎动物{胎生}]
define[高个老人, People{tall, age >60 }]

定义之间的关系

//whether[defined[Police]]
whether[Police->People]
whether[哺乳动物->动物]

获得父定义

ask[哺乳动物.parent]

获得子定义

ask[动物.child]

分类

分类设定的表达式必须是标识符(identifier)。类可以独立存在,或者属于一个定义。一个对象可以属于多个类,一个类也可以属于多个类,不同的类之间存在从属关系。

define[expression, Class]
define[expression, Class:Definition]
//如
define[className1, Class]
define[People]//如果未定义People, 已定义忽略
define[className2, Class:People]

描述

定义和分类的描述与对象相同。比如:

define[矩形]
define[长, Link:Number]
define[宽, Link:Number]
矩形$Statement[长=宽]

陈述句的另外一种形式,"有"

define[翅膀]
鸟类$has[2, 翅膀]  //鸟类有两个翅膀

系统定义

系统操作

创建对象

创建对象是一个计算,结果是动态的返回一个对象。create计算的参数是一个对象描述表达式。

格式:create[对象描述表达式]]

对象描述表达式= 定义/类 name{描述}

define[obj1, Object:create[Object]]    //创建一个Object,并命名obj1
define[People] //如果已设定定义People,请省略
define[小明, Object:create[People]]
create[People{age:=10}] //如果未定义age,define[age, Link:Integer]
create[People name{描述}] 

新建对象

主语.new

当主语是定义或类,new动作新建了一个相应的对象。与create对象不同的是,new动作产生的对象是临时对象。

如:

People.new 
People{age:=10}.new
refer[v1, People.new]

assign

设定了关系表达式后,就可以直接赋值

define[val, Link:Integer]
assign[val, 10]  //ask[val] ,结果是10

turn

define[st1, State]
turn[st1, true]  //true
turn[st1,  3> 2]  //结果是判定表达式 3>2,最终是true

对象描述

对象构成

link

对象#link[目标对象, link表达式]

assign

小明#assign[age, 10]
ask[小明]   //Police{age:10}

turn

小明#turn[tall, true]  //小明是高的。
Police.
ask[Police.that]
再生成一个对象
define[小强, Object:create[People]]
小强#assign[age, 20]
小强#turn[tall, false]
查询
ask[People.all]

条件查询

ask[People.select{age>15}]

条件查询

ask[People.select{[name, address], age>15}]

domain

define[age, Link:Integer]
setDomain[age, age > 0]

describe

一些表达式用于表示一些抽象的真实存在。比如函数的定义域和值域。这些抽象的真实存在只能用表达式描述,而不能赋值。

describe[Domain.age, expression]

集合名词

Set

集合元素不能重复,集合没有逻辑顺序

refer[set0, Set.new]
set0#add(1)
set0#add(2)  //ask[set0]  结果是:[1,2]
set0#remove(1)

List

同集合不同,List有顺序,因此有插入方法。

>refer[lst, List.new]  //新建一个List,并命名为lst。
> lst#add("abc")   //在lst中增加一个元素"abc"
> ask[lst]
  ["abc"]
  lst#remove(0)   //删除第一个元素。与java一样,序数一般以0开始。
  lst#add("abc") 
  lst#add("def") 
  lst#add(1, "123")      //["abc", "123", "def"]在位置1之前插入一个元素

在这个例子中,没有像通常计算机语言中一样新建一个变量,而是建立了一个引用。引用类似于java中的静态变量。但是静态就是静态,这和变量的含义是相违背的。因此海微语言中,没有静态变量。引用表示一个指向对象的id表达式。java中,变量或者静态变量都必须有类型。海微语言中,对象和类型是不同的。

Map

Array

数组是有序的元素序列。数组维度从1维到n维(n为大于1的整数)。与List不同,Array是定长的。

数组下标从0开始。数组的定义需要定义长度,格式如下:

Array.new(len)   //len>=1, 下标为0,1,....len-1
//多维数组
Array.new(len1, len2)

Tuple

常见的括号内只有一个参数

定义的修饰

格式:主定义.修饰定义

表示主定义下具有修饰定义的集合。比如:

动物.List //动物和List是不同的定义。

类似的语法在对象中使用时,含义不同。"小明.书包"表示从属关系。

java和C#都用List<T>的形式表示List泛型。海微语言中,List是一个定义,

Exception

Exception是系统定义,通过new可以返回Exception对象。new计算可以有参数,也可以不带参数。当有两个参数,第一个参数是错误码,第二个参数是错误信息。只有一个参数时,表示错误信息。

Exception.new
Exception.new("message")
Exception.new("1010", "message")

throw(Exception.new("1010", "message"))

文件

ask[file("hiwii\aa.hiw")]

ask[file("hiwii\aa.hiw").content]

exec("hiwii\aa.hiw")

程序执行

define exception

define[Error1, Exception]
define[childErr, Error1]

状语

陈述

陈述句用于描述对象的状态,关于对象当前状态的描述已在前面讲述。但陈述句更多的是与时间有关的状态描述,时态的描述是各类语法的主要内容。

自然语言通常把语言的成分分为主谓宾三个主要部分,定语、状语和补语是语句的三个辅助部分。

本语言的表达式只有主语、谓语两个主要部分,辅助部分只有状语。陈述句也是由主谓结构组成。前面讲述的主谓语句强调的是动作执行,谓语通常是一个动词。陈述句的目标讲述动作的发生,整个句子是一个状态描述,谓语只是状态描述的内容。

陈述的时态是陈述的重点。在纸质书和口语的时代,陈述的时间基点是指语言陈述发生的时刻。

陈述的时态由两个维度构成,一个是进行状态,一个是时间状态。

进行态:一般、进行、完成、完成进行 时间态:现在、过去、将来、过去将来

//一般do,进行doing,完成done,完成进行been

//现在be,过去was,将来will,过去未来would

执行结果

陈述的结果是改变对象的状态。这种状态不是实时状态,只是记录。

语法

陈述句语法如下:

主语[$或!]时态词[进行态词, 动作表达式]

时态词只能是be,was,will。表示针对动词

动词表达式只能是:identifier、function或mapping表达式,

一般过去时

define[出生, Action]  //如果没有定义动词出生,则需要先做这一步。
小明$was[出生{when:=year("2010")}]   //小明出生

英语通常用did或动词的过去时表示一般过去时,如:Tom worked at school。中文的动词是没有时态的,通常通过状语描述过去的动作,比如:小明昨天早晨走路去学校。

远程调用RPC

本系统支持http远程调用,http的内容是hiwii语言。

系统对象

Comment ( 0 )

Sign in for post a comment