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 == '_') {
. /* identifier or reserved word */
. TString *ts;
. if (ls->current == 'L') {
. next(ls);
. if (ls->current == '"' || ls->current == '/'') {
. read_wstring(ls, ls->current, seminfo);
. return TK_WSTRING;
. }
. save(ls, 'L');
. }
. /* identifier or reserved word */
. do {
. save_and_next(ls);
. } while (isalnum(ls->current) || ls->current == '_');
. ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
. luaZ_bufflen(ls->buff));
. if (ts->tsv.reserved > ) /* reserved word? */
. return ts->tsv.reserved - + FIRST_RESERVED;
. else {
. seminfo->ts = ts;
. return TK_NAME;
. }
. }

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

else if (isalpha(ls->current) || ls->current == '_' || ls->current > 0x80) {
. /* identifier or reserved word */
. TString *ts;
. if (ls->current == 'L') {
. next(ls);
. if (ls->current == '"' || ls->current == '/'') {
. read_wstring(ls, ls->current, seminfo);
. return TK_WSTRING;
. }
. save(ls, 'L');
. }
. /* identifier or reserved word */
. do {
. if(ls->current > 0x80)
. {
. save_and_next(ls);
. save_and_next(ls);
. }
. else
. save_and_next(ls);
. } while (isalnum(ls->current) || ls->current == '_' || ls->current > 0x80);
. ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
. luaZ_bufflen(ls->buff));
. if (ts->tsv.reserved > ) /* reserved word? */
. return ts->tsv.reserved - + FIRST_RESERVED;
. else {
. seminfo->ts = ts;
. return TK_NAME;
. }
. }

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

  1. 怎么让 Lua 5.3.4 支持中文变量名和中文函数名

    1. 在官网下载最新版Lua源码 Lua :Download 2. 解压后进入目录,找到/src/llex.c,打开修改 找到如下内容 修改为下面代码,并保存. default: { if (lisl ...

  2. 给 C# Expression Evaluator 增加中文变量名支持

    由于一些特殊的原因,我的Expression里面需要支持中文变量名,但是C# Expression Evaluator会提示错误,在他的HelperMethods.IsAlpha()里面加上这么一段就 ...

  3. pycharm修改代码模板支持中文输出

    python2.x默认不支持中文输出,需要在py的开头添加 #coding: utf- 在pycharm里面,选项,editor,file and code templates,选择python sc ...

  4. oracle 修改字符集支持中文

    1.登录sys关闭服务 [oracle@t-e ~]$ export ORACLE_SID=kamiltest1 [oracle@t-e ~]$ sqlplus / as sysdba SQL> ...

  5. 【python】python支持中文变量,醉了

    哈哈 = 1 呜呜 = -1 哈哈 + 呜呜 = 0

  6. java中的中文变量和方法

    在网上看到java居然支持中文变量名.方法.这里我只试了变量名和方法,类名这些没有试....真是给力 package com.gxf.fun; public class TestForChinese ...

  7. python趣味——与MS系列编译器一样强大的Unicode变量名支持

    中文变量名,中文函数名,中文类名等,可惜Python2不支持,但在Python3时代,这些都可以完美支持了. def 中文函数(): return 1

  8. wingIDE设置支持中文注释

    用wingIDE快2年了,实在是受不了不支持中文,每次中文都报错,一个小逗号也要查很久,别说中文注释了,在网上找解决办法,原来这么简单! 下面,把破解放大和支持中文支持的方法备份下来,以便以后查看. ...

  9. WingIDE4.1 破解及支持中文设置

    1.下面提供最新版本的破解方法. 先到http://wingware.com/downloads/wingide下载最新版本的IDE. 安装之前,先修改时间到一个月前. 安装 安装之后然后获取试用版的 ...

随机推荐

  1. [蓝牙] 4、Heart Rate Service module

    Detailed Description Heart Rate Service module. This module implements the Heart Rate Service with t ...

  2. jQuery实现的简单文字提示效果模拟title(转)

    来源 http://www.cnblogs.com/puzi0315/archive/2012/10/17/2727693.html 模拟title实现效果,可以修改文字的样式,换行等. 文件下载: ...

  3. Struts2 validate校验

    一般的,用户注册的时候,我们需要校验一些用户提交过来的参数. 一般有两道屏障,一是在前台页面上使用js进行验证,直接杜绝了不正常信息的提交.二是将提交过来的信息进行验证,不通过则返回注册页面并显示错误 ...

  4. jquery的一些用法

    一.选择器 单选按钮:$(this).find(".answer").find("input[name='answer_" + id + "']:ch ...

  5. CodeForces 689C Mike and Chocolate Thieves (二分+数论)

    Mike and Chocolate Thieves 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/G Description ...

  6. 原生js中slice()方法和splice()区别

    slice()方法和splice()方法都是原生js中对数组操作的方法. slice(),返回一个新的数组,该方法可从已有的数组中返回选定的元素.例如:arrObject(start,end),sta ...

  7. ASP.NET MVC - Entity Framework

    ASP.NET MVC - Entity Framework 实体关系 关系是某个实体(表)的一条记录对应于另一个实体(表)的一条或多条记录. 一对多关系 单方面的包含关系称为一对多,而一对多和一对一 ...

  8. day34 基于TCP和UDP的套接字方法 粘包问题 丢包问题

    TCP 基于流的协议 又叫可靠性传输协议 通过三次握手 四次挥手 来保证数据传输完毕 缺点效率低 正因为是基于流的协议 所以会出现粘包问题粘包问题:原因一:是应为数据是先发送给操作系统,在操作系统中有 ...

  9. HDU - 5033: Building(单调栈 ,求一排高楼中人看楼的最大仰角)

    pro:现在在X轴上有N个摩天大楼,以及Q个人,人和大楼的坐标各不相同,保证每个人左边和右边都有楼,问每个人能看到天空的角度大小. sol:不难想到就是维护凸包,此题就是让你模拟斜率优化,此处没有斜率 ...

  10. 第8课 列表初始化(3)_防止类型收窄、explicit关键字

    1. 防止类型收窄 (1)类型收窄:指的是导致数据内容发生变化或者精度丢失的隐式类型转换. (2)类型收窄的几种情况: ①从浮点数隐式转换为整型数,如int i=2.2; ②从高精度浮点数隐式转换为低 ...