95 lines
2.1 KiB
C++
95 lines
2.1 KiB
C++
|
/*
|
||
|
** File: lexutils.hxx
|
||
|
**
|
||
|
** Description: Helper functions for MIDL lexer
|
||
|
** Copyright (C) 1989-1999 Microsoft Corp.
|
||
|
*/
|
||
|
|
||
|
/* there is a warning 3 (type conversion) in the next line...
|
||
|
it has something to do with istream::get(char&).
|
||
|
*/
|
||
|
#define ccgetc() (pbch?(pbch=0,ch):(cceof())?(char)0:((input_fileptr_G->get(ch),ch=='\n' )?(curr_line_G++,ch):(ch)))
|
||
|
#define ccputbackc() (pbch=1)
|
||
|
#define cceof() (input_fileptr_G->eof())
|
||
|
|
||
|
typedef USHORT token_t;
|
||
|
|
||
|
void StartImport();
|
||
|
void CloseImport();
|
||
|
void init_lex(void);
|
||
|
token_t cnv_int(void);
|
||
|
token_t cnv_hex(void);
|
||
|
token_t cnv_octal(void);
|
||
|
token_t cnv_float(void);
|
||
|
long convert(char *ptr, short base);
|
||
|
token_t name(void);
|
||
|
|
||
|
token_t map_token(token_t);
|
||
|
|
||
|
void lex_error(int);
|
||
|
|
||
|
token_t lex(void);
|
||
|
token_t comment(void);
|
||
|
char convesc();
|
||
|
|
||
|
extern short handle_import;
|
||
|
|
||
|
|
||
|
#define AND '&'
|
||
|
#define LBRACK '['
|
||
|
#define RBRACK ']'
|
||
|
#define LCURLY '{'
|
||
|
#define RCURLY '}'
|
||
|
#define LPAREN '('
|
||
|
#define RPAREN ')'
|
||
|
#define SEMI ';'
|
||
|
#define COLON ':'
|
||
|
#define COMMA ','
|
||
|
#define DIV '/'
|
||
|
#define EXCLAIM '!'
|
||
|
#define MOD '%'
|
||
|
#define PLUS '+'
|
||
|
#define XOR '^'
|
||
|
#define LT '<'
|
||
|
#define GT '>'
|
||
|
#define MINUS '-'
|
||
|
#define MULT '*'
|
||
|
#define ASSIGN '='
|
||
|
#define OR '|'
|
||
|
|
||
|
|
||
|
extern short curr_line_G;
|
||
|
extern FILE * hFile_G;
|
||
|
|
||
|
// chCached allows us to look two characters ahead instead
|
||
|
// of one. If NewCCPutbackc is called once, the character
|
||
|
// is put in chCached. If it's called twice, the character
|
||
|
// that was previously in chCached is pushed back into the
|
||
|
// stream and the second character is put into chCached.
|
||
|
// Behavior is undefined if it's called a third time in succession.
|
||
|
extern int chCached;
|
||
|
|
||
|
// #define NewCCGetch() (char) (pImportCntrl->GetChar())
|
||
|
inline
|
||
|
char NewCCGetch()
|
||
|
{
|
||
|
char ch;
|
||
|
if ( ( ch = (char) chCached ) != 0 )
|
||
|
{
|
||
|
chCached = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( ( (ch = (char)getc(hFile_G) ) == EOF ) && feof(hFile_G) )
|
||
|
return 0;
|
||
|
}
|
||
|
if ( ch == '\n' )
|
||
|
curr_line_G++;
|
||
|
return ch;
|
||
|
}
|
||
|
|
||
|
//#define NewCCputbackc(c) (char )(pImportCntrl->UnGetChar(c))
|
||
|
extern
|
||
|
char NewCCputbackc( char ch );
|
||
|
|