lua5.4
llex.h
浏览该文件的文档.
1 /*
2 ** $Id: llex.h $
3 ** Lexical Analyzer
4 ** See Copyright Notice in lua.h
5 */
6 
7 #ifndef llex_h
8 #define llex_h
9 
10 #include <limits.h>
11 
12 #include "lobject.h"
13 #include "lzio.h"
14 
15 
16 /*
17 ** Single-char tokens (terminal symbols) are represented by their own
18 ** numeric code. Other tokens start at the following value.
19 */
20 #define FIRST_RESERVED (UCHAR_MAX + 1)
21 
22 
23 #if !defined(LUA_ENV)
24 #define LUA_ENV "_ENV"
25 #endif
26 
27 
28 /*
29 * WARNING: if you change the order of this enumeration,
30 * grep "ORDER RESERVED"
31 */
32 enum RESERVED {
33  /* terminal symbols denoted by reserved words */
38  /* other terminal symbols */
43 };
44 
45 /* number of reserved words */
46 #define NUM_RESERVED (cast_int(TK_WHILE-FIRST_RESERVED + 1))
47 
48 
49 typedef union {
53 } SemInfo; /* semantics information */
54 
55 
56 typedef struct Token {
57  int token;
60 
61 
62 /* state of the lexer plus state of the parser when shared by all
63  functions */
64 typedef struct LexState {
65  int current; /* current character (charint) */
66  int linenumber; /* input line counter */
67  int lastline; /* line of last token 'consumed' */
68  Token t; /* current token */
69  Token lookahead; /* look ahead token */
70  struct FuncState *fs; /* current function (parser) */
71  struct lua_State *L;
72  ZIO *z; /* input stream */
73  Mbuffer *buff; /* buffer for tokens */
74  Table *h; /* to avoid collection/reuse strings */
75  struct Dyndata *dyd; /* dynamic structures used by the parser */
76  TString *source; /* current source name */
77  TString *envn; /* environment variable name */
79 
80 
81 LUAI_FUNC void luaX_init (lua_State *L);
82 LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z,
83  TString *source, int firstchar);
84 LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l);
85 LUAI_FUNC void luaX_next (LexState *ls);
87 LUAI_FUNC l_noret luaX_syntaxerror (LexState *ls, const char *s);
88 LUAI_FUNC const char *luaX_token2str (LexState *ls, int token);
89 
90 
91 #endif
luaX_next
void luaX_next(LexState *ls)
Definition: llex.c:565
TK_IF
@ TK_IF
Definition: llex.h:36
gethexa
static int gethexa(LexState *ls)
Definition: llex.c:328
LexState::h
Table * h
Definition: llex.h:74
LexState::buff
Mbuffer * buff
Definition: llex.h:73
s2v
#define s2v(o)
Definition: lobject.h:150
LexState
struct LexState LexState
TK_SHR
@ TK_SHR
Definition: llex.h:40
lisprint
#define lisprint(c)
Definition: lctype.h:61
lua_assert
#define lua_assert(c)
Definition: lauxlib.h:169
SemInfo::r
lua_Number r
Definition: llex.h:50
check_next1
static int check_next1(LexState *ls, int c)
Definition: llex.c:191
LUAI_FUNC
#define LUAI_FUNC
Definition: luaconf.h:307
Mbuffer::buffer
char * buffer
Definition: lzio.h:24
cast_byte
#define cast_byte(i)
Definition: llimits.h:130
l_noret
#define l_noret
Definition: llimits.h:178
LexState::fs
struct FuncState * fs
Definition: llex.h:70
TK_THEN
@ TK_THEN
Definition: llex.h:37
luaX_token2str
const char * luaX_token2str(LexState *ls, int token)
Definition: llex.c:82
luaZ_resizebuffer
#define luaZ_resizebuffer(L, buff, size)
Definition: lzio.h:39
isreserved
#define isreserved(s)
Definition: lstring.h:35
readutf8esc
static unsigned long readutf8esc(LexState *ls)
Definition: llex.c:343
LUA_ENV
#define LUA_ENV
Definition: llex.h:24
luaX_setinput
void luaX_setinput(lua_State *L, LexState *ls, ZIO *z, TString *source, int firstchar)
Definition: llex.c:167
lstate.h
TK_REPEAT
@ TK_REPEAT
Definition: llex.h:36
read_numeral
static int read_numeral(LexState *ls, SemInfo *seminfo)
Definition: llex.c:227
TK_NE
@ TK_NE
Definition: llex.h:39
FuncState
Definition: lparser.h:144
luaS_newlstr
TString * luaS_newlstr(lua_State *L, const char *str, size_t l)
Definition: lstring.c:221
txtToken
static const char * txtToken(LexState *ls, int token)
Definition: llex.c:99
TK_FLT
@ TK_FLT
Definition: llex.h:42
lisdigit
#define lisdigit(c)
Definition: lctype.h:59
SemInfo
Definition: llex.h:49
luaX_lookahead
LUAI_FUNC int luaX_lookahead(LexState *ls)
Definition: llex.c:576
setsvalue
#define setsvalue(L, obj, x)
Definition: lobject.h:349
luaS_new
TString * luaS_new(lua_State *L, const char *str)
Definition: lstring.c:241
lisspace
#define lisspace(c)
Definition: lctype.h:60
TK_IDIV
@ TK_IDIV
Definition: llex.h:39
ltable.h
luaC_checkGC
#define luaC_checkGC(L)
Definition: lgc.h:162
luaZ_resetbuffer
#define luaZ_resetbuffer(buff)
Definition: lzio.h:36
TK_WHILE
@ TK_WHILE
Definition: llex.h:37
LexState::current
int current
Definition: llex.h:65
LexState::L
struct lua_State * L
Definition: llex.h:71
obj2gco
#define obj2gco(v)
Definition: lstate.h:347
TK_BREAK
@ TK_BREAK
Definition: llex.h:34
luaZ_sizebuffer
#define luaZ_sizebuffer(buff)
Definition: lzio.h:32
ttisinteger
#define ttisinteger(o)
Definition: lobject.h:306
luaZ_bufflen
#define luaZ_bufflen(buff)
Definition: lzio.h:33
luaC_fix
void luaC_fix(lua_State *L, GCObject *o)
Definition: lgc.c:243
TK_LOCAL
@ TK_LOCAL
Definition: llex.h:36
lua_Number
LUA_NUMBER lua_Number
Definition: lua.h:90
nodefromval
#define nodefromval(v)
Definition: ltable.h:35
llex.h
read_string
static void read_string(LexState *ls, int del, SemInfo *seminfo)
Definition: llex.c:382
check_next2
static int check_next2(LexState *ls, const char *set)
Definition: llex.c:204
LUA_MINBUFFER
#define LUA_MINBUFFER
Definition: llimits.h:233
readdecesc
static int readdecesc(LexState *ls)
Definition: llex.c:369
lislalpha
#define lislalpha(c)
Definition: lctype.h:57
cast_char
#define cast_char(i)
Definition: llimits.h:132
SemInfo::i
lua_Integer i
Definition: llex.h:51
TK_ELSE
@ TK_ELSE
Definition: llex.h:35
luaX_newstring
TString * luaX_newstring(LexState *ls, const char *str, size_t l)
Definition: llex.c:134
TString::extra
lu_byte extra
Definition: lobject.h:366
Mbuffer
Definition: lzio.h:23
TK_DBCOLON
@ TK_DBCOLON
Definition: llex.h:41
TK_RETURN
@ TK_RETURN
Definition: llex.h:37
UTF8BUFFSZ
#define UTF8BUFFSZ
Definition: lobject.h:772
LexState::dyd
struct Dyndata * dyd
Definition: llex.h:75
TK_AND
@ TK_AND
Definition: llex.h:34
LexState::lookahead
Token lookahead
Definition: llex.h:69
luaX_setinput
LUAI_FUNC void luaX_setinput(lua_State *L, LexState *ls, ZIO *z, TString *source, int firstchar)
Definition: llex.c:167
luaZ_buffer
#define luaZ_buffer(buff)
Definition: lzio.h:31
TK_END
@ TK_END
Definition: llex.h:35
TK_SHL
@ TK_SHL
Definition: llex.h:40
TK_UNTIL
@ TK_UNTIL
Definition: llex.h:37
lua.h
TK_FALSE
@ TK_FALSE
Definition: llex.h:35
fltvalue
#define fltvalue(o)
Definition: lobject.h:310
Token
struct Token Token
ttisnil
#define ttisnil(v)
Definition: lobject.h:171
keystrval
#define keystrval(node)
Definition: lobject.h:737
ivalue
#define ivalue(o)
Definition: lobject.h:311
lisxdigit
#define lisxdigit(c)
Definition: lctype.h:62
Token
Definition: llex.h:56
currIsNewline
#define currIsNewline(ls)
Definition: llex.c:36
LexState::linenumber
int linenumber
Definition: llex.h:66
luaX_syntaxerror
l_noret luaX_syntaxerror(LexState *ls, const char *msg)
Definition: llex.c:119
read_long_string
static void read_long_string(LexState *ls, SemInfo *seminfo, size_t sep)
Definition: llex.c:280
TK_ELSEIF
@ TK_ELSEIF
Definition: llex.h:35
cast_void
#define cast_void(i)
Definition: llimits.h:125
TString
Definition: lobject.h:364
lprefix.h
TK_NOT
@ TK_NOT
Definition: llex.h:36
Token::seminfo
SemInfo seminfo
Definition: llex.h:58
ldebug.h
TK_OR
@ TK_OR
Definition: llex.h:36
FIRST_RESERVED
#define FIRST_RESERVED
Definition: llex.h:20
TK_IN
@ TK_IN
Definition: llex.h:36
luaX_syntaxerror
LUAI_FUNC l_noret luaX_syntaxerror(LexState *ls, const char *s)
Definition: llex.c:119
Table
Definition: lobject.h:714
readhexaesc
static int readhexaesc(LexState *ls)
Definition: llex.c:335
luaH_getstr
const TValue * luaH_getstr(Table *t, TString *key)
Definition: ltable.c:742
TK_EOS
@ TK_EOS
Definition: llex.h:41
luaO_hexavalue
int luaO_hexavalue(int c)
Definition: lobject.c:135
lobject.h
lua_State
Definition: lstate.h:273
luaX_tokens
static const char *const luaX_tokens[]
Definition: llex.c:40
lua_Integer
LUA_INTEGER lua_Integer
Definition: lua.h:94
luaX_newstring
LUAI_FUNC TString * luaX_newstring(LexState *ls, const char *str, size_t l)
Definition: llex.c:134
RESERVED
RESERVED
Definition: llex.h:32
TK_GE
@ TK_GE
Definition: llex.h:39
lparser.h
TValue
Definition: lobject.h:65
utf8esc
static void utf8esc(LexState *ls)
Definition: llex.c:361
skip_sep
static size_t skip_sep(LexState *ls)
Definition: llex.c:265
TK_CONCAT
@ TK_CONCAT
Definition: llex.h:39
save_and_next
#define save_and_next(ls)
Definition: llex.c:51
LUA_ERRSYNTAX
#define LUA_ERRSYNTAX
Definition: lua.h:52
luaO_pushfstring
const char * luaO_pushfstring(lua_State *L, const char *fmt,...)
Definition: lobject.c:539
Dyndata
Definition: lparser.h:128
TK_INT
@ TK_INT
Definition: llex.h:42
luaO_str2num
size_t luaO_str2num(const char *s, TValue *o)
Definition: lobject.c:308
TK_FOR
@ TK_FOR
Definition: llex.h:35
TK_GOTO
@ TK_GOTO
Definition: llex.h:36
luaD_throw
l_noret luaD_throw(lua_State *L, int errcode)
Definition: ldo.c:114
luaX_init
void luaX_init(lua_State *L)
Definition: llex.c:70
MAX_INT
#define MAX_INT
Definition: llimits.h:53
TK_TRUE
@ TK_TRUE
Definition: llex.h:37
luaX_token2str
LUAI_FUNC const char * luaX_token2str(LexState *ls, int token)
Definition: llex.c:82
TK_NIL
@ TK_NIL
Definition: llex.h:36
TK_DOTS
@ TK_DOTS
Definition: llex.h:39
luaX_init
LUAI_FUNC void luaX_init(lua_State *L)
Definition: llex.c:70
lstring.h
MAX_SIZE
#define MAX_SIZE
Definition: llimits.h:44
luaG_addinfo
const char * luaG_addinfo(lua_State *L, const char *msg, TString *src, int line)
Definition: ldebug.c:742
TK_DO
@ TK_DO
Definition: llex.h:35
LexState::source
TString * source
Definition: llex.h:76
TK_STRING
@ TK_STRING
Definition: llex.h:42
TK_NAME
@ TK_NAME
Definition: llex.h:42
SemInfo::ts
TString * ts
Definition: llex.h:52
lua_State::top
StkId top
Definition: lstate.h:278
LexState::t
Token t
Definition: llex.h:68
LexState::lastline
int lastline
Definition: llex.h:67
lexerror
static l_noret lexerror(LexState *ls, const char *msg, int token)
Definition: llex.c:111
lgc.h
Zio
Definition: lzio.h:55
save
static void save(LexState *ls, int c)
Definition: llex.c:57
luaZ_buffremove
#define luaZ_buffremove(buff, i)
Definition: lzio.h:35
luaO_utf8esc
int luaO_utf8esc(char *buff, unsigned long x)
Definition: lobject.c:323
LexState::z
ZIO * z
Definition: llex.h:72
lzio.h
next
#define next(ls)
Definition: llex.c:32
luaX_next
LUAI_FUNC void luaX_next(LexState *ls)
Definition: llex.c:565
lctype.h
luaH_finishset
void luaH_finishset(lua_State *L, Table *t, const TValue *key, const TValue *slot, TValue *value)
Definition: ltable.c:779
LexState
Definition: llex.h:64
NUM_RESERVED
#define NUM_RESERVED
Definition: llex.h:46
lislalnum
#define lislalnum(c)
Definition: lctype.h:58
llex
static int llex(LexState *ls, SemInfo *seminfo)
Definition: llex.c:445
Token::token
int token
Definition: llex.h:57
luaS_newliteral
#define luaS_newliteral(L, s)
Definition: lstring.h:28
inclinenumber
static void inclinenumber(LexState *ls)
Definition: llex.c:156
TK_EQ
@ TK_EQ
Definition: llex.h:39
TK_FUNCTION
@ TK_FUNCTION
Definition: llex.h:35
luaX_lookahead
int luaX_lookahead(LexState *ls)
Definition: llex.c:576
EOZ
#define EOZ
Definition: lzio.h:16
ldo.h
ttisfloat
#define ttisfloat(o)
Definition: lobject.h:305
LexState::envn
TString * envn
Definition: llex.h:77
TK_LE
@ TK_LE
Definition: llex.h:39
esccheck
static void esccheck(LexState *ls, int c, const char *msg)
Definition: llex.c:319