Mesen-SX/Lua/llex.h

119 lines
2.2 KiB
C
Raw Normal View History

2019-05-12 21:18:05 -04:00
/*
** $Id: llex.h,v 1.79 2016/05/02 14:02:12 roberto Exp $
** Lexical Analyzer
** See Copyright Notice in lua.h
*/
#ifndef llex_h
#define llex_h
#include "lobject.h"
#include "lzio.h"
#define FIRST_RESERVED 257
#if !defined(LUA_ENV)
#define LUA_ENV "_ENV"
#endif
/*
* WARNING: if you change the order of this enumeration,
* grep "ORDER RESERVED"
*/
2020-12-19 23:31:32 +03:00
enum RESERVED
{
/* terminal symbols denoted by reserved words */
TK_AND = FIRST_RESERVED,
TK_BREAK,
TK_DO,
TK_ELSE,
TK_ELSEIF,
TK_END,
TK_FALSE,
TK_FOR,
TK_FUNCTION,
TK_GOTO,
TK_IF,
TK_IN,
TK_LOCAL,
TK_NIL,
TK_NOT,
TK_OR,
TK_REPEAT,
TK_RETURN,
TK_THEN,
TK_TRUE,
TK_UNTIL,
TK_WHILE,
/* other terminal symbols */
TK_IDIV,
TK_CONCAT,
TK_DOTS,
TK_EQ,
TK_GE,
TK_LE,
TK_NE,
TK_SHL,
TK_SHR,
TK_DBCOLON,
TK_EOS,
TK_FLT,
TK_INT,
TK_NAME,
TK_STRING
2019-05-12 21:18:05 -04:00
};
/* number of reserved words */
#define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1))
2020-12-19 23:31:32 +03:00
typedef union
{
lua_Number r;
lua_Integer i;
TString* ts;
} SemInfo; /* semantics information */
2019-05-12 21:18:05 -04:00
2020-12-19 23:31:32 +03:00
typedef struct Token
{
int token;
SemInfo seminfo;
2019-05-12 21:18:05 -04:00
} Token;
/* state of the lexer plus state of the parser when shared by all
functions */
2020-12-19 23:31:32 +03:00
typedef struct LexState
{
int current; /* current character (charint) */
int linenumber; /* input line counter */
int lastline; /* line of last token 'consumed' */
Token t; /* current token */
Token lookahead; /* look ahead token */
struct FuncState* fs; /* current function (parser) */
struct lua_State* L;
ZIO* z; /* input stream */
Mbuffer* buff; /* buffer for tokens */
Table* h; /* to avoid collection/reuse strings */
struct Dyndata* dyd; /* dynamic structures used by the parser */
TString* source; /* current source name */
TString* envn; /* environment variable name */
2019-05-12 21:18:05 -04:00
} LexState;
2020-12-19 23:31:32 +03:00
LUAI_FUNC void luaX_init(lua_State* L);
LUAI_FUNC void luaX_setinput(lua_State* L, LexState* ls, ZIO* z,
TString* source, int firstchar);
LUAI_FUNC TString* luaX_newstring(LexState* ls, const char* str, size_t l);
LUAI_FUNC void luaX_next(LexState* ls);
LUAI_FUNC int luaX_lookahead(LexState* ls);
LUAI_FUNC l_noret luaX_syntaxerror(LexState* ls, const char* s);
LUAI_FUNC const char* luaX_token2str(LexState* ls, int token);
2019-05-12 21:18:05 -04:00
#endif