xref: /aosp_15_r20/external/lua/src/llex.h (revision 088332b5b69e7ab13924864b272aabfc2509d2d5)
1*088332b5SXin Li /*
2*088332b5SXin Li ** $Id: llex.h $
3*088332b5SXin Li ** Lexical Analyzer
4*088332b5SXin Li ** See Copyright Notice in lua.h
5*088332b5SXin Li */
6*088332b5SXin Li 
7*088332b5SXin Li #ifndef llex_h
8*088332b5SXin Li #define llex_h
9*088332b5SXin Li 
10*088332b5SXin Li #include <limits.h>
11*088332b5SXin Li 
12*088332b5SXin Li #include "lobject.h"
13*088332b5SXin Li #include "lzio.h"
14*088332b5SXin Li 
15*088332b5SXin Li 
16*088332b5SXin Li /*
17*088332b5SXin Li ** Single-char tokens (terminal symbols) are represented by their own
18*088332b5SXin Li ** numeric code. Other tokens start at the following value.
19*088332b5SXin Li */
20*088332b5SXin Li #define FIRST_RESERVED	(UCHAR_MAX + 1)
21*088332b5SXin Li 
22*088332b5SXin Li 
23*088332b5SXin Li #if !defined(LUA_ENV)
24*088332b5SXin Li #define LUA_ENV		"_ENV"
25*088332b5SXin Li #endif
26*088332b5SXin Li 
27*088332b5SXin Li 
28*088332b5SXin Li /*
29*088332b5SXin Li * WARNING: if you change the order of this enumeration,
30*088332b5SXin Li * grep "ORDER RESERVED"
31*088332b5SXin Li */
32*088332b5SXin Li enum RESERVED {
33*088332b5SXin Li   /* terminal symbols denoted by reserved words */
34*088332b5SXin Li   TK_AND = FIRST_RESERVED, TK_BREAK,
35*088332b5SXin Li   TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION,
36*088332b5SXin Li   TK_GOTO, TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT,
37*088332b5SXin Li   TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE,
38*088332b5SXin Li   /* other terminal symbols */
39*088332b5SXin Li   TK_IDIV, TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE,
40*088332b5SXin Li   TK_SHL, TK_SHR,
41*088332b5SXin Li   TK_DBCOLON, TK_EOS,
42*088332b5SXin Li   TK_FLT, TK_INT, TK_NAME, TK_STRING
43*088332b5SXin Li };
44*088332b5SXin Li 
45*088332b5SXin Li /* number of reserved words */
46*088332b5SXin Li #define NUM_RESERVED	(cast_int(TK_WHILE-FIRST_RESERVED + 1))
47*088332b5SXin Li 
48*088332b5SXin Li 
49*088332b5SXin Li typedef union {
50*088332b5SXin Li   lua_Number r;
51*088332b5SXin Li   lua_Integer i;
52*088332b5SXin Li   TString *ts;
53*088332b5SXin Li } SemInfo;  /* semantics information */
54*088332b5SXin Li 
55*088332b5SXin Li 
56*088332b5SXin Li typedef struct Token {
57*088332b5SXin Li   int token;
58*088332b5SXin Li   SemInfo seminfo;
59*088332b5SXin Li } Token;
60*088332b5SXin Li 
61*088332b5SXin Li 
62*088332b5SXin Li /* state of the lexer plus state of the parser when shared by all
63*088332b5SXin Li    functions */
64*088332b5SXin Li typedef struct LexState {
65*088332b5SXin Li   int current;  /* current character (charint) */
66*088332b5SXin Li   int linenumber;  /* input line counter */
67*088332b5SXin Li   int lastline;  /* line of last token 'consumed' */
68*088332b5SXin Li   Token t;  /* current token */
69*088332b5SXin Li   Token lookahead;  /* look ahead token */
70*088332b5SXin Li   struct FuncState *fs;  /* current function (parser) */
71*088332b5SXin Li   struct lua_State *L;
72*088332b5SXin Li   ZIO *z;  /* input stream */
73*088332b5SXin Li   Mbuffer *buff;  /* buffer for tokens */
74*088332b5SXin Li   Table *h;  /* to avoid collection/reuse strings */
75*088332b5SXin Li   struct Dyndata *dyd;  /* dynamic structures used by the parser */
76*088332b5SXin Li   TString *source;  /* current source name */
77*088332b5SXin Li   TString *envn;  /* environment variable name */
78*088332b5SXin Li } LexState;
79*088332b5SXin Li 
80*088332b5SXin Li 
81*088332b5SXin Li LUAI_FUNC void luaX_init (lua_State *L);
82*088332b5SXin Li LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z,
83*088332b5SXin Li                               TString *source, int firstchar);
84*088332b5SXin Li LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l);
85*088332b5SXin Li LUAI_FUNC void luaX_next (LexState *ls);
86*088332b5SXin Li LUAI_FUNC int luaX_lookahead (LexState *ls);
87*088332b5SXin Li LUAI_FUNC l_noret luaX_syntaxerror (LexState *ls, const char *s);
88*088332b5SXin Li LUAI_FUNC const char *luaX_token2str (LexState *ls, int token);
89*088332b5SXin Li 
90*088332b5SXin Li 
91*088332b5SXin Li #endif
92