windows-nt/Source/XPSP1/NT/com/rpc/midl/front/lexutils.hxx
2020-09-26 16:20:57 +08:00

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 );