2 * Copyright 2001-2007 Adrian Thurston <thurston@cs.queensu.ca>
5 /* This file is part of Ragel.
7 * Ragel is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * Ragel is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Ragel; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 #include "rlgen-java.h"
35 #include "javacodegen.h"
47 extern istream
*inStream
;
48 extern ostream
*outStream
;
49 extern output_filter
*outFilter
;
50 extern const char *outputFileName
;
52 extern int numSplitPartitions
;
55 * Callbacks invoked by the XML data parser.
58 /* Invoked by the parser when the root element is opened. */
59 ostream
*javaOpenOutput( char *inputFile
)
61 if ( hostLang
->lang
!= HostLang::Java
) {
62 error() << "this code generator is for Java only" << endl
;
66 /* If the output format is code and no output file name is given, then
68 if ( outputFileName
== 0 ) {
69 char *ext
= findFileExtension( inputFile
);
70 if ( ext
!= 0 && strcmp( ext
, ".rh" ) == 0 )
71 outputFileName
= fileNameFromStem( inputFile
, ".h" );
73 outputFileName
= fileNameFromStem( inputFile
, ".java" );
76 /* Make sure we are not writing to the same file as the input file. */
77 if ( outputFileName
!= 0 && strcmp( inputFile
, outputFileName
) == 0 ) {
78 error() << "output file \"" << outputFileName
<<
79 "\" is the same as the input file" << endl
;
82 if ( outputFileName
!= 0 ) {
83 /* Create the filter on the output and open it. */
84 outFilter
= new output_filter( outputFileName
);
85 outFilter
->open( outputFileName
, ios::out
|ios::trunc
);
86 if ( !outFilter
->is_open() ) {
87 error() << "error opening " << outputFileName
<< " for writing" << endl
;
91 /* Open the output stream, attaching it to the filter. */
92 outStream
= new ostream( outFilter
);
95 /* Writing out ot std out. */
101 /* Invoked by the parser when a ragel definition is opened. */
102 CodeGenData
*javaMakeCodeGen( char *sourceFileName
, char *fsmName
,
103 ostream
&out
, bool wantComplete
)
105 CodeGenData
*codeGen
= new JavaTabCodeGen(out
);
107 codeGen
->sourceFileName
= sourceFileName
;
108 codeGen
->fsmName
= fsmName
;
109 codeGen
->wantComplete
= wantComplete
;