修改 Lua支持中文变量名

1. 找到 LuaPlus 工程下的 Lua Source Files 下的 llex.c;

2. 在该文件中找到下面所列函数;

static int llex (LexState *ls, SemInfo *seminfo)

3. 这是 Lua 的语法分析模块的关键函数,它由一长段 switch 构成,在一串 case 后找到 default 分支

4. 在该分支下找到如下代码段,这是一段完整的 if 分支,该代码段负责将符合条件的字符组合识别为 identifier (函数名或变量名)或 keyword (关键字)

else if (isalpha(ls->current) || ls->current == ‘_‘) {
02.          /* identifier or reserved word */
03.          TString *ts;
04.          if (ls->current == ‘L‘) {
05.            next(ls);
06.            if (ls->current == ‘"‘ || ls->current == ‘/‘‘) {
07.              read_wstring(ls, ls->current, seminfo);
08.              return TK_WSTRING;
09.            }
10.            save(ls, ‘L‘);
11.          }
12.          /* identifier or reserved word */
13.          do {
14.            save_and_next(ls);
15.          } while (isalnum(ls->current) || ls->current == ‘_‘);
16.          ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
17.                                  luaZ_bufflen(ls->buff));
18.          if (ts->tsv.reserved > 0)  /* reserved word? */
19.            return ts->tsv.reserved - 1 + FIRST_RESERVED;
20.          else {
21.            seminfo->ts = ts;
22.            return TK_NAME;
23.          }
24.        }

5. 将该段替换为下面这一段即可,其作用在于加入了对中文ASCII字符的识别

else if (isalpha(ls->current) || ls->current == ‘_‘ || ls->current > 0x80) {
02.          /* identifier or reserved word */
03.          TString *ts;
04.          if (ls->current == ‘L‘) {
05.            next(ls);
06.            if (ls->current == ‘"‘ || ls->current == ‘/‘‘) {
07.              read_wstring(ls, ls->current, seminfo);
08.              return TK_WSTRING;
09.            }
10.            save(ls, ‘L‘);
11.          }
12.          /* identifier or reserved word */
13.          do {
14.              if(ls->current > 0x80)
15.              {
16.                 save_and_next(ls);
17.                 save_and_next(ls);
18.              }
19.              else
20.                 save_and_next(ls);
21.          } while (isalnum(ls->current) || ls->current == ‘_‘ || ls->current > 0x80);
22.          ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
23.                                  luaZ_bufflen(ls->buff));
24.          if (ts->tsv.reserved > 0)  /* reserved word? */
25.            return ts->tsv.reserved - 1 + FIRST_RESERVED;
26.          else {
27.            seminfo->ts = ts;
28.            return TK_NAME;
29.          }
30.        }
时间: 2024-09-29 17:02:28

修改 Lua支持中文变量名的相关文章

使用mod_encoding使apache支持中文附件名

本地测试环境为apache2.2.31,PHP5.3.27,操作系统为RHEL6.4x86_64,使用mod_encoding工具使apache支持中文附件名,比如http://www.example.com/合同.rar 1.先修改操作系统的语言环境,使linux本地支持中文,可以查看中文文件名 修改/etc/sysconfig/i18n文件将LANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16"修改为 LANG="z

CImage::Loda 方法加载图片失败,因为vs2013中该方法不支持中文变量

最近用MFC做实验,写个图片处理的程序.基本框架是别人用vs2010写好的,我只是添加一些图片处理的函数方法就行了,但是奇怪的是我一直都不能在上面打开图片. 此bug困扰了我好几天,代码是没有问题的,因为别人电脑上就可以打开图片,为什么我的就不行...而且在CImage中的Load方法调用后,我用isNull方法检查都显示为空,即没有成功加载图片. 然后无意间发现我打开的图片路径名都含有中文,于是我改为纯英文后,果然就没有这个问题了.其实是vs2010上CImage类的Load方法接受中文变量,

修改linux支持中文显示!

安装中文支持包后 编辑  /etc/sysconfig/i18n 将内容改为LANG="zh_CN.UTF-8"SYSFONT="latarcyrheb-sun16"SUPPORTED="zh_CN.UTF-8:zh_CN:zh" 修改linux支持中文显示!

java中的中文变量和方法

在网上看到java居然支持中文变量名.方法.这里我只试了变量名和方法,类名这些没有试....真是给力 1 package com.gxf.fun; 2 3 4 public class TestForChinese { 5 private String 字符串 = "字符串"; 6 7 public void 输出方法(){ 8 System.out.println("这是输出方法!"); 9 } 10 11 public static void main(Stri

数据库--中文表名及字段名的优缺点

今天我在了解某一功能时,发现数据库列名居然是中文的,工作六年多还是一回见到.只记得上学的时候,我们老师说过会出现兼容性等问题,具体已记不清楚了. 我好事的百度了下,整理了各网友给出的答案,希望对大家有帮助. 我们在使用中文的表名和列名的时候,先确认我们使用的数据库是否支持中文表名和列名.例如我最常用的SQL Server,它就是支持使用中文的.现在主流的数据库,对多语言的支持也在日益完善. 下面我们来说说选用中文的适合场景及优缺点. 场景: 1.在不熟悉的领域(机械,医疗等专业)里,英文往往并不

Sqlite-net 修改版 支持中文使用sqlite数据库

最近, 做的一个windows 桌面WPF程序, 需要数据库支持.尝试了 sql server 的开发版,使用EF , 效率太低.后来采用sqlite数据库,中间踩坑无数.但最终完美的解决了这些问题.为了帮助广大同好更好的使用sqlite ,今分享所有相关代码. sqlite , 是一款免费的数据库管理程序.可以嵌入到桌面应用程序.asp.net 网站应用程序中.对于不太复杂软件来说,是个不错的选择. sqlite-net ,是支持codefirst使用sqlite的一段程序. 要在WPF桌面软

centos中文乱码修改字符编码使用centos支持中文

如何你的centos显示中文乱码,只要修改字符编码使centos支持中文就可以了,没有这个文件可以创建它,下面是修改步骤 一.中文支持 安装中文语言包: 复制代码 代码如下: yum groupinstall chinese-support 修改字符编码配置,没有这个文件就创建它: 复制代码 代码如下: vim /etc/sysconfig/i18n 修改后内容如下: 复制代码 代码如下: LANG="zh_CN.GB18030″SUPPORTED="zh_CN.UTF-8:zh_CN

Magento PDF发票,支持中文,以及修改的办法

Magento PDF发票,支持中文,以及修改的办法. 如果让magento的PDF发票支持中文.Magento生成PDF发票.使用的是zend framework的zend_pdf类. 下面是一个简单的,使用zend framework生成pdf文件的用法.[code]<?php...// 创建一个新的PDF文档.$pdf1 = new Zend_Pdf(); // 加载一个现有的PDF文件.$pdf2 = Zend_Pdf::load($fileName); // 从字符串加载并生成PDF文

android 4.4.3上面,联系人的头像默认显示首字母,但是不支持中文字符,修改支持中文

在android 4.4.3上面,联系人的头像默认显示首字母,但是不支持中文字符,如下图: 如果联系人名字的第一位是英文字符(a-z || A-Z),则默认头像将显示该首字母. 如果支持中文时显示第一个汉字,那就happy了. 那就看看如何通过修改源代码来实现这一小功能吧- 我们还是先了解下联系人头像加载的流程吧- 联系人头像加载这个问题还是很有意思的,在Contacts中使用ContactPhotoManager类(严格来讲是这个类的子类)来实现头像的异步加载. 这个类还使用了LruCache