Lpc语法
这个帖子是大略的总结了Lpc的语法特性，不够全面，算是一个子集吧。
⑴．Lpc的数据类型
基本类型：
void,int,float,char
这四种数据类型与C的含义完全一样，不作解释。
复杂类型：
string,mixed,function,object
1．string，字符串类型
Lpc中在语法上支持字符串的加法运算(+)，并且支持string与float和int 的直接
+操作
。如：
string str1="I have";
string str2="dollars";
int number=5;
string output=str1+number+str2+"\n";
那么output是"I have 5 dollars\n"
2．mixed，混合类型
在Lpc中，mixed类型可以指向任何的数据类型，当一个变量被申明成
mixed,MudOS将不对其做任何类型检查。
3．function，函数指针类型
这是Lpc中一个特殊的数据类型，用来指向一个物件上的某个方法。4．object，对
象
这个东西有点像OO中的对象实例，但是具体的又有很多不相似之处，以后的帖子会
另外
详细写出。
复合类型：
array,mapping
1．array，数组
在Lpc中，使用*来申明数组。可以申明为数组的数据类型有：
int,float,string,mixed,object,mapping
LPC对数组的支持比较强，其特性有：
A．数组可以静态的初始化，也可以不确定大小，而使用allocate()这样的efun在运
行中
定义大小。数组初始化的格式：int *aa=({1,2,3,4});,也可以是空的：
int *aa=({});
B．不论数组是如何生成的，都支持+,-运算符操作。
＋运算符：
int *aa=({1,2});
aa=aa+({3,4});
那么aa就成为：({1,2,3,4})
－运算符：
int *aa=({1,2,3,4});
aa=aa-({2});
那么aa成为({1,3,4})；
这个操作符不是那么好用，不用也罢。
C．在Lpc里数组的赋值是传值的，只有是object或者mapping类型的数组，数组元素
是传
址的。
2．mapping，映射
Lpc中mapping的申明和数组一样，可以静态的初始化，也可以动态的分配大小，并
且同
样支持＋运算符。初始化的格式是：
mapping aa=(["key1":1,"key2":"faint"]); ，也可以是空的:mapping aa=
([])；
⑵．函数
Lpc的函数在形式上与C/C++,Java一样，不同的是Lpc支持的对象之间的方法调用用
的操
作符是->，并且实际上是调用了call_other()的efun。在grammer.y.pre翻译时，
不能把
->翻译为"."。比如：
object ob=this_object();
ob->query_name(1);
翻译为：
MudObject ob=this_object();
call_other(ob,"query_name",1);
由于参数表是不确定的，call_other()提供另外一个调用形式：
call_other(ob,({"query_name",1}));
⑶．操作符
Lpc中的操作符有：
=   +   -   *   /   %   +=  -=  *=  /=  %=  --  ++  ==  !=  >   <   
>=  <=  
这些操作符的含义和C都是一样的。不作详细解释。
⑷．流程控制
if ( 表达式 )
{
    指令集
}
if ( 表达式 )
{
    指令集
}
else
{
    指令集
}
if( 表达式 )
{
    指令集
}
else if ( 表达式 )
{
    指令集
}
else
{
    指令集
}
while ( 表达式 )
{
    指令集
}
do
{
指令集
}while(表达式);
switch ( 表达式 )
{
case ( 表达式 ):
    指令集;
    break;
default:
    指令集
}
for( 表达式; 表达式; 表达式 )
return
    结束这次函数的执行
continue
    忽略这次循环
break
    跳出循环体
foreach()循环
foreach ( 变量类型 in 数组 )
比如：
void test()
{
    foreach( object player in users() )//跟shell有点象，:P
    {
        tell_object( player, "hi..just a test." );
    }
}
foreach () 循环对数组中的每个元素，做一次循环。


