在源码中找到llex.c文件,在其中添加函数
static int getUTF8Len(unsigned char pre){
if((pre>>3)==0x1e){
return 4;
}else
if((pre>>4)==0x0e){
return 3;
}else
if((pre>>5)==0x06){
return 2;
}else
return 1;
}
然后找到
else if (isalpha(ls->current) || ls->current == '_') {
/* identifier or reserved word */
TString *ts;
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 > 0) /* reserved word? */
return ts->tsv.reserved - 1 + FIRST_RESERVED;
else {
seminfo->ts = ts;
return TK_NAME;
}
}
将其改为
else if (isalpha(ls->current) || ls->current == '_' || ls->current > 0x80) {
/* identifier or reserved word */
TString *ts;
do {
if(ls->current > 0x80){
int l = getUTF8Len(ls->current);
for(int il = 0;il<l;++il){
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 > 0) /* reserved word? */
return ts->tsv.reserved - 1 + FIRST_RESERVED;
else {
seminfo->ts = ts;
return TK_NAME;
}
}
然后编译即可
cgoxopx
lua