lua的中文支持,修改了其中的语法分析器

来源:互联网 发布:网络电视盒价格 编辑:程序博客网 时间:2024/05/16 06:12

相信各种大神喜欢利用中文来处理策划,为了方便各种策划童鞋来进行游戏策划,鉴于大家都是中国人,英语的程度和对游戏解释的程度都不如自己的母语,所以本人从各处学习找到了在最新版本中文的支持。

static int llex (LexState *ls, SemInfo *seminfo) {  luaZ_resetbuffer(ls->buff);  for (;;) {    switch (ls->current) {      case '\n': case '\r': {  /* line breaks */        inclinenumber(ls);        break;      }      case ' ': case '\f': case '\t': case '\v': {  /* spaces */        next(ls);        break;      }      case '-': {  /* '-' or '--' (comment) */        next(ls);        if (ls->current != '-') return '-';        /* else is a comment */        next(ls);        if (ls->current == '[') {  /* long comment? */          int sep = skip_sep(ls);          luaZ_resetbuffer(ls->buff);  /* `skip_sep' may dirty the buffer */          if (sep >= 0) {            read_long_string(ls, NULL, sep);  /* skip long comment */            luaZ_resetbuffer(ls->buff);  /* previous call may dirty the buff. */            break;          }        }        /* else short comment */        while (!currIsNewline(ls) && ls->current != EOZ)          next(ls);  /* skip until end of line (or end of file) */        break;      }      case '[': {  /* long string or simply '[' */        int sep = skip_sep(ls);        if (sep >= 0) {          read_long_string(ls, seminfo, sep);          return TK_STRING;        }        else if (sep == -1) return '[';        else lexerror(ls, "invalid long string delimiter", TK_STRING);      }      case '=': {        next(ls);        if (ls->current != '=') return '=';        else { next(ls); return TK_EQ; }      }      case '<': {        next(ls);        if (ls->current != '=') return '<';        else { next(ls); return TK_LE; }      }      case '>': {        next(ls);        if (ls->current != '=') return '>';        else { next(ls); return TK_GE; }      }      case '~': {        next(ls);        if (ls->current != '=') return '~';        else { next(ls); return TK_NE; }      }      case ':': {        next(ls);        if (ls->current != ':') return ':';        else { next(ls); return TK_DBCOLON; }      }      case '"': case '\'': {  /* short literal strings */        read_string(ls, ls->current, seminfo);        return TK_STRING;      }      case '.': {  /* '.', '..', '...', or number */        save_and_next(ls);        if (check_next(ls, ".")) {          if (check_next(ls, "."))            return TK_DOTS;   /* '...' */          else return TK_CONCAT;   /* '..' */        }        else if (!lisdigit(ls->current)) return '.';        /* else go through */      }      case '0': case '1': case '2': case '3': case '4':      case '5': case '6': case '7': case '8': case '9': {        read_numeral(ls, seminfo);        return TK_NUMBER;      }      case EOZ: {        return TK_EOS;      }      default: {        if (lislalpha(ls->current) || (ls->current > 0x80)) {  /* identifier or reserved word? */          TString *ts;   do    {   if(ls->current > 0x80)                 {  save_and_next(ls);  save_and_next(ls);                  }                  else save_and_next(ls);} while (lislalnum(ls->current) || ls->current > 0x80);            ts = luaX_newstring(ls, luaZ_buffer(ls->buff),                                  luaZ_bufflen(ls->buff));          seminfo->ts = ts;          if (isreserved(ts))  /* reserved word? */            return ts->tsv.extra - 1 + FIRST_RESERVED;          else {            return TK_NAME;          }        }        else {  /* single-char tokens (+ - / ...) */          int c = ls->current;          next(ls);          return c;        }      }    }  }}


大笑大笑大笑吐舌头希望大家喜欢! 附上一张截图



原创粉丝点击