修改lua的代码解析

在开发GAL引擎时,为了提高脚本写作效率,本文介绍了如何修改lua源码,特别是在llex.c文件中,通过定制llex函数来将特定符号@解析为echo命令。这一改动允许简化常用功能,增强了lua的脚本解析能力,并且文中还提及了已添加的中文支持的相关代码行。
摘要由CSDN通过智能技术生成

有时候希望在lua中加入自定义风格的代码,例如将某个经常用的函数简化为一个符号,在开发某个GAL引擎时,因为需要大量的用到回显文字的命令,所以希望将该命令简化,可以极大地提升写脚本的效率.例如:

//原有脚本实现
echo("这真是一个糟糕的事情","人物1");
echo("这真是一个糟糕的事情","人物2");
echo("这真是一个糟糕的事情","人物3");
echo("这真是一个糟糕的事情","人物4");
...

//修改后的实现
@人物1:"这真是一个不错的事情"
@人物2:"这真是一个不错的事情"
@人物3:"这真是一个不错的事情"
@人物4:"这真是一个不错的事情"
...

这看起来是一件不错的事,^_^想象一下一个文字游戏,基本上都是文字回显的命令,简化后的效率提升不言而喻.

当然,这就要拿lua(遵循GPL协议)的源码开刀,lua的脚本解析主要在llex.c文件中,通过分析每个字符,提取出关键字,符号,变量等传递给lparser.c检查语法.

而在llex.c中最主要的函数是static int llex (LexState *ls, SemInfo *seminfo),该函数负责分割并解析每个WORD,然后返回给语法检查器,我们需要在这里动手将lua中没有定义的符号@解析为echo命令并将两个参数返回.

//翻译并传递echo命令           
char *str_echo=0,*str_rolename=0;           
int len_echo=0,len_rolename=0;           
int trans_echo_command_step = -1;           
                        
static int llex (LexState *ls, SemInfo *seminfo) {           
  luaZ_resetbuffer(ls->buff);           
                        
  if(trans_echo_command_step!=-1)           
  {           
      switch(trans_echo_command_step)           
      {           
      case 1:   //返回左括号           
          trans_echo_command_step++;           
          return 40;           
                        
      case 2:   //返回echo字符串           
          trans_echo_command_step++;           
          seminfo->ts = luaX_newstring(ls, str
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值