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. 醒醒!Python已经支持中文变量名啦!

    最近,我在翻阅两本比较新的 Python 书籍时,发现它们都犯了一个严重的低级错误! 这两本书分别是<Python编程:从入门到实践>和<父与子的编程之旅>,它们都是畅销书,都 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. wingIDE设置支持中文注释

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

随机推荐

  1. build dynamic libraries for iOS and load them at runtime

    编译了libmt.dylib, 和 test 程序调用,均正常.在xcode中显示调用正常,隐式调用则出现问题. 提示 dyld: Library not loaded. 即使存在在/usr/lib/ ...

  2. 使用Oracle绿色客户端(InstantClient)连接远程Oracle的配置方法

    非常简单的配置,网上一搜,有很多,但是还是想记录下来,说不定以后需要了,直接进自己的博客看看也好啊. 下载了PLSQL Developer 11,安装好了发现不能连接远程数据库,但是又不想安装orac ...

  3. 《数据结构与算法分析:C语言描述》复习——第三章“线性表、栈和队列”——双向链表

    2014.06.14 20:17 简介: 双向链表是LRU Cache中要用到的基本结构,每个链表节点左右分别指向上一个和下一个节点,能够自由地左右遍历. 图示: 实现: // My implemen ...

  4. 【Noise and Probabilistic Target】林轩田机器学习基石

    http://beader.me/mlnotebook/section2/noise-and-error.html 上面这个日志总结的已经很好了.这一章的内容,在后面具体的算法中cost functi ...

  5. Abstract Factory 抽象工厂(创建型模式)

    1.常规的对象创建方法(以更换QQ空间主题为例) (这里的常规对象指的是由于业务需求,当前实例化的对象有可能被其他相似的对象(有着共同的特性)所取代,例如更换手机铃声:一首歌取代另一首歌(词,曲,和声 ...

  6. TW实习日记:第四天

    第四天 早上第一件事就是和组长说前一天的需求的事,简而言之就是两个导航栏不属于一个标签内,自定义导航栏属于<body>下的<header>,微信顶部的则是<head> ...

  7. 遍历列表,打印:我叫name,今年age岁,家住dizhi,电话phone(我是通过下标取键得到对应值,有哪位大神来个更简单的)

    lt = [ {'name':'小王', 'age':18, 'info':[('phone', '123'), ('dizhi', '广州')]}, {'name':'小芳', 'age':19, ...

  8. install ironic-inspector

    安装相应的包和组件 yum install openstack-ironic-inspector python-ironic-inspector-client -y 创建user openstack ...

  9. Vue 使用Spread.js没有层级关系(隐藏与显示)

    Vue 使用Spread.js没有层级关系(隐藏与显示) 1.vue会给元素加一个监控属性.去掉 spread.js没有层级关系过半是column中值的问题

  10. HDU - 5919 Sequence II

    题意: 给定长度为n的序列和q次询问.每次询问给出一个区间(L,R),求出区间内每个数第一次出现位置的中位数,强制在线. 题解: 用主席树从右向左的插入点.对于当前点i,如果a[i]出现过,则把原位置 ...