void javaDefaultFileName( const char *inputFile );
void rubyDefaultFileName( const char *inputFile );
void csharpDefaultFileName( const char *inputFile );
-};
-extern InputData id;
+ void writeLanguage( std::ostream &out );
+ void writeMachines( std::ostream &out, std::string hostData, const char *inputFileName );
+};
#endif
MinimizeLevel minimizeLevel = MinimizePartition2;
MinimizeOpt minimizeOpt = MinimizeMostOps;
-InputData id;
-
/* Graphviz dot file generation. */
const char *machineSpec = 0, *machineName = 0;
bool machineSpecFound = false;
}
}
-void processArgs( int argc, const char **argv )
+void processArgs( int argc, const char **argv, InputData &id )
{
ParamCheck pc("xo:dnmleabjkS:M:I:CDJRAvHh?-:sT:F:G:P:LpV", argc, argv);
}
}
-void process()
+void process( InputData &id )
{
/* Open the input file for reading. */
assert( id.inputFileName != 0 );
firstInputItem->loc.col = 1;
id.inputItems.append( firstInputItem );
- Scanner scanner( id.inputFileName, *inFile, 0, 0, 0, false );
+ Scanner scanner( id, id.inputFileName, *inFile, 0, 0, 0, false );
scanner.do_scan();
/* Finished, final check for errors.. */
/* Main, process args and call yyparse to start scanning input. */
int main( int argc, const char **argv )
{
- processArgs( argc, argv );
+ InputData id;
+
+ processArgs( argc, argv, id );
/* If -M or -S are given and we're not generating a dot file then invoke
* the frontend. These options are not useful with code generators. */
"\" is the same as the input file" << endp;
}
- process();
-
- /* Clean up the intermediate. */
- exit( 0 );
+ process( id );
return 0;
}
struct Scanner
{
- Scanner( const char *fileName, istream &input,
+ Scanner( InputData &id, const char *fileName, istream &input,
Parser *inclToParser, char *inclSectionTarg,
int includeDepth, bool importMachines )
:
- fileName(fileName), input(input),
+ id(id), fileName(fileName),
+ input(input),
inclToParser(inclToParser),
inclSectionTarg(inclSectionTarg),
includeDepth(includeDepth),
bool active();
ostream &scan_error();
+ InputData &id;
const char *fileName;
istream &input;
Parser *inclToParser;
parser->includeHistory.append( IncludeHistoryItem(
includeChecks[found], inclSectionName ) );
- Scanner scanner( includeChecks[found], *inFile, parser,
+ Scanner scanner( id, includeChecks[found], *inFile, parser,
inclSectionName, includeDepth+1, false );
scanner.do_scan( );
delete inFile;
scan_error() << "import: attempted: \"" << *tried++ << '\"' << endl;
}
- Scanner scanner( importChecks[found], *inFile, parser,
+ Scanner scanner( id, importChecks[found], *inFile, parser,
0, includeDepth+1, true );
scanner.do_scan( );
scanner.importToken( 0, 0, 0 );
close_ragel_def();
}
-void writeLanguage( std::ostream &out )
+void InputData::writeLanguage( std::ostream &out )
{
out << " lang=\"";
switch ( hostLang->lang ) {
out << "\"";
}
-void writeMachines( std::ostream &out, std::string hostData, const char *inputFileName )
+void InputData::writeMachines( std::ostream &out, std::string hostData, const char *inputFileName )
{
if ( machineSpec == 0 && machineName == 0 ) {
/* No machine spec or machine name given. Generate everything. */
- for ( ParserDict::Iter parser = id.parserDict; parser.lte(); parser++ ) {
+ for ( ParserDict::Iter parser = parserDict; parser.lte(); parser++ ) {
ParseData *pd = parser->value->pd;
if ( pd->instanceList.length() > 0 )
pd->prepareMachineGen( 0 );
out << "<ragel version=\"" VERSION "\" filename=\"" << inputFileName << "\"";
writeLanguage( out );
out << ">\n";
- for ( ParserDict::Iter parser = id.parserDict; parser.lte(); parser++ ) {
+ for ( ParserDict::Iter parser = parserDict; parser.lte(); parser++ ) {
ParseData *pd = parser->value->pd;
if ( pd->instanceList.length() > 0 )
pd->generateXML( out );
out << "</ragel>\n";
}
}
- else if ( id.parserDict.length() > 0 ) {
+ else if ( parserDict.length() > 0 ) {
/* There is either a machine spec or machine name given. */
ParseData *parseData = 0;
GraphDictEl *graphDictEl = 0;
/* Traverse the sections, break out when we find a section/machine
* that matches the one specified. */
- for ( ParserDict::Iter parser = id.parserDict; parser.lte(); parser++ ) {
+ for ( ParserDict::Iter parser = parserDict; parser.lte(); parser++ ) {
ParseData *checkPd = parser->value->pd;
if ( machineSpec == 0 || strcmp( checkPd->sectionName, machineSpec ) == 0 ) {
GraphDictEl *checkGdEl = 0;