#include "version.h"
#include "common.h"
#include "xmlparse.h"
+#include "inputdata.h"
using std::istream;
using std::ostream;
" -x Run the frontend only: emit XML intermediate format\n"
" -V Generate a dot file for Graphviz\n"
" -p Display printable characters on labels\n"
-" -S <spec> FSM specification to output (for rlgen-dot)\n"
-" -M <machine> Machine definition/instantiation to output (for rlgen-dot)\n"
+" -S <spec> FSM specification to output (for graphviz output)\n"
+" -M <machine> Machine definition/instantiation to output (for graphviz output)\n"
"host language:\n"
" -C The host language is C, C++, Obj-C or Obj-C++ (default)\n"
" -D The host language is D\n"
}
}
-void process( const char *inputFileName, const char *intermed )
+void process( const char *inputFileName )
{
- const char *xmlFileName = intermed;
bool wantComplete = true;
bool outputActive = true;
outputActive = false;
}
- XmlScanner xmlScanner( xmlFileName, cin );
- XmlParser xmlParser( inputFileName, xmlFileName, outputActive, wantComplete );
- xmlParser.init();
+ InputData inputData( inputFileName, outputActive, wantComplete );
- xmlParser.openOutput();
+ /* Compiles machines. */
+ inputData.prepareMachineGen();
- /* Write the machines, then the surrounding code. */
- generate( xmlParser );
+ if ( gblErrorCount > 0 )
+ exit(1);
+
+ inputData.openOutput();
+
+ /* Generates the reduced machine, which we use to write output. */
+ inputData.generateReduced();
+
+ if ( gblErrorCount > 0 )
+ exit(1);
+
+ inputData.openOutput2();
+ inputData.writeOutput();
/* Close the input and the intermediate file. */
delete inFile;
if ( gblErrorCount > 0 )
exit(1);
-// xml_parse( *xmlInFile, xmlFileName,
-// outputActive, wantComplete,
-// xmlScanner, xmlParser );
-
/* If writing to a file, delete the ostream, causing it to flush.
* Standard out is flushed automatically. */
if ( outputFileName != 0 ) {
}
-void cleanExit( const char *intermed, int status )
-{
- //unlink( intermed );
- exit( status );
-}
/* Main, process args and call yyparse to start scanning input. */
int main( int argc, const char **argv )
{
const char *inputFileName = 0;
processArgs( argc, argv, inputFileName );
+
/* 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;
}
- const char *intermed = 0; //openIntermed( inputFileName, outputFileName );
- process( inputFileName, intermed );
+ process( inputFileName );
/* Clean up the intermediate. */
- cleanExit( intermed, 0 );
+ exit( 0 );
return 0;
}