From 4881754402d11dd8b7a4fccc359991e33fb2498b Mon Sep 17 00:00:00 2001 From: Charles Baker Date: Sun, 16 Jul 2023 08:10:39 +1200 Subject: [PATCH] Avoid initializing Parser with invalid ParserStateMachine When a grammar fails to generate a parser the ParserStateMachine has a null start state. When this is passed to construct a Parser quietly avoid creating any parser specific state, esp. ParserNode which will assert if passed a null state. --- src/lalr/Parser.ipp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lalr/Parser.ipp b/src/lalr/Parser.ipp index dad237c..87bf9be 100644 --- a/src/lalr/Parser.ipp +++ b/src/lalr/Parser.ipp @@ -82,10 +82,13 @@ Parser::Parser( const ParserStateMa ++action; } - nodes_.reserve( 64 ); - user_data_.reserve( 64 ); - nodes_.push_back( ParserNode(state_machine_->start_state, nullptr, 0, 1) ); - user_data_.push_back( UserData() ); + if ( state_machine_->start_state ) + { + nodes_.reserve( 64 ); + user_data_.reserve( 64 ); + nodes_.push_back( ParserNode(state_machine_->start_state, nullptr, 0, 1) ); + user_data_.push_back( UserData() ); + } } /**