修改源代码,让Lua支持中文,中英混合变量名收藏

修改源代码,让Lua支持中文,中英混合变量名 /*** 作者:苏晓  时间:2006年5月24日** 若有转载请注明出处,谢谢!*/Lua脚本的执行效率是相当高的,源文件用纯C写成相当小巧,其可扩展性相当强,前途一片光明。其源文件写得不复杂,相当值得一读。作为中国人,在编程语言的使用上如果能够使用中文作为变量名是非常好的一件事。但是标准的Lua并不支持中文变量名。虽然可以在字符串中处理中文。其实只要修改少量代码就可以让Lua支持中文变量名。 阅读详情
   修改源代码,让Lua支持中文,中英混合变量名收藏

新一篇: Doris一款为Lua制作的小巧OpenGL封装 | 旧一篇: 自己写的DllCall类方便dll动态链接库函数调用

/*
** 作者:苏晓  时间:2006年5月24日
** 若有转载请注明出处,谢谢!
*/

Lua脚本的执行效率是相当高的,源文件用纯C写成相当小巧,其可扩展性相当强,前途一片光明。
其源文件写得不复杂,相当值得一读。
作为中国人,在编程语言的使用上如果能够使用中文作为变量名是非常好的一件事。但是标准的Lua并不支持中文变量名。虽然可以在字符串中处理中文。
其实只要修改少量代码就可以让Lua支持中文变量名。

打开lua的源文件文件夹(包)可以从文件名知道,llex.h,llex.c是用来做文件语法分析的。
备份llex.c为llex_old.c
打开llex.c进行修改如下:

/*
 ** $Id: llex.c,v 1.119 2003/03/24 12:39:34 roberto Exp $
 ** Lexical Analyzer
 ** See Copyright Notice in lua.h
 */


#include <ctype.h>
#include <string.h>

#define llex_c

#include "lua.h"

#include "ldo.h"
#include "llex.h"
#include "lobject.h"
#include "lparser.h"
#include "lstate.h"
#include "lstring.h"
#include "lzio.h"



#define next(LS) (LS->current = zgetc(LS->z))



/* ORDER RESERVED */
static const char *const token2string[] =
{
  "and", "break", "do", "else", "elseif", "end", "false", "for", "function",
    "if", "in", "local", "nil", "not", "or", "repeat", "return", "then", "true",
    "until", "while", "*name", "..", "...", "==", ">=", "<=", "~=", "*number",
    "*string", "<eof>"
};


void luaX_init(lua_State *L)
{
  int i;
  for (i = 0; i < NUM_RESERVED; i++)
  {
    TString *ts = luaS_new(L, token2string[i]);
    luaS_fix(ts); /* reserved words are never collected */
    lua_assert(strlen(token2string[i]) + 1 <= TOKEN_LEN);
    ts->tsv.reserved = cast(lu_byte, i + 1); /* reserved word */
  }
}


#define MAXSRC          80


void luaX_checklimit(LexState *ls, int val, int limit, const char *msg)
{
  if (val > limit)
  {
    msg = luaO_pushfstring(ls->L, "too many %s (limit=%d)", msg, limit);
    luaX_syntaxerror(ls, msg);
  }
}


void luaX_errorline(LexState *ls, const char *s, const char *token, int line)
{
  lua_State *L = ls->L;
  char buff[MAXSRC];
  luaO_chunkid(buff, getstr(ls->source), MAXSRC);
  luaO_pushfstring(L, "%s:%d: %s near `%s'", buff, line, s, token);
  luaD_throw(L, LUA_ERRSYNTAX);
}


static void luaX_error(LexState *ls, const char *s, const char *token)
{
  luaX_errorline(ls, s, token, ls->linenumber);
}


void luaX_syntaxerror(LexState *ls, const char *msg)
{
  const char *lasttoken;
  switch (ls->t.token)
  {
    case TK_NAME:
      lasttoken = getstr(ls->t.seminfo.ts);
      break;
    case TK_STRING:
    case TK_NUMBER:
      lasttoken = luaZ_buffer(ls->buff);
      break;
    default:
      lasttoken = luaX_token2str(ls, ls->t.token);
      break;
  }
  luaX_error(ls, msg, lasttoken);
}


const char *luaX_token2str(LexState *ls, int token)
{
  if (token < FIRST_RESERVED)
  {
    lua_assert(token == (unsigned char)token);
    return luaO_pushfstring(ls->L, "%c", token);
  }
  else
    return token2string[token - FIRST_RESERVED];
}


static void luaX_lexerror(LexState *ls, const char *s, int token)
{
  if (token == TK_EOS)
    luaX_error(ls, s, luaX_token2str(ls, token));
  else
    luaX_error(ls, s, luaZ_buffer(ls->buff));
}


static void inclinenumber(LexState *LS)
{
  next(LS); /* skip `/n' */
  ++LS->linenumber;
  luaX_checklimit(LS, LS->linenumber, MAX_INT, "lines in a chunk");
}


