/*************************************************************** ERROR.C This file containts routines for printing error messages. PART OF : ZUBR - Parsers generator for multiple syntax language compilers . COMPILE : . NOTE : NONE . Copyright (C) 1995 - 2026 by Andrey V.Kosteltsev. All Rights Reserved. ***************************************************************/ /* This file contant RUSSIAN letters( code-page: UTF-8 ) ***************************************************************/ #include #ifndef __NO_COMPILE void fatal( __mpu_char16_t *message ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "FATAL ERROR:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s %s\n" ), msg, message ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 2 ); } void fatal_reorder( __mpu_char16_t *fname ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "FATAL ERROR:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s Can't reorder bytes in file \"%s\"\n" ), msg, fname ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 2 ); } void no_space( void ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0001 Cannot allocated memory" ); /* out of space */ mpu_fprintf( mpu_stderr, MPU_UCS2( "%s\n" ), msg ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 2 ); } void bad_filename( __mpu_char16_t *s, int l ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0002 Inadmissible file_name:" ); register int i; register int n; mpu_fprintf( mpu_stderr, MPU_UCS2( "%s %s\n" ), msg, s ); n = mpu_str16len( msg ); n += l + 1; for( i = 0; i < n; ++i ) mpu_putc( ' ', mpu_stderr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "^ illegal character\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void bad_fileprefix( __mpu_char16_t *s, int l ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0003 Inadmissible file_prefix:" ); register int i; register int n; mpu_fprintf( mpu_stderr, MPU_UCS2( "%s %s\n" ), msg, s ); n = mpu_str16len( msg ); n += l + 1; for( i = 0; i < n; ++i ) mpu_putc( ' ', mpu_stderr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "^ illegal character\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void bad_funcname( __mpu_char16_t *s, int l ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0004 Inadmissible fuction name or prefix:" ); register int i; register int n; mpu_fprintf( mpu_stderr, MPU_UCS2( "%s %s\n" ), msg, s ); n = mpu_str16len( msg ); n += l + 1; for( i = 0; i < n; ++i ) mpu_putc( ' ', mpu_stderr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "^ illegal character\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname); done( 1 ); } void open_error( __mpu_char16_t *filename ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0005 Cannot open file:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, filename ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 2 ); } void input_error( void ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0006 Cannot read UTF-8 input file:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void unexpected_EOF( void ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0006 Unexpected end-of-file:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void print_pos( __mpu_char16_t *st_line, __mpu_char16_t *st_cptr ) { register __mpu_char16_t *s; if( st_line == 0 ) return; for( s = st_line; *s != '\n'; ++s ) { if( zubr_is_print(*s) || *s == '\t' ) mpu_putc( *s, mpu_stderr ); else mpu_putc( '?', mpu_stderr ); } mpu_putc( '\n', mpu_stderr ); for( s = st_line; s < st_cptr; ++s ) { if( *s == '\t' ) mpu_putc( '\t', mpu_stderr ); else mpu_putc( ' ', mpu_stderr ); } mpu_putc( '^', mpu_stderr ); mpu_putc( '\n', mpu_stderr ); } void syntax_error( int st_lineno, __mpu_char16_t *st_line, __mpu_char16_t *st_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0007 Syntax error:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), st_lineno ); print_pos( st_line, st_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void unterminated_comment( int c_lineno, __mpu_char16_t *c_line, __mpu_char16_t *c_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0008 Unterminated comment:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), c_lineno ); print_pos( c_line, c_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void unterminated_string( int s_lineno, __mpu_char16_t *s_line, __mpu_char16_t *s_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0009 Unterminated string:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), s_lineno ); print_pos( s_line, s_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void unterminated_text( int t_lineno, __mpu_char16_t *t_line, __mpu_char16_t *t_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0010 Unmatched %%{ :" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), t_lineno ); print_pos( t_line, t_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void unterminated_union( int u_lineno, __mpu_char16_t *u_line, __mpu_char16_t *u_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0011 Unterminated %%union declaration:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), u_lineno ); print_pos( u_line, u_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void over_unionized( __mpu_char16_t *u_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0012 Too many %%union declarations:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); print_pos( line, u_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void illegal_character( __mpu_char16_t *c_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0013 Illegal character:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); print_pos( line, c_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void used_reserved( __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0014 Illegal use of reserved symbol:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " Symbol %s is reserved\n" ), s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void illegal_tag( int t_lineno, __mpu_char16_t *t_line, __mpu_char16_t *t_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0015 Illegal tag:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), t_lineno ); print_pos( t_line, t_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void tokenized_start( __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0016 Start symbol cannot be declared:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The start symbol %s cannot be declared to be a token\n" ), s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void terminal_start( __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0017 Start symbol cannot be declared:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The start symbol %s is a token\n" ), s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void no_grammar( void ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0018 No grammar has been specified:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void terminal_lhs( int s_lineno ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0019 Terminal lhs:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), s_lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " A token appears on the lhs of a production\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void unterminated_action( int a_lineno, __mpu_char16_t *a_line, __mpu_char16_t *a_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0020 Unterminated_action:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), a_lineno ); print_pos( a_line, a_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void untyped_lhs( void ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0021 Untyped lhs:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " $$ is untyped\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void untyped_rhs( int i, __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0022 Untyped rhs:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " $%d (%s) is untyped\n" ), i, s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void unknown_rhs( int i ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0023 Unknown rhs:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " $%d is untyped\n" ), i ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void undefined_goal( __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0024 Undefined start:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The start symbol %s is undefined\n" ), s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void dollar_error( int a_lineno, __mpu_char16_t *a_line, __mpu_char16_t *a_cptr ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0025 Dollar error:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), a_lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " Illegal $-name\n" ) ); print_pos( a_line, a_cptr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void bad_option( __mpu_char16_t *s ) { /* можно потом поставить на № 0005 */ __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0026 Invalid option:" ); register int i; register int n; mpu_fprintf( mpu_stderr, MPU_UCS2( "%s %s\n" ), msg, s ); n = mpu_str16len( msg ); n += 1; for( i = 0; i < n; ++i ) mpu_putc( ' ', mpu_stderr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "^ illegal option\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } void bad_code_page( __mpu_char16_t *s, __mpu_char16_t *p ) { /* можно потом поставить на № 0006 */ __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "ERROR 0027 Invalid parameter in option:" ); register int i; register int n; mpu_fprintf( mpu_stderr, MPU_UCS2( "%s %s %s\n" ), msg, s, p ); n = mpu_str16len( msg ) + mpu_str16len( s ); n += 2; for( i = 0; i < n; ++i ) mpu_putc( ' ', mpu_stderr ); mpu_fprintf( mpu_stderr, MPU_UCS2( "^ illegal code page\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: return bad status\n" ), myname ); done( 1 ); } /******* warnings ******************************************************/ void dollar_warning( int a_lineno, int i ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "WARNING 0001 Dollar warning:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), a_lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " $%d references beyond the end of the current rule\n" ), i ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: inform of warning status\n" ), myname ); } void retyped_warning( __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "WARNING 0002 Redeclared type:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The type of %s has been redeclared\n" ), s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: inform of warning status\n" ), myname ); } void reprec_warning( __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "WARNING 0003 Redeclared precedence:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The precedence of %s has been redeclared\n" ), s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: inform of warning status\n" ), myname ); } void revalued_warning( __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "WARNING 0004 Redeclared value:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The value of %s has been redeclared\n" ), s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: inform of warning status\n" ), myname ); } void restarted_warning( void ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "WARNING 0005 Redeclared start symbol:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The start symbol has been redeclared\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: inform of warning status\n" ), myname ); } void default_action_warning( void ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "WARNING 0006 Default action:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The default action assigns an undefined value to $$\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: inform of warning status\n" ), myname ); } void undefined_symbol_warning( __mpu_char16_t *s ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "WARNING 0007 Undefined_symbol:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " The symbol %s is undefined\n" ), s ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: inform of warning status\n" ), myname ); } void prec_redeclared( void ) { __mpu_char16_t *msg = (__mpu_char16_t *)MPU_UCS2( "WARNING 0008 Conflicting %%prec:" ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s \"%s\"\n" ), msg, input_file_name ); mpu_fprintf( mpu_stderr, MPU_UCS2( " #line %d\n" ), lineno ); mpu_fprintf( mpu_stderr, MPU_UCS2( " Conflicting %%prec specifiers\n" ) ); mpu_fprintf( mpu_stderr, MPU_UCS2( "%s: inform of warning status\n" ), myname ); } #endif /* __NO_COMPILE */ /************************* END OF FILE ERROR.H *************************/