OutdatedExpression Parser Release [1x9]

Posts 15 of 5 · Page 1 of 1
Expression Parser Release [1x9]
Introduction
Welcome to the release of Expression parser version 1x9.
This is going to be a short thread as all the necessary information can be found in my other threads created about ep, they can be seen at the bottom of this page.

What is Expression Parser?
Ep, which by the way is short for Expression Parser, is a new scripting language created for the sole purpose of being used by MPGH members exclusively. It's meant to work along the side of C++, meaning you can directly use ep in your C++ Applications by simply including the ep headers and libraries. The now improved C++ portability means you can have ep arguments (variable_list) automatically deduced into arguments at C++ compile time.

I wanna learn more, how does it work?
Expression Parser Theoretical Introduction
Expression Parser Practical and Syntactical Introduction


Changelog
[...]

Version 1x7
Code:
- Added a few new working keywords (means they're implemented)
    break
    continue
    public
    private
    
- Added the ability for a developer to specift if an argument should be a ep reference
  (using the automatic deduction method) specify your argument as ep::argument_ref_ptr.
  
- Added implementation of binary files (use epcc to compile your *.ep file into a *.oep)

- Huge improvements/bug fixes to asignments (before you couldn't do object->x = 5, or get_x() = 5)
  you can now! Yay.
Version 1x8
Code:
- Added more C++ type safety.'
  You can no longer create value_reference of int and cast it to e.g double.
  
- Fixed an assignment bug (I forgot to change a function)

- Remade error message system completely and it now has better error messages.

- Made some changes to value reference.
Version 1x9
Code:
- Added 'type_info' type (use either typeid() or type_info() to construct)
  it provides the basic utilites needed to check the run-time type information
  of variables etc.
  
 - Added standard type nullptr_t (use nullptr keyword/variable)
  
- Added ability to import dll's that are using the EP plugin format
  (instead of specifying it inside of the ep::module constructor, it
   can still be done like that though)
  
- Added optional new import syntax, totally didn't steal it from go ;)
  You can now import multiple libraries or files with one import statement.
  Example:
	import( bo, 
	        ios, 
			vector,
			"somefile.ep",
			"somelibrary.dll" );
  
- Optimized some of the evaluation code (Move semantics etc)

- Fixed an internal parser error when converting infix to (not actual) postfix.
  The following expression would fail to be parsed because a trailing '(' was
  added to the end of the postfix expression (no parentheses allowed):
	typeid( "hi" )->bare_equal( typeid( 6 ) )
  This is now fixed, and should produce a valid postfix output.

- Fixed a bug when accessing member methods, it didn't check the arity
  of the arguments on the stack, so it caused an uncatchable exception.
  
- Fixed a few ep_error bugs (lol)

- Fixed a bug in 'vector::for_each' using the wrong argument.

- Fixed a value_reference bug (it would attempt to destroy references)

- Fixed a bug in bo::operator! (doing it with any other type than 'floating' would throw a conversion error)

- Fixed yet another access bug.
  The error would happen whenever you did something like this:
	type->get()->method( argument );
  The postfix output would be falsely generated here, it would attempt to access 'method'
  from 'argument', instead of the rvalue returned from 'type->get()'.
Sincerely,
Yamiez.
expression parser_mpgh.net.rar6.5 MB · 12 downloads Clean
2 downloads for months of work

Nontheless, still working hard on ep, believe it or not but remaking the compiler took me 3 or so days of rigorous debugging.

Upcoming release:
Code:
If you are sharing your ep source code, there is no need to give away your library modules (.dll) as well. 
Because they're built into the generated *.oep compiled file! This is what took all of my debugging time, it was.. agitating.

Adding run-time overload-like behaviour, using the "specialize" keyword, you can specialize methods to certain expressions,
like such:
import( bo, type_traits );

method add( &a, &b )
{
    // do some error reporting because a and b are invalid
};

specialize<is_arithmetic( a ) && is_arithmetic( b );>
method add( &a, &b )
{
     return a + b;
};

specialize<is_string_literal( a ) && is_arithmetic( b );>
method add( &a, &b )
{
     return a + b;
};

specialize<is_string_literal( a ) && is_string_literal( b );>
method add( &a, &b )
{
    return a + b;
};

// here, we can only assume the operator '+' of 'a' only supports a same type
// rhs argument. (b)
specialize<is_same( a, b ) && type_has_method( a, "+" );>
method add( &a, &b )
{
    return a + b;
};
Also, sneak peak of a library I've been implementing:
Code:
-->> Type system:
---->> floating
-------->> floating::floating( &other )
-------->> floating::~floating( )
-------->> floating::=( &rhs )
-------->> floating::+( &rhs )
-------->> floating::-( &rhs )
-------->> floating::*( &rhs )
-------->> floating::/( &rhs )
-------->> floating::&&( &rhs )
-------->> floating::||( &rhs )
-------->> floating::==( &rhs )
-------->> floating::!=( &rhs )
-------->> floating::>( &rhs )
-------->> floating::<( &rhs )
-------->> floating::>=( &rhs )
-------->> floating::<=( &rhs )

---->> integral
-------->> integral::integral( &other )
-------->> integral::~integral( )
-------->> integral::=( &rhs )
-------->> integral::+( &rhs )
-------->> integral::-( &rhs )
-------->> integral::*( &rhs )
-------->> integral::/( &rhs )
-------->> integral::%( &rhs )
-------->> integral::&( &rhs )
-------->> integral::|( &rhs )
-------->> integral::&&( &rhs )
-------->> integral::||( &rhs )
-------->> integral::==( &rhs )
-------->> integral::!=( &rhs )
-------->> integral::>( &rhs )
-------->> integral::<( &rhs )
-------->> integral::>=( &rhs )
-------->> integral::<=( &rhs )
-------->> integral::~( )
-------->> integral::^( &rhs )

---->> string_literal
-------->> string_literal::string_literal( &other )
-------->> string_literal::~string_literal( )
-------->> string_literal::=( &rhs )
-------->> string_literal::==( &rhs )
-------->> string_literal::!=( &rhs )
-------->> string_literal::+( &rhs )

---->> type_info
-------->> type_info::type_info( &other )
-------->> type_info::~type_info( )
-------->> type_info::bare_equal( &other )
-------->> type_info::get_name( )
-------->> type_info::==( &other )
-------->> type_info::!=( &other )
-------->> type_info::=( &other )

---->> nullptr_t
-------->> nullptr_t::~nullptr_t( )

---->> vector
-------->> vector::vector( )
-------->> vector::~vector( )
-------->> vector::emplace_back( &element )
-------->> vector::erase( &it )
-------->> vector::begin( )
-------->> vector::end( )
-------->> vector::for_each( &method )
-------->> vector::pop_back( )
-------->> vector::clear( )
-------->> vector::empty( )
-------->> vector::size( )
-------->> vector::capacity( )

---->> vector::iterator
-------->> vector::iterator::~vector::iterator( )
-------->> vector::iterator::<( &it1 )
-------->> vector::iterator::>( &it1 )
-------->> vector::iterator::increment( )
-------->> vector::iterator::decrement( )
-------->> vector::iterator::access( )

---->> dx_Application
-------->> dx_Application::~dx_Application( )
-------->> dx_Application::run( )
-------->> dx_Application::exit( )
-------->> dx_Application::register_window( &arg1 )
-------->> dx_Application::unregister_window( &arg1 )
-------->> dx_Application::set_tick_rate( &arg1 )
-------->> dx_Application::set_clipboard( &arg1 )
-------->> dx_Application::on_tick( &arg1 )
-------->> dx_Application::begin_invoke( &arg1 )
-------->> dx_Application::=( &arg1 )

---->> dx_Vector2
-------->> dx_Vector2::dx_Vector2( &arg, &arg1 )
-------->> dx_Vector2::~dx_Vector2( )
-------->> dx_Vector2::intersects( &arg1 )
-------->> dx_Vector2::dot( &arg1 )
-------->> dx_Vector2::magnitude( )
-------->> dx_Vector2::+=( &arg1 )
-------->> dx_Vector2::-=( &arg1 )
-------->> dx_Vector2::=( &arg1 )
-------->> dx_Vector2::+( &arg1 )
-------->> dx_Vector2::-( &arg1 )
-------->> dx_Vector2::*( &arg1 )
-------->> dx_Vector2::/( &arg1 )
-------->> dx_Vector2::>( &arg1 )
-------->> dx_Vector2::<( &arg1 )
-------->> dx_Vector2::>=( &arg1 )
-------->> dx_Vector2::<=( &arg1 )
-------->> dx_Vector2::==( &arg1 )
-------->> dx_Vector2::!=( &arg1 )
-------->> dx_Vector2::get_x( )
-------->> dx_Vector2::get_y( )

---->> dx_Region
-------->> dx_Region::dx_Region( &arg, &arg1 )
-------->> dx_Region::~dx_Region( )
-------->> dx_Region::move_by( &arg1 )
-------->> dx_Region::move_to( &arg1 )
-------->> dx_Region::resize_by( &arg1 )
-------->> dx_Region::resize_to( &arg1 )
-------->> dx_Region::intersects( &arg1 )
-------->> dx_Region::get_position( )
-------->> dx_Region::get_size( )

---->> dx_Path
-------->> dx_Path::dx_Path( &arg )
-------->> dx_Path::~dx_Path( )
-------->> dx_Path::as_string( )
-------->> dx_Path::previous( )
-------->> dx_Path::upto_previous( )
-------->> dx_Path::root( )
-------->> dx_Path::filename( )
-------->> dx_Path::extension( )
-------->> dx_Path::branches( )
-------->> dx_Path::remove_extension( )
-------->> dx_Path::remove_directories( )
-------->> dx_Path::remove_filename( )
-------->> dx_Path::extension_is( &arg1 )
-------->> dx_Path::has_extension( )
-------->> dx_Path::has_filename( )
-------->> dx_Path::has_branches( )
-------->> dx_Path::is_directory( )
-------->> dx_Path::=( &arg1 )

---->> dx_Texture
-------->> dx_Texture::dx_Texture( &arg, &arg1 )
-------->> dx_Texture::~dx_Texture( )
-------->> dx_Texture::get_size( )
-------->> dx_Texture::paint( &arg1 )
-------->> dx_Texture::=( &arg1 )

---->> dx_Pen
-------->> dx_Pen::dx_Pen( &arg, &arg1 )
-------->> dx_Pen::~dx_Pen( )
-------->> dx_Pen::get_color( )
-------->> dx_Pen::set_color( &arg1 )
-------->> dx_Pen::get_thickness( )
-------->> dx_Pen::set_thickness( &arg1 )
-------->> dx_Pen::=( &arg1 )

---->> dx_FontContext
-------->> dx_FontContext::dx_FontContext( )
-------->> dx_FontContext::~dx_FontContext( )
-------->> dx_FontContext::get_height( )
-------->> dx_FontContext::get_weight( )
-------->> dx_FontContext::set_height( &arg1 )
-------->> dx_FontContext::set_weight( &arg1 )
-------->> dx_FontContext::make_proof_quality( )
-------->> dx_FontContext::make_default_quality( )
-------->> dx_FontContext::=( &arg1 )

---->> dx_Font
-------->> dx_Font::dx_Font( &arg, &arg1, &arg2 )
-------->> dx_Font::~dx_Font( )
-------->> dx_Font::get_context( )
-------->> dx_Font::string_size( &arg1 )
-------->> dx_Font::=( &arg1 )

---->> dx_Line
-------->> dx_Line::dx_Line( &arg, &arg1, &arg2 )
-------->> dx_Line::~dx_Line( )
-------->> dx_Line::get_position( )
-------->> dx_Line::get_target( )
-------->> dx_Line::get_pen( )
-------->> dx_Line::set_position( &arg1 )
-------->> dx_Line::set_target( &arg1 )
-------->> dx_Line::set_pen( &arg1 )
-------->> dx_Line::=( &arg1 )

---->> dx_Text
-------->> dx_Text::dx_Text( &arg, &arg1, &arg2, &arg3 )
-------->> dx_Text::~dx_Text( )
-------->> dx_Text::get_font( )
-------->> dx_Text::get_text( )
-------->> dx_Text::get_position( )
-------->> dx_Text::get_max_clip( )
-------->> dx_Text::set_font( &arg1 )
-------->> dx_Text::set_text( &arg1 )
-------->> dx_Text::set_position( &arg1 )
-------->> dx_Text::set_max_clip( &arg1 )
-------->> dx_Text::=( &arg1 )

---->> dx_WindowMovedArgs
-------->> dx_WindowMovedArgs::~dx_WindowMovedArgs( )
-------->> dx_WindowMovedArgs::is_handled( )
-------->> dx_WindowMovedArgs::get_region( )
-------->> dx_WindowMovedArgs::make_handled( )

---->> dx_WindowResizedArgs
-------->> dx_WindowResizedArgs::~dx_WindowResizedArgs( )
-------->> dx_WindowResizedArgs::is_handled( )
-------->> dx_WindowResizedArgs::get_region( )
-------->> dx_WindowResizedArgs::make_handled( )

---->> dx_WindowClosingArgs
-------->> dx_WindowClosingArgs::~dx_WindowClosingArgs( )
-------->> dx_WindowClosingArgs::is_handled( )
-------->> dx_WindowClosingArgs::get_should_close( )
-------->> dx_WindowClosingArgs::set_should_close( &arg1 )
-------->> dx_WindowClosingArgs::make_handled( )

---->> dx_KeyDownArgs
-------->> dx_KeyDownArgs::~dx_KeyDownArgs( )
-------->> dx_KeyDownArgs::is_handled( )
-------->> dx_KeyDownArgs::make_handled( )
-------->> dx_KeyDownArgs::is_ctrl_down( )
-------->> dx_KeyDownArgs::is_shift_down( )
-------->> dx_KeyDownArgs::get_key_code( )

---->> dx_KeyUpArgs
-------->> dx_KeyUpArgs::~dx_KeyUpArgs( )
-------->> dx_KeyUpArgs::is_handled( )
-------->> dx_KeyUpArgs::make_handled( )
-------->> dx_KeyUpArgs::is_ctrl_down( )
-------->> dx_KeyUpArgs::is_shift_down( )
-------->> dx_KeyUpArgs::get_key_code( )

---->> dx_KeyDownCharArgs
-------->> dx_KeyDownCharArgs::~dx_KeyDownCharArgs( )
-------->> dx_KeyDownCharArgs::is_handled( )
-------->> dx_KeyDownCharArgs::make_handled( )
-------->> dx_KeyDownCharArgs::get_string( )

---->> dx_MouseMovedArgs
-------->> dx_MouseMovedArgs::~dx_MouseMovedArgs( )
-------->> dx_MouseMovedArgs::is_handled( )
-------->> dx_MouseMovedArgs::make_handled( )
-------->> dx_MouseMovedArgs::is_ctrl_down( )
-------->> dx_MouseMovedArgs::is_shift_down( )
-------->> dx_MouseMovedArgs::get_position( )

---->> dx_MouseClickedArgs
-------->> dx_MouseClickedArgs::~dx_MouseClickedArgs( )
-------->> dx_MouseClickedArgs::is_handled( )
-------->> dx_MouseClickedArgs::make_handled( )
-------->> dx_MouseClickedArgs::is_ctrl_down( )
-------->> dx_MouseClickedArgs::is_shift_down( )
-------->> dx_MouseClickedArgs::get_key_code( )
-------->> dx_MouseClickedArgs::get_position( )

---->> dx_MouseReleasedArgs
-------->> dx_MouseReleasedArgs::~dx_MouseReleasedArgs( )
-------->> dx_MouseReleasedArgs::is_handled( )
-------->> dx_MouseReleasedArgs::make_handled( )
-------->> dx_MouseReleasedArgs::is_ctrl_down( )
-------->> dx_MouseReleasedArgs::is_shift_down( )
-------->> dx_MouseReleasedArgs::get_key_code( )
-------->> dx_MouseReleasedArgs::get_position( )

---->> dx_ScrollArgs
-------->> dx_ScrollArgs::~dx_ScrollArgs( )
-------->> dx_ScrollArgs::is_handled( )
-------->> dx_ScrollArgs::make_handled( )
-------->> dx_ScrollArgs::is_ctrl_down( )
-------->> dx_ScrollArgs::is_shift_down( )
-------->> dx_ScrollArgs::is_scrolling_up( )
-------->> dx_ScrollArgs::is_scrolling_down( )

---->> dx_MessageDataArgs
-------->> dx_MessageDataArgs::~dx_MessageDataArgs( )
-------->> dx_MessageDataArgs::is_handled( )
-------->> dx_MessageDataArgs::make_handled( )
-------->> dx_MessageDataArgs::get_lparam( )
-------->> dx_MessageDataArgs::get_wparam( )
-------->> dx_MessageDataArgs::get_msg_code( )

---->> dx_Window
-------->> dx_Window::dx_Window( &arg, &arg1, &arg2, &arg3 )
-------->> dx_Window::~dx_Window( )
-------->> dx_Window::get_title( )
-------->> dx_Window::get_class( )
-------->> dx_Window::client_to_screen( &arg1 )
-------->> dx_Window::screen_to_client( &arg1 )
-------->> dx_Window::hide( )
-------->> dx_Window::show( )
-------->> dx_Window::bring_to_top( )
-------->> dx_Window::minimize( )
-------->> dx_Window::maximize( )
-------->> dx_Window::restore( )
-------->> dx_Window::force_paint( )
-------->> dx_Window::enable( )
-------->> dx_Window::disable( )
-------->> dx_Window::load_icon( &arg1 )
-------->> dx_Window::load_icon_small( &arg1 )
-------->> dx_Window::close( )
-------->> dx_Window::get_parent( )
-------->> dx_Window::get_painter( )
-------->> dx_Window::set_painter( &arg1, &arg2 )
-------->> dx_Window::has_painter( )
-------->> dx_Window::get_width( )
-------->> dx_Window::get_height( )
-------->> dx_Window::is_ctrl_held( )
-------->> dx_Window::is_shift_held( )
-------->> dx_Window::is_key_down( &arg1 )
-------->> dx_Window::handle_tasks( )
-------->> dx_Window::poll_events( )
-------->> dx_Window::=( &arg1 )
-------->> dx_Window::dont_paint_on_event( )
-------->> dx_Window::paint_on_event( )
-------->> dx_Window::on_window_resize( &arg1 )
-------->> dx_Window::on_window_moved( &arg1 )
-------->> dx_Window::on_paint( &arg1 )
-------->> dx_Window::on_window_maximize( &arg1 )
-------->> dx_Window::on_window_minimize( &arg1 )
-------->> dx_Window::on_window_restored( &arg1 )
-------->> dx_Window::on_window_closed( &arg1 )
-------->> dx_Window::on_window_closing( &arg1 )
-------->> dx_Window::on_mouse_moved( &arg1 )
-------->> dx_Window::on_mouse_clicked( &arg1 )
-------->> dx_Window::on_mouse_released( &arg1 )
-------->> dx_Window::on_mouse_double_clicked( &arg1 )
-------->> dx_Window::on_mouse_scroll( &arg1 )
-------->> dx_Window::on_key_down( &arg1 )
-------->> dx_Window::on_key_up( &arg1 )
-------->> dx_Window::on_key_down_char( &arg1 )
-------->> dx_Window::on_handle_message( &arg1 )

---->> dx_Painter
-------->> dx_Painter::dx_Painter( &arg )
-------->> dx_Painter::~dx_Painter( )
-------->> dx_Painter::reset_painter( &arg1, &arg2 )
-------->> dx_Painter::begin_paint( )
-------->> dx_Painter::paint_text( &arg1, &arg2 )
-------->> dx_Painter::paint_rect( &arg1, &arg2 )
-------->> dx_Painter::paint_rect_outlined( &arg1, &arg2, &arg3 )
-------->> dx_Painter::paint_line( &arg1 )
-------->> dx_Painter::present_paint( )
-------->> dx_Painter::get_default_font( )
-------->> dx_Painter::set_default_font( &arg1 )
-------->> dx_Painter::=( &arg1 )

---->> thread
-------->> thread::thread( )
-------->> thread::~thread( )
-------->> thread::start( &arg1 )
-------->> thread::is_running( )
-------->> thread::wait( &arg1 )
-------->> thread::suspend( )
-------->> thread::resume( )
-------->> thread::kill( )
-------->> thread::sleep( &arg1 )

---->> milliseconds
-------->> milliseconds::milliseconds( &arg )
-------->> milliseconds::~milliseconds( )
-------->> milliseconds::count( )

---->> fstream
-------->> fstream::fstream( &fname, &ftype )
-------->> fstream::~fstream( )
-------->> fstream::close( )
-------->> fstream::eof( )
-------->> fstream::getln( )
-------->> fstream::putln( &input )
-------->> fstream::put( &input )
-------->> fstream::<<( &input )
-------->> fstream::>>( &output )

---->> ostream
-------->> ostream::~ostream( )
-------->> ostream::putln( &input )
-------->> ostream::put( &input )
-------->> ostream::<<( &input )

---->> istream
-------->> istream::~istream( )
-------->> istream::getln( )
-------->> istream::>>( &output )

---->> std::endl
-------->> std::endl::~std::endl( )
Working on ep2x0 still, it's taking extra long because I've been ill over the past few days, and as such most of my time goes towards studying so that I don't fall behind in school! 2x0 is ready to be released, however, I don't wanna release it untill I finish the newest revamped version of epcc!

Preview:
/Outdated, closed.
Posts 15 of 5 · Page 1 of 1
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Need help?