You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.0 KiB
69 lines
2.0 KiB
//
|
|
|
|
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
#ifndef SIMC_SCANNER_H
|
|
#define SIMC_SCANNER_H
|
|
|
|
class SIMCParser;
|
|
|
|
/*
|
|
* This is the SIMCScanner class that forms the scanner (tokenizer)
|
|
* used by the SIMCParser class, which is the parser. The SIMCScanner
|
|
* class is derived form the yy_scan class that is generated by the
|
|
* MKS LEX utility from the information in the lex.l file.
|
|
*
|
|
* It adds functionality to it, like column numbers, naming the
|
|
* input stream, and redefining yyerror().
|
|
*/
|
|
class SIMCScanner : public yy_scan
|
|
{
|
|
CString _inputStreamName;
|
|
|
|
// The parser that is making use of this scanner currently.
|
|
// This value *has* to be set by the parser, if it makes
|
|
// a call to yy_scan::yyerror, since this value is used there
|
|
SIMCParser *_theParser;
|
|
public:
|
|
|
|
// Create s scanner, by specifying a parser. If this is specified
|
|
// as null, it has to be set using the SetParser() function, before
|
|
// it is used
|
|
SIMCScanner(SIMCParser * parser = NULL);
|
|
~SIMCScanner();
|
|
|
|
// Various ways of setting the input that is scanned. This is used as
|
|
// the source. NOTE: Only the second one has been tested (ie., the
|
|
// one that specifies an input file name
|
|
BOOL SetInput(ifstream& inputStream);
|
|
BOOL SetInput(const CString& inputFile);
|
|
BOOL SetInput(const int fd = 0);
|
|
BOOL SetInput(FILE * fileStream);
|
|
|
|
// Column number. Make it public, as is the LEX tradition
|
|
long columnNo;
|
|
virtual void output(int);
|
|
|
|
// Sets the parse that uses this scanner currently
|
|
void SetParser(SIMCParser *parser)
|
|
{
|
|
_theParser = parser;
|
|
}
|
|
SIMCParser *GetParser() const
|
|
{
|
|
return _theParser;
|
|
}
|
|
|
|
// The redefinition of yy_scan.yyerror() to suit our needs
|
|
// of error reporting
|
|
virtual void yyerror (char *fmt, ...);
|
|
|
|
inline const char * const GetInputStreamName() const
|
|
{
|
|
return _inputStreamName;
|
|
}
|
|
void SetInputStreamName( const CString& streamName);
|
|
};
|
|
|
|
|
|
#endif SIMC_SCANNER_H
|