| home
| contents
| previous
| next page
| send comment
| send link
| add bookmark |
scanner.h
/*
** scanner.h
**
** class declarations for a C/C++ lexical analyzer
**
** By: Stephen R. Schmitt
*/
#ifndef SCANNER_H
#define SCANNER_H
typedef enum
{
COMMENT, ERR_TOKEN, END_OF_FILE,
ASM, AUTO,
BOOL, BREAK,
CASE, CATCH, CHAR, CLASS, CONST, CONST_CAST, CONTINUE,
DEFAULT, DELETE, DO, DOUBLE, DYNAMIC_CAST,
ELSE, ENUM, EXPLICIT, EXTERN,
FALSE, FLOAT, FOR, FRIEND,
GOTO,
IF, INLINE, INT, INTERRUPT,
LONG,
MUTABLE,
NAMESPACE, NEW,
OPERATOR,
PRIVATE, PUBLIC, PROTECTED,
REGISTER, REINTERPRET_CAST, RETURN,
SHORT, SIGNED, SIZEOF, STATIC, STATIC_CAST, STRUCT, SWITCH,
TEMPLATE, THIS, THROW, TRUE, TRY, TYPEDEF, TYPEID, TYPENAME,
UNION, UNSIGNED, USING,
VIRTUAL, VOID, VOLATILE,
WHILE,
ID_TOKEN, INT_TOKEN, HEX_TOKEN, OCT_TOKEN, REAL_TOKEN,
CHR_TOKEN, STR_TOKEN,
ASSIGN, ARROW, PERIOD, COMMA, COLON, COLON_COLON,
SEMICOLON, QUESTION, DOUBLE_POUND,
PLUS, MINUS, TIMES, DIV, MOD, INCR, DECR,
PLUS_EQ, MINUS_EQ, TIMES_EQ, DIV_EQ, MOD_EQ,
AND_BITS, OR_BITS, XOR_BITS, COMP_BITS,
RT_SHIFT_BITS, LF_SHIFT_BITS,
AND_EQ, OR_EQ, XOR_EQ, RT_SHIFT_EQ, LF_SHIFT_EQ,
EQ, NE, GT, GE, LT, LE, AND, OR, NOT,
RT_PAREN, LF_PAREN, RT_BRACKET, LF_BRACKET,
RT_BRACE, LF_BRACE,
PP_DEFINE,
PP_ELIF, PP_ELSE, PP_ENDIF, PP_ERROR,
PP_IF, PP_IFDEF, PP_IFNDEF, PP_INCLUDE,
PP_PRAGMA,
PP_SLASH,
PP_UNDEF
}
TOKEN_CODE;
typedef struct
{
char *lxm;
TOKEN_CODE tkn;
}
LEX_TABLE;
class scanner
{
public:
TOKEN_CODE code; // current token
TOKEN_CODE previous; // prior token
int on_line; // source line of token
char lexeme[80]; // token string
void get_token();
void start( char *s ){ i_src = 0; line_count = 1; source = s; }
private:
char *source; // text from source file
long i_src; // current location in source
char curr_ch; // current char in source text
char next_ch; // next char in source text
int line_count; // current line in source
long i_lex; // current location in token lexeme
char advance();
void get_word();
void get_string();
void get_character();
void get_number();
void get_preprocessor();
void get_filename();
void get_special();
void get_special_eof();
void get_special_eq();
void get_special_colon();
void get_special_not();
void get_special_plus();
void get_special_minus();
void get_special_times();
void get_special_div();
void get_special_mod();
void get_special_right();
void get_special_left();
void get_special_and();
void get_special_or();
void get_special_xor();
void get_special_pound();
void get_special_quote();
TOKEN_CODE find( LEX_TABLE [], char *, int );
};
#endif
| home
| contents
| previous
| next page
| send comment
| send link
| add bookmark |
Copyright © 2004, Stephen R. Schmitt