From a03c7ca77ebb47347accb4d516d822bfd12dd632 Mon Sep 17 00:00:00 2001 From: thurston Date: Mon, 12 Mar 2007 15:42:01 +0000 Subject: [PATCH] Added exports and entry points to Java and Ruby code generation. git-svn-id: http://svn.complang.org/ragel/trunk@138 052ea7fc-9027-0410-9066-f65837a77df0 --- rlgen-java/javacodegen.cpp | 34 ++++++++++++++++++++++++---------- rlgen-java/javacodegen.h | 1 + rlgen-java/main.cpp | 2 +- rlgen-ruby/rubycodegen.cpp | 35 +++++++++++++++++++++++++---------- rlgen-ruby/rubycodegen.h | 1 + 5 files changed, 52 insertions(+), 21 deletions(-) diff --git a/rlgen-java/javacodegen.cpp b/rlgen-java/javacodegen.cpp index c6f1ba9..fd88eeb 100644 --- a/rlgen-java/javacodegen.cpp +++ b/rlgen-java/javacodegen.cpp @@ -768,6 +768,16 @@ std::ostream &JavaTabCodeGen::TRANS_ACTIONS_WI() return out; } +void JavaTabCodeGen::writeExports() +{ + if ( exportList.length() > 0 ) { + for ( ExportList::Iter ex = exportList; ex.lte(); ex++ ) { + STATIC_VAR( ALPH_TYPE(), DATA_PREFIX() + ex->name ) + << " = " << KEY(ex->key) << "\n"; + } + out << "\n"; + } +} void JavaTabCodeGen::writeData() { @@ -880,19 +890,23 @@ void JavaTabCodeGen::writeData() "\n"; } - STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << ";\n" - "\n"; + STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << ";\n"; - if ( writeFirstFinal ) { - STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << ";\n" - "\n"; - } + if ( writeFirstFinal ) + STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << ";\n"; - if ( writeErr ) { - STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << ";\n" - "\n"; - } + if ( writeErr ) + STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << ";\n"; + out << "\n"; + + if ( entryPointNames.length() > 0 ) { + for ( EntryNameVect::Iter en = entryPointNames; en.lte(); en++ ) { + STATIC_VAR( "int", DATA_PREFIX() + "en_" + *en ) << + " = " << entryPointIds[en.pos()] << ";\n"; + } + out << "\n"; + } } void JavaTabCodeGen::writeExec() diff --git a/rlgen-java/javacodegen.h b/rlgen-java/javacodegen.h index 07be8cc..86f67a4 100644 --- a/rlgen-java/javacodegen.h +++ b/rlgen-java/javacodegen.h @@ -77,6 +77,7 @@ struct JavaTabCodeGen : public CodeGenData virtual void writeEOF(); virtual void writeData(); virtual void writeInit(); + virtual void writeExports(); virtual void finishRagelDef(); void NEXT( ostream &ret, int nextDest, bool inFinish ); diff --git a/rlgen-java/main.cpp b/rlgen-java/main.cpp index 4aee365..5b4de33 100644 --- a/rlgen-java/main.cpp +++ b/rlgen-java/main.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2005 Adrian Thurston + * Copyright 2001-2007 Adrian Thurston */ /* This file is part of Ragel. diff --git a/rlgen-ruby/rubycodegen.cpp b/rlgen-ruby/rubycodegen.cpp index 8df51bf..0c0f7fc 100644 --- a/rlgen-ruby/rubycodegen.cpp +++ b/rlgen-ruby/rubycodegen.cpp @@ -1021,6 +1021,17 @@ std::ostream &RubyCodeGen::TRANS_ACTIONS_WI() return out; } +void RubyCodeGen::writeExports() +{ + if ( exportList.length() > 0 ) { + for ( ExportList::Iter ex = exportList; ex.lte(); ex++ ) { + STATIC_VAR( ALPH_TYPE(), DATA_PREFIX() + ex->name ) + << " = " << KEY(ex->key) << "\n"; + } + out << "\n"; + } +} + void RubyCodeGen::writeData() { @@ -1133,19 +1144,23 @@ void RubyCodeGen::writeData() "\n"; } - STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << ";\n" - "\n"; + STATIC_VAR( "int", START() ) << " = " << START_STATE_ID() << ";\n"; - if ( writeFirstFinal ) { - STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << ";\n" - "\n"; - } + if ( writeFirstFinal ) + STATIC_VAR( "int" , FIRST_FINAL() ) << " = " << FIRST_FINAL_STATE() << ";\n"; - if ( writeErr ) { - STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << ";\n" - "\n"; - } + if ( writeErr ) + STATIC_VAR( "int", ERROR() ) << " = " << ERROR_STATE() << ";\n"; + out << "\n"; + + if ( entryPointNames.length() > 0 ) { + for ( EntryNameVect::Iter en = entryPointNames; en.lte(); en++ ) { + STATIC_VAR( "int", DATA_PREFIX() + "en_" + *en ) << + " = " << entryPointIds[en.pos()] << ";\n"; + } + out << "\n"; + } } std::ostream &RubyCodeGen::START_ARRAY_LINE() diff --git a/rlgen-ruby/rubycodegen.h b/rlgen-ruby/rubycodegen.h index 2599094..a00b24e 100644 --- a/rlgen-ruby/rubycodegen.h +++ b/rlgen-ruby/rubycodegen.h @@ -56,6 +56,7 @@ public: virtual void writeEOF(); virtual void writeInit(); virtual void writeData(); + virtual void writeExports(); virtual void finishRagelDef(); protected: -- 2.7.4