Out of code here is what and how I wish to generate.<div><div><br></div><div><div>Start: { Push( Module( arg_input_name ) ) } Global { Pop() }</div><div><br></div><div>Global: </div><div>   | Namespace { Push( new Module(Top, $<a href="http://1.name">1.name</a>) ) } Global { Pop(); }</div>
<div>   | Object { Push( new Object(Top, $<a href="http://1.name">1.name</a>) ) } ObjectElements { Pop(); }</div><div>
   | Function { Top.GenerateFunction( $1 ) }</div><div>   | Enum Enumerations { for_each( e in $2 ) Top.GenerateVariable( e ) }</div><div>   | Variable { Top.GenerateVariable( $1 ) }</div><div><br></div><div>ObjectElements:</div>
<div>   | Methods { Top.GenerateMethod( $1 ) }</div><div>   | Variable { Top.GenerateVariable( $1 ) }</div><div><br></div><div>// Here is my start to an implementation</div><div><div><br></div><div>static std::stack<Base*> STACK;</div>
<div>Push( Base * base ) { STACK.push(base); }</div><div>Pop() { STACK.top().finish(); STACK.pop(); }</div></div><div><br></div><div><div>struct Base {</div><div>   static std::vector<std::stringstream> modules;</div>
<div>   static std::ostream & createNewStream() {</div><div>      modules.push_back( std::stringstream() );</div><div>      std::ostream & out = modules.back();</div><div>      out << HEADERS;<br>   }</div><div>
<br></div><div>  virutal std::ostream & getStream() = 0;</div>  virtual void GenerateFunction( clang::FunctionDecl * ) { throw new std::exception("Function is not implemented."); }<div>  virtual void GenerateObject( clang::ObjectDecl * ) { throw new std::exception("Function is not implemented."); }</div>
<div>  virtual void GenerateVariable( clang::VariableDecl * ) { throw new std::exception("Function is not implemented."); }</div><div>  virtual void GenerateMethod( clang::FuctionDecl * ) { throw new std::exception("Function is not implemented."); }</div>
<div>  virtual void finish();</div><div>};</div></div><div><br></div><div><br></div><div>struct Module : Base {</div><div><br></div><div>   std::string name;</div>   std::ostream & out;</div><div>   virutal std::ostream & getStream() { return out; }</div>
<div><br><div>   Module( const Module * createdFrom, std::string NamespaceName ) : out( createNewStream() ) {</div><div>     this->name = createdFrom.name;</div><div>     this->name.append(".").append(name);</div>
<div>     </div><div>     out << "#include<boost\python.hpp>" << std::endl;</div><div><span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "><span class="identifier" style="color: rgb(0, 0, 0); ">   <span class="Apple-style-span" style="font-family: arial; white-space: normal; font-size: small; ">out</span> << "BOOST_PYTHON_MODULE</span><span class="special" style="color: rgb(112, 112, 112); ">(</span><span class="identifier" style="color: rgb(0, 0, 0); ">"<<this->name<<"</span><span class="identifier"><font class="Apple-style-span" color="#707070">){"</font></span></span><< std::endl;<br>
<span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "><span class="identifier">   <span class="Apple-style-span" style="font-family: arial; white-space: normal; font-size: small; color: rgb(0, 0, 0); ">out</span> << "<span class="keyword" style="color: rgb(0, 0, 170); ">using</span> <span class="keyword" style="color: rgb(0, 0, 170); ">namespace</span> <span class="identifier" style="color: rgb(0, 0, 0); ">boost</span><span class="special" style="color: rgb(112, 112, 112); ">::</span><span class="identifier" style="color: rgb(0, 0, 0); ">python</span><span class="special" style="color: rgb(112, 112, 112); ">;</span><span class="Apple-style-span" style="font-family: arial; white-space: normal; font-size: small; "><span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "><span class="identifier"><font class="Apple-style-span" color="#707070">"</font></span></span><< std::endl;</span><br>
</span></span><div>   }</div><div>   void GenerateFunction( clang::FunctionDecl * fn ) { </div><div>      if( basic(fn) )</div><div>        out << "def(\""<<fn->getName()<<"\","<<fn->getName()<<");"<<std::endl;</div>
<div>      // Add descriptors from the function.</div><div>      // see <a href="http://www.boost.org/doc/libs/1_44_0/libs/python/doc/v2/reference.html#models_of_call_policies">http://www.boost.org/doc/libs/1_44_0/libs/python/doc/v2/reference.html#models_of_call_policies</a></div>
<div>   }</div><div>   void GenerateVariable( clang::VariableDecl * decl ) {</div><div>      if( basic(decl) )</div>        out << "def(\""<<decl->getName()<<"\","<<decl->getName()<<");"<<std::endl;</div>
<div>      // FIXME: Add more variable properties.<br><div>   }</div>   void GenerateObject( clang::ObjectDecl * obj ) {</div><div>      out << ";" << std::endl;</div><div>   }</div><div><br><div>   void * operator new() { std::allocator( /* I forget how exactly to do this */ ).alloc( sizeof(Module) ); }</div>
<div>   void delete() { /*... I forget how to use the std::allocator again. */ }</div><div>};</div><div><br></div>struct Object : Base {</div><div><br></div><div>   std::ostream & out;</div><div>   // Since we cannot rely on all the constructors being seen until the whole object has been finalized.</div>
<div><br></div><div><div>   Object( Object * obj ) : out( createNewStream() ) {</div><div>     out << /* output object header definition. */ ;</div><div>     // Something like:</div><div>     // <span class="Apple-style-span" style="font-family: monospace; font-size: 12px; white-space: pre; "><span class="identifier" style="color: rgb(0, 0, 0); ">class_</span><span class="special" style="color: rgb(112, 112, 112); "><</span><span class="identifier" style="color: rgb(0, 0, 0); ">World</span><span class="special" style="color: rgb(112, 112, 112); ">>(</span><span class="string" style="color: teal; ">"World"</span><span class="special" style="color: rgb(112, 112, 112); ">,</span> /*add constructors as they are seen.*/ <span class="identifier" style="color: rgb(0, 0, 0); ">init</span><span class="special" style="color: rgb(112, 112, 112); "><</span><span class="identifier" style="color: rgb(0, 0, 0); ">std</span><span class="special" style="color: rgb(112, 112, 112); ">::</span><span class="identifier" style="color: rgb(0, 0, 0); ">string</span><span class="special" style="color: rgb(112, 112, 112); ">>())</span></span><div>
   }</div></div></div><div><br></div><div><div>  void GenerateMethod( clang::FuctionDecl * fn );</div><div>  void GenerateVariable( clang::VariableDecl * var );</div><div>  void GenerateObject( clang::ObjectDecl * obj );</div>
<div>  void finish() {</div><div>    if( ! haveBody() ) </div><div>      ss.clear();<br>  }</div><div><br></div><div><div>   void * operator new() { std::allocator( /* I forget how exactly to do this */ ).alloc( sizeof(Module) ); }</div>
<div>   void delete() { /*... I forget how to use the std::allocator again. */ }</div></div><div>};</div><div><br><div class="gmail_quote">On Sat, Nov 6, 2010 at 9:25 AM, Jeff Kunkel <span dir="ltr"><<a href="mailto:jdkunk3@gmail.com" target="_blank">jdkunk3@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Has anyone tried to build and extend LLVM and Clang with SWIG?<br><div><br></div><div>- Thanks</div><div>- Jeff Kunkel <div>

<div></div><div><br><br><div class="gmail_quote">On Sat, Nov 6, 2010 at 8:21 AM, Rolf Banting <span dir="ltr"><<a href="http://rolf.b.mr" target="_blank">rolf.b.mr</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br><br><div class="gmail_quote">On Fri, Nov 5, 2010 at 7:56 PM, Jeff Kunkel <span dir="ltr"><<a href="mailto:jdkunk3@gmail.com" target="_blank">jdkunk3@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="border-left:1px solid rgb(204, 204, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex">
I would like to use Clang to take many C++ classes and wrap them with the Boost::Python for use with python code.<br><div><br></div><div>Does anyone have any advice? </div><div>Has this been done already?</div><br>
<br></blockquote></div></div> Does SWIG (<span></span><a href="http://swig.org/" rel="nofollow" target="_blank">swig.org</a>) not do what you want?<br><font color="#888888"><br>Rolf<br>
</font></blockquote></div><br></div></div></div>
</blockquote></div><br></div>
</div></div></div>