Subversion Repositories WoWGM

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 tristanc 1
/*
2
** $Id: llex.h,v 1.58 2006/03/23 18:23:32 roberto Exp $
3
** Lexical Analyzer
4
** See Copyright Notice in lua.h
5
*/
6
 
7
#ifndef llex_h
8
#define llex_h
9
 
10
#include "lobject.h"
11
#include "lzio.h"
12
 
13
 
14
#define FIRST_RESERVED	257
15
 
16
/* maximum length of a reserved word */
17
#define TOKEN_LEN	(sizeof("function")/sizeof(char))
18
 
19
 
20
/*
21
* WARNING: if you change the order of this enumeration,
22
* grep "ORDER RESERVED"
23
*/
24
enum RESERVED {
25
  /* terminal symbols denoted by reserved words */
26
  TK_AND = FIRST_RESERVED, TK_BREAK,
27
  TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION,
28
  TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT,
29
  TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE,
30
  /* other terminal symbols */
31
  TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER,
32
  TK_NAME, TK_STRING, TK_EOS
33
};
34
 
35
/* number of reserved words */
36
#define NUM_RESERVED	(cast(int, TK_WHILE-FIRST_RESERVED+1))
37
 
38
 
39
/* array with token `names' */
40
LUAI_DATA const char *const luaX_tokens [];
41
 
42
 
43
typedef union {
44
  lua_Number r;
45
  TString *ts;
46
} SemInfo;  /* semantics information */
47
 
48
 
49
typedef struct Token {
50
  int token;
51
  SemInfo seminfo;
52
} Token;
53
 
54
 
55
typedef struct LexState {
56
  int current;  /* current character (charint) */
57
  int linenumber;  /* input line counter */
58
  int lastline;  /* line of last token `consumed' */
59
  Token t;  /* current token */
60
  Token lookahead;  /* look ahead token */
61
  struct FuncState *fs;  /* `FuncState' is private to the parser */
62
  struct lua_State *L;
63
  ZIO *z;  /* input stream */
64
  Mbuffer *buff;  /* buffer for tokens */
65
  TString *source;  /* current source name */
66
  char decpoint;  /* locale decimal point */
67
} LexState;
68
 
69
 
70
LUAI_FUNC void luaX_init (lua_State *L);
71
LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z,
72
                              TString *source);
73
LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l);
74
LUAI_FUNC void luaX_next (LexState *ls);
75
LUAI_FUNC void luaX_lookahead (LexState *ls);
76
LUAI_FUNC void luaX_lexerror (LexState *ls, const char *msg, int token);
77
LUAI_FUNC void luaX_syntaxerror (LexState *ls, const char *s);
78
LUAI_FUNC const char *luaX_token2str (LexState *ls, int token);
79
 
80
 
81
#endif