lua支持中文变量名

本文章引用自 http://blog.csdn.net/chrisxie/archive/2008/09/29/2998290.aspx

但有所修正.

默认的LUA不支持中文变量名.

少量修改源代码即可

修改如下:

在lua\src\llex.c中 修改420行-432行内容

原内容

1 else if (isalpha(ls->current) || ls->current == '_') {

2 /* identifier or reserved word */

3 TString *ts;

4 do {

5 save_and_next(ls);

6 } while (isalnum(ls->current) || ls->current == '_');

7 ts = luaX_newstring(ls, luaZ_buffer(ls->buff),

8 luaZ_bufflen(ls->buff));

9 if (ts->tsv.reserved > 0) /* reserved word? */

10 return ts->tsv.reserved - 1 + FIRST_RESERVED;

11 else {

12 seminfo->ts = ts;

13 return TK_NAME;

14 }

15 }

16

修改为:

1 else if (isalpha(ls->current) || ls->current == '_' || ls->current > 0x80) {

2 /* identifier or reserved word */

3 TString *ts;

4 do {

5 if(ls->current > 0x80)

6 {

7 save_and_next(ls);

8 save_and_next(ls);

9 }

10 else

11 save_and_next(ls);

12 } while (isalnum(ls->current) || ls->current == '_' || ls->current > 0x80);

13 ts = luaX_newstring(ls, luaZ_buffer(ls->buff),

14 luaZ_bufflen(ls->buff));

15 if (ts->tsv.reserved > 0) /* reserved word? */

16 return ts->tsv.reserved - 1 + FIRST_RESERVED;

17 else {

18 seminfo->ts = ts;

19 return TK_NAME;

20 }

21 }

22

注意我已经打过PATCH2了,可能和实际情况不大一样..不过,代码逻辑很容易,看下,应该也能明白