コード例 #1
0
ファイル: simple.hpp プロジェクト: Ambrosys/gpcxx
void write_simple_cursor( std::ostream &out , Cursor t , bool write_infix , SymbolMapper const& mapper )
{
    if( ( t.size() == 2 ) && write_infix )
    {
        Cursor left = t.children( 0 );
        Cursor right = t.children( 1 );
        
        if( left.size() == 2 ) out << "( ";
        write_simple_cursor( out , left , write_infix , mapper );
        if( left.size() == 2 ) out << " )";

        out << " " << mapper( *t ) << " ";
    
        if( right.size() == 2 ) out << "( ";
        write_simple_cursor( out , right , write_infix , mapper );
        if( right.size() == 2 ) out << " )";
    }
    else
    {
        out << mapper( *t );
        if( t.size() > 0 )
        {
            out << "( ";
            for( size_t i=0 ; i<t.size() ; ++i )
            {
                if( i != 0 ) out << " , ";
                write_simple_cursor( out , t.children(i) , write_infix , mapper );
            }
            out << " )";
        }
    }

}
コード例 #2
0
ファイル: polish.hpp プロジェクト: Ambrosys/gpcxx
void write_polish_cursor( std::ostream &out , Cursor t , std::string const& sep , std::string const &opening , std::string const& closing , SymbolMapper const& mapper )
{
    if( t.size() != 0 ) out << opening;
    out << mapper( *t );
    if( t.size() != 0 )
    {
        out << sep;
        write_polish_cursor( out , t.children( 0 ) , sep , opening , closing , mapper );
    }
    for( size_t i=1 ; i<t.size(); ++i )
    {
        out << sep;
        write_polish_cursor( out , t.children( i ) , sep , opening , closing , mapper );
    }
    if( t.size() != 0 ) out << closing;
}
コード例 #3
0
 void seperate_nodes( Cursor c , std::vector< Cursor > & internal, std::vector< Cursor > & terminal)
 {
     if( c.size() > 1 )
     {
         internal.emplace_back( c );
         for( size_t i = 0 ; i < c.size() ; ++i )
             seperate_nodes( c.children( i ) , internal , terminal );
     }
     else
     {
         terminal.emplace_back( c );
     }
 }