mirror of
https://github.com/cwbaker/lalr.git
synced 2026-09-26 16:33:18 +03:00
Improve parser tests that check for errors
This commit is contained in:
parent
638de559ca
commit
919b0fe36b
1 changed files with 28 additions and 37 deletions
|
|
@ -64,44 +64,35 @@ SUITE( Parsers )
|
|||
}
|
||||
};
|
||||
|
||||
struct CheckParserErrorPolicy : public ErrorPolicy
|
||||
struct CheckErrorPolicy : public ErrorPolicy
|
||||
{
|
||||
int expected_error;
|
||||
int errors;
|
||||
std::vector<int> expected_errors_;
|
||||
int errors;
|
||||
|
||||
CheckParserErrorPolicy( int expected_error )
|
||||
: expected_error( expected_error )
|
||||
CheckErrorPolicy( int expected_error )
|
||||
: expected_errors_()
|
||||
, errors( 0 )
|
||||
{
|
||||
expected_errors_.push_back( expected_error );
|
||||
}
|
||||
|
||||
CheckErrorPolicy( std::initializer_list<int> expected_errors )
|
||||
: expected_errors_()
|
||||
, errors( 0 )
|
||||
{
|
||||
expected_errors_.insert( expected_errors_.end(), expected_errors.begin(), expected_errors.end() );
|
||||
}
|
||||
|
||||
void lalr_error( int /*line*/, int /*column*/, int error, const char* /*format*/, va_list /*args*/ )
|
||||
{
|
||||
(void) error;
|
||||
if ( errors < int(expected_errors_.size()) )
|
||||
{
|
||||
CHECK_EQUAL( expected_errors_[errors], error );
|
||||
}
|
||||
++errors;
|
||||
CHECK( error == expected_error );
|
||||
}
|
||||
};
|
||||
|
||||
struct CheckLexerErrorPolicy : public ErrorPolicy
|
||||
{
|
||||
int expected_error;
|
||||
int errors;
|
||||
|
||||
CheckLexerErrorPolicy( int expected_error )
|
||||
: expected_error( expected_error )
|
||||
, errors( 0 )
|
||||
{
|
||||
}
|
||||
|
||||
void lalr_error( int /*line*/, int /*column*/, int error, const char* /*format*/, va_list /*args*/ )
|
||||
{
|
||||
(void) error;
|
||||
++errors;
|
||||
CHECK( error == expected_error );
|
||||
}
|
||||
};
|
||||
|
||||
TEST( OrOperator )
|
||||
{
|
||||
const char* or_grammar =
|
||||
|
|
@ -813,7 +804,7 @@ SUITE( Parsers )
|
|||
"}"
|
||||
;
|
||||
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_SYNTAX );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_SYNTAX );
|
||||
ParserStateMachine parser_state_machine( missing_open_brace, missing_open_brace + strlen(missing_open_brace), &error_policy );
|
||||
CHECK( error_policy.errors == 1 );
|
||||
CHECK( parser_state_machine.start_state() == NULL );
|
||||
|
|
@ -830,7 +821,7 @@ SUITE( Parsers )
|
|||
"}"
|
||||
;
|
||||
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_SYNTAX );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_SYNTAX );
|
||||
ParserStateMachine parser_state_machine( missing_close_quotes, missing_close_quotes + strlen(missing_close_quotes), &error_policy );
|
||||
CHECK( error_policy.errors == 2 );
|
||||
CHECK( parser_state_machine.start_state() == NULL );
|
||||
|
|
@ -848,7 +839,7 @@ SUITE( Parsers )
|
|||
"}"
|
||||
;
|
||||
|
||||
CheckLexerErrorPolicy error_policy( LEXER_ERROR_SYNTAX );
|
||||
CheckErrorPolicy error_policy( LEXER_ERROR_SYNTAX );
|
||||
GrammarCompiler compiler;
|
||||
compiler.compile(
|
||||
syntax_errors_in_regular_expressions_grammar,
|
||||
|
|
@ -867,7 +858,7 @@ SUITE( Parsers )
|
|||
"}"
|
||||
;
|
||||
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_UNDEFINED_SYMBOL );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_UNDEFINED_SYMBOL );
|
||||
GrammarCompiler compiler;
|
||||
compiler.compile( undefined_symbol_grammar, undefined_symbol_grammar + strlen(undefined_symbol_grammar), &error_policy );
|
||||
CHECK( error_policy.errors == 1 );
|
||||
|
|
@ -882,7 +873,7 @@ SUITE( Parsers )
|
|||
"}"
|
||||
;
|
||||
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_UNREFERENCED_SYMBOL );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_UNREFERENCED_SYMBOL );
|
||||
GrammarCompiler compiler;
|
||||
compiler.compile(
|
||||
unreferenced_symbol_error_grammar,
|
||||
|
|
@ -913,7 +904,7 @@ SUITE( Parsers )
|
|||
;
|
||||
|
||||
GrammarCompiler compiler;
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_NONE );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_NONE );
|
||||
compiler.compile( precedence_directive_symbols_grammar, precedence_directive_symbols_grammar + strlen(precedence_directive_symbols_grammar), &error_policy );
|
||||
CHECK( error_policy.errors == 0 );
|
||||
}
|
||||
|
|
@ -929,7 +920,7 @@ SUITE( Parsers )
|
|||
" prototype: \"[A-Za-z_][A-Za-z_0-9]*\"; value: \"[A-Za-z_0-9\\./@:-]+\";\n"
|
||||
"}"
|
||||
;
|
||||
CheckLexerErrorPolicy error_policy( LEXER_ERROR_SYMBOL_CONFLICT );
|
||||
CheckErrorPolicy error_policy( LEXER_ERROR_SYMBOL_CONFLICT );
|
||||
GrammarCompiler compiler;
|
||||
compiler.compile( lexer_conflict_grammar, lexer_conflict_grammar + strlen(lexer_conflict_grammar), &error_policy );
|
||||
CHECK( error_policy.errors == 1 );
|
||||
|
|
@ -971,7 +962,7 @@ SUITE( Parsers )
|
|||
;
|
||||
|
||||
GrammarCompiler compiler;
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_NONE );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_NONE );
|
||||
compiler.compile( lexer_conflict_grammar, lexer_conflict_grammar + strlen(lexer_conflict_grammar), &error_policy );
|
||||
CHECK( error_policy.errors == 0 );
|
||||
|
||||
|
|
@ -1003,7 +994,7 @@ SUITE( Parsers )
|
|||
"}"
|
||||
;
|
||||
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_PARSE_TABLE_CONFLICT );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_PARSE_TABLE_CONFLICT );
|
||||
GrammarCompiler compiler;
|
||||
compiler.compile( associativity_grammar, associativity_grammar + strlen(associativity_grammar), &error_policy );
|
||||
CHECK( error_policy.errors == 0 );
|
||||
|
|
@ -1045,7 +1036,7 @@ SUITE( Parsers )
|
|||
;
|
||||
|
||||
GrammarCompiler compiler;
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_PARSE_TABLE_CONFLICT );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_PARSE_TABLE_CONFLICT );
|
||||
compiler.compile( precedence_grammar, precedence_grammar + strlen(precedence_grammar), &error_policy );
|
||||
CHECK( error_policy.errors == 0 );
|
||||
|
||||
|
|
@ -1071,7 +1062,7 @@ SUITE( Parsers )
|
|||
;
|
||||
|
||||
GrammarCompiler compiler;
|
||||
CheckParserErrorPolicy error_policy( PARSER_ERROR_ERROR_SYMBOL_ON_LEFT_HAND_SIDE );
|
||||
CheckErrorPolicy error_policy( PARSER_ERROR_ERROR_SYMBOL_ON_LEFT_HAND_SIDE );
|
||||
compiler.compile( grammar, grammar + strlen(grammar), &error_policy );
|
||||
CHECK( error_policy.errors == 1 );
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue