#ifndef _RLSCAN_H
#define _RLSCAN_H
#include <iostream>
#include "rlscan.h"
#include "vector.h"
#include "rlparse.h"
#include "parsedata.h"
#include "avltree.h"
#include "vector.h"
using
std::istream;
using
std::ostream;
extern
char
*Parser_lelNames[];
struct
Scanner : TmpObject<Scanner>
{
Scanner( InputData &id,
const
char
*fileName, istream &input,
Parser *inclToParser,
char
*inclSectionTarg,
int
includeDepth,
bool
importMachines )
:
id(id), fileName(fileName),
input(input),
inclToParser(inclToParser),
inclSectionTarg(inclSectionTarg),
includeDepth(includeDepth),
importMachines(importMachines),
cur_token(0),
line(1), column(1), lastnl(0),
parser(0), ignoreSection(
false
),
parserExistsError(
false
),
whitespaceOn(
true
),
lastToken(0)
{}
bool
duplicateInclude(
char
*inclFileName,
char
*inclSectionName );
char
**makeIncludePathChecks(
const
char
*curFileName,
const
char
*fileName,
int
len );
std::ifstream *tryOpenInclude(
char
**pathChecks,
long
&found );
void
handleMachine();
void
handleInclude();
void
handleImport();
void
init();
void
token(
int
type,
char
*start,
char
*end );
void
token(
int
type,
char
c );
void
token(
int
type );
void
processToken(
int
type,
char
*tokdata,
int
toklen );
void
directToParser( Parser *toParser,
const
char
*tokFileName,
int
tokLine,
int
tokColumn,
int
type,
char
*tokdata,
int
toklen );
void
flushImport( );
void
importToken(
int
type,
char
*start,
char
*end );
void
pass(
int
token,
char
*start,
char
*end );
void
pass();
void
updateCol();
void
startSection();
void
endSection();
void
do_scan();
bool
active();
ostream &scan_error();
InputData &id;
const
char
*fileName;
istream &input;
Parser *inclToParser;
char
*inclSectionTarg;
int
includeDepth;
bool
importMachines;
int
tok_cs, tok_act;
int
*tok_ts, *tok_te;
int
cur_token;
static
const
int
max_tokens = 32;
int
token_data[max_tokens];
char
*token_strings[max_tokens];
int
token_lens[max_tokens];
int
cs;
char
*word, *lit;
int
word_len, lit_len;
int
line;
InputLoc sectionLoc;
char
*ts, *te;
int
column;
char
*lastnl;
Parser *parser;
bool
ignoreSection;
bool
parserExistsError;
bool
whitespaceOn;
int
lastToken;
};
#endif