LUA5.2中文函数名支持

我百度了,所有对LUA中文函数名支持的修改,都是基于5.1版本LUA的,所以搞了一个下午,把5.20版本的中文函数名支持给改了出来:
修改方法如下:
第一步:
先找到5.20版本src文件夹中的llex.c文件打开,找到
static int llex (LexState *ls, SemInfo *seminfo) {
这个函数,在它的前面添加如下代码:


//
//
//这是中文函数名添加的函数
//
/*开始添加支持中英文变量名*/  
/*因为LS->current是int类型!*/  


#define USE_CHINESE_NAME   
#ifdef USE_CHINESE_NAME   
#define isChineseCode(charint)   (charint > 0x80)   
#define readxxname(ls) readChinesename(ls)   
void readChinesename(LexState *ls)   
{   
do  
{   
if (isChineseCode(ls->current))   
{   
save_and_next(ls);   
save_and_next(ls); //处理了一个中文字符   
}   
else  
{   
save_and_next(ls); //处理英文字符或者下划线   
}   
} while (isChineseCode(ls->current) || ls->current == '_' || isalnum(ls->current));   
}   
#else   
#define isChineseCode(charint) 0   
#define readxxname(ls) readname(ls)   
void readname(LexState *ls)   
{   
do  
{   
save_and_next(ls); //处理英文字符或者下划线   
} while (isChineseCode(ls->current) || ls->current == '_' || isalnum(ls->current));   
}   
#endif  


//
//
//以上是中文变量名定义函数
//
//

=======================
第二步:
进入刚才的
static int llex (LexState *ls, SemInfo *seminfo) {
函数的内部,找到
default: {部分代码,反它替换为以下代码:(注意括号的对称性)

   default: {
        if (lislalpha(ls->current)|| isChineseCode(ls->current)) {  /* identifier or reserved word? */
          TString *ts;
  readxxname(ls);   
  ts = luaX_newstring(ls, luaZ_buffer(ls->buff),   
  luaZ_bufflen(ls->buff));   


  //
  
          seminfo->ts = ts;
          if (isreserved(ts))  /* reserved word? */
            return ts->tsv.extra - 1 + FIRST_RESERVED;
          else {
            return TK_NAME;
          }
        }
        else {  /* single-char tokens (+ - / ...) */
          int c = ls->current;
          next(ls);
          return c;
        }
      }
=======================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值