void luaX_setinput(lua_State *L, LexState *LS, ZIO *z, TString *source)
{
  LS->L = L;
  LS->lookahead.token = TK_EOS; /* no look-ahead token */
  LS->z = z;
  LS->fs = NULL;
  LS->linenumber = 1;
  LS->lastline = 1;
  LS->source = source;
  next(LS); /* read first char */
  if (LS->current == '#')
  {
    do
    {
       /* skip first line */
      </
Lua实例代码大全 很全面的实例代码,luacurl网络连接、luafilesystem、luajson、luasocket、luasql、luatask、luaxml、md5 立即下载

相关推荐

lua支持中文变量名,

Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 版本:5.1.4 内有 1、修改源文件的方法 2、Delphi的一个封装类 3、编译方法 4、编译好的Dll

HyperMesh 2025新功能尝鲜:用Volume Tetramesh一键生成工业级四面体网格

HyperMesh 2025推出的Volume Tetramesh功能,通过“体到体”的全新范式,实现了工业级四面体网格的一键生成。该功能利用Proximity与Curvature参数智能识别并加密几何特征,将工程师从繁琐的几何清理和表面网格划分中解放出来,在保证网格质量的同时,显著提升了前处理效率,尤其适用于发动机缸体等复杂模型的仿真分析。

weixin_29229055的博客 477

Ubuntu20.04下运行LOAM系列:A-LOAM、LeGO-LOAM、SC-LeGO-LOAM、LIO-SAM 和 LVI-SAM

在我第一篇博文Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM2+Gazebo仿真运行ORB-SLAM2+各种相关库的安装的基础环境下跑通A-LOAM首先已经按照上一篇文章已经安装好了ROS noetic、Eigen3.4.0、OpenCV4.2.0和PCL1.10,A-LOAM在Github的开源地址:https://github.com/HKUST-Aerial-Robotics/A-LOAM。接下来根据代码要求,需要安装Ceres,另外环境的变

zardforever123的博客 3万+

Appstore 3.2(f)违规自救指南:从触发到申诉的完整应对策略

本文详细解析了Appstore 3.2(f)违规的应对策略,从触发原因到申诉流程,帮助开发者有效自救。文章涵盖隐瞒行为、账户关联和信息造假三大违规场景的判定逻辑,并提供申诉信写作的黄金法则和长期合规防御措施,确保开发者能够顺利通过苹果审核。

weixin_29304985的博客 662

GitHub漏洞挖掘与CVE提交实战指南:从发现到编号的完整链路

GitHub开源项目是现代软件供应链的核心节点,其安全漏洞直接影响全球数百万系统的机密性、完整性与可用性。理解漏洞本质需回归CIA三元组原理,而真实可利用性依赖对协议解析层、配置加载区和依赖传递链等高危模块的精准识别。技术价值在于将模糊的‘可疑逻辑’转化为符合MITRE CVE标准的可验证事件,支撑SDL流程、威胁情报建设与供应链风险管理。典型应用场景包括甲方安全工程师推动供应商修复、独立研究者参与负责任披露,以及DevSecOps团队构建自动化风险坐标系。本文基于27次CVE提交经验,聚焦GitHub代码

weixin_33646989的博客 651

基于CNN的表情识别(FER)pytorch实现

Report for FER Jian Tang Abstract 我们使用卷积神经网络(CNN)实现了baby的面部表情识别(FER)。 数据上,我们获取了开源FER数据集FER2013[1],besides我们使用爬虫获取了baby相关的人脸图片,进行了手工分类标注以形成一个全新的baby FER数据集。 模型上,我们首先复现了Luan[2]的工作,即参考Kuo[3]在CVPR 2018上的工作并实现一个轻量的CNN网络,在FER2013上进行训练并得到了XXXX%的平均分类准确率(avg a

qq_20241587的博客 3683

2018安徽省青少年信息学奥林匹克(AHOI)初中组

12 种合法的排列分别为:1, 3, 2, 4, 2, 3, 1, 4, 3, 1, 4, 2, 3, 2, 4, 1, 1, 3, 4, 2, 2, 3,4,1,1,4,2,3, 2,4,1,3, 4,1,3,2, 4,2,3,1, 1,4,3,2, 2,4,3,1。分为 2 组,一组的队员实力值是{4, 5, 2, 3},一组是{-4, -3, -5},其中最小的组人数为 3,可以发现没有比 3 更优的分法了。[0, 1, 1, 2]同样不是合法的分组方案,因为出现了两个实力值为 1 的选手。

weixin_42358969的博客 1143

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7073

Open3D——直通滤波(python详细过程版)【2025最新版】

python就一个字:强。博客长期更新,本文最近更新时间为:2025年1月11日。

点云侠的博客 7519

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: FAQ:如何从URL取得其在Internet Cache中的文件名
下一篇: VC6下编译进Ring0代码的疑惑收藏
skyremember
博客等级 码龄20年 204粉丝 484原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值