#include <setjmp.h>
+// Make the scope character ('.') be a symbol, otherwise it's just
+// a ident character
+#define USE_SCOPE_CHAR 1
+
// === TYPES ===
typedef struct
{
// Lexer State
- char *BufStart;
- char *CurPos;
+ const char *BufStart;
+ const char *CurPos;
+
+ char *Filename;
int LastLine;
int LastToken, LastTokenLen;
- char *LastTokenStr;
+ const char *LastTokenStr;
int NextLine;
int NextToken, NextTokenLen;
- char *NextTokenStr;
+ const char *NextTokenStr;
int CurLine;
int Token, TokenLen;
- char *TokenStr;
+ const char *TokenStr;
jmp_buf JmpTarget;
+ int ErrorHit;
} tParser;
// === FUNCTIONS ===
// Primitives
TOK_STR,
TOK_INTEGER,
+ TOK_REAL,
TOK_VARIABLE,
TOK_IDENT,
TOK_RWD_DO,
TOK_RWD_WHILE,
TOK_RWD_FOR,
+ // - Value
+ TOK_RWD_NULL,
// - Types
TOK_RWD_VOID,
TOK_RWD_OBJECT,
TOK_GT, TOK_GTE,
// Operations
+ TOK_BWNOT, TOK_LOGICNOT,
TOK_DIV, TOK_MUL,
TOK_PLUS, TOK_MINUS,
TOK_SHL, TOK_SHR,
case TOK_RWD_OBJECT: _type = SS_DATATYPE_OBJECT; break;\
case TOK_RWD_REAL: _type = SS_DATATYPE_REAL; break;\
case TOK_RWD_STRING: _type = SS_DATATYPE_STRING; break;\
- default:fprintf(stderr,\
+ default:_type=SS_DATATYPE_UNDEF;fprintf(stderr,\
"ERROR: Unexpected %s, expected "TOKEN_GROUP_TYPES_STR"\n",csaTOKEN_NAMES[Parser->Token]);\
break;\
} } while(0)
"TOK_STR",
"TOK_INTEGER",
+ "TOK_REAL",
"TOK_VARIABLE",
"TOK_IDENT",
"TOK_RWD_WHILE",
"TOK_RWD_FOR",
+ "TOK_RWD_NULL",
"TOK_RWD_VOID",
"TOK_RWD_OBJECT",
"TOK_RWD_OPAUQE",
"TOK_LT", "TOK_LTE",
"TOK_GT", "TOK_GTE",
+ "TOK_BWNOT", "TOK_LOGICNOT",
"TOK_DIV", "TOK_MUL",
"TOK_PLUS", "TOK_MINUS",
"TOK_SHL", "TOK_SHR",