lestes::lang::cplus::lex Namespace Reference


Classes

class  basic_token
 Token template. More...
class  loc
 Test location. More...
class  testing_token
 Testing token. More...
class  concat
 Token concatenator. More...
class  condition
 Conditional directive. More...
class  condition_stack
 Conditional directive stack. More...
class  cpp_token
 C++ token. More...
class  data_source
 Abstract data source. More...
class  encoder
 Abstract encoder. More...
class  encoder_ascii7
 7 bit ASCII encoder. More...
class  encoder_factory
 Factory for encoders. More...
class  encoder_test
 Test encoder. More...
class  encoder_host
 Host chacter set encoder. More...
class  encoder_utf8
 UTF-8 encoder. More...
class  evaluator
 Directives evaluator. More...
class  expander
 Macro expander. More...
class  file_system
 File system binding. More...
class  lex_literal
 Base class for literals. More...
class  lex_integral_literal
 Integral literal. More...
class  lex_floating_literal
 Floating literal. More...
class  lex_character_literal
 Character literal. More...
class  lex_string_literal
 String literal. More...
class  lex_boolean_literal
 Boolean literal. More...
class  lex_literal_visitor
class  line_control
 Line number control. More...
class  line_join
 Line joining filter. More...
class  line_numbers
 Token numbering filter. More...
class  macro
 Preprocessor macro. More...
class  macro_argument
 Macro argument. More...
class  macro_arguments
 Macro argument list. More...
class  macro_body
class  macro_head
 Macro parameter list. More...
class  macro_item
 Expansion list item. More...
class  macro_storage
 Storage of defined macros. More...
class  named_istream
 Named input stream. More...
class  pp_filter
 Token filter. More...
class  pp_lex
 Integration with flexer. More...
class  pp_token
 Preprocessor token. More...
class  pre_lex
 Character level processing. More...
class  preprocessor
 C++ preprocessor. More...
class  simple_location
 Simple token location. More...
class  space_remover
 Whitespace remover. More...
class  special_tokens
 Token type assignment filter. More...
class  stream_source
 Stream data source. More...
class  string_joiner
 String literal joining filter. More...
class  string_source
 String data source. More...
class  string_translator
 Encoder into execution character set. More...
class  stringifier
 Token stringifier. More...
class  taboo_macros
 Set of taboo macros. More...
class  token_input
 Abstract input of tokens. More...
class  token_sequence
class  token_stream
 Stream of tokens. More...
class  token_value
 Token value. More...
class  trigraphs
 Trigraphs filter. More...
class  ucn_filter
 Token filter. More...
class  ucn_token
 Single source character token. More...
class  ucn_token_buffer
 Token buffer. More...
class  unit_part
 Part of translation unit. More...

Namespaces

namespace  concat_guts
namespace  pp_lex_guts

Typedefs

typedef basic_token< ttype,
ptr< loc >, int > 
basic_testing_token
 Helper typedef for basic_token template test.
typedef basic_token< int,
ptr< source_location >, ptr<
token_value > > 
basic_cpp_token
 Helper typedef.
typedef cpp_token::type_type cpp_token_type
 Type of token in cpp_token.
typedef encoder_test< 1 > enc1
 Helper typedef for test encoder.
typedef encoder_test< 2 > enc2
 Helper typedef for test encoder.
typedef encoder_test< 3 > enc3
 Helper typedef for test encoder.
typedef basic_token< lc_host_uint_least16,
ptr< source_location >, ptr<
token_value > > 
basic_pp_token
 Defines basic preprocessor token.
typedef pp_token::type_type pp_token_type
 Type of token in pp_token.
typedef vector< srp< simple_location > > vec_loc
typedef basic_token< lc_host_uint_least9,
ptr< simple_location >, ucn > 
basic_ucn_token
 Helper typedef.
typedef ucn_token::type_type ucn_token_type
 Type of token in ucn_token.

Enumerations

enum  ttype { POSITIVE = 1, ZERO = 0, NEGATIVE = -1 }
 Token type. More...

Functions

void basic_token_test (void)
 Tests basic token.
ptr< ::lestes::msg::message_stencil0<
bool > > 
unable_to_concatenate (::lestes::msg::message_stencil0< bool >::create("the concatenation does not result in a valid preprocessing token",::lestes::msg::message::FLG_ERROR))
void concat_test (void)
 Tests concat class.
void condition_test (void)
 Tests condition class.
ptr< ::lestes::msg::message_stencil0<
bool > > 
elif_without_if (::lestes::msg::message_stencil0< bool >::create("#elif without #if",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
endif_without_if (::lestes::msg::message_stencil0< bool >::create("#endif without #if",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
else_without_if (::lestes::msg::message_stencil0< bool >::create("#else without #if",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
elif_after_else (::lestes::msg::message_stencil0< bool >::create("#elif after #else",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
else_after_else (::lestes::msg::message_stencil0< bool >::create("#else after #else",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil1<
lstring > > 
unterminated_conditional (::lestes::msg::message_stencil1< lstring >::create("unterminated %0",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance()))
ptr< ::lestes::msg::message_stencil0<
bool > > 
conditional_starts_here (::lestes::msg::message_stencil0< bool >::create("the conditional starts here",::lestes::msg::message::FLG_ERROR))
void condition_stack_test (void)
 Tests condition class.
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_ascii_character (::lestes::msg::message_stencil0< bool >::create("the character is invalid for ASCII source encoding",::lestes::msg::message::FLG_ERROR))
void encoder_ascii7_test (void)
 Tests encoder_ascii7 class.
void encoder_factory_test (void)
 Tests encoder_factory class.
void encoder_host_test (void)
 Tests encoder_host class.
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_utf_character (::lestes::msg::message_stencil0< bool >::create("the character is invalid for UTF-8 source encoding",::lestes::msg::message::FLG_ERROR))
void encoder_utf8_test (void)
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_character_in_filename (::lestes::msg::message_stencil0< bool >::create("unsupported character in filename",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil1<
lstring > > 
trailing_tokens_in_directive (::lestes::msg::message_stencil1< lstring >::create("extra tokens at the end of %0 directive",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance()))
ptr< ::lestes::msg::message_stencil1<
lstring > > 
directive_expects_macro_name (::lestes::msg::message_stencil1< lstring >::create("expected macro name after %0",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance()))
ptr< ::lestes::msg::message_stencil1<
lstring > > 
unable_to_open_file (::lestes::msg::message_stencil1< lstring >::create("unable to open file `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance()))
ptr< ::lestes::msg::message_stencil0<
bool > > 
malformed_include (::lestes::msg::message_stencil0< bool >::create("malformed #include, expecting <filename> or \"filename\"",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
invalid_directve (::lestes::msg::message_stencil1< ucn_string >::create("invalid preprocessing directive `#%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil0<
bool > > 
line_expects_number (::lestes::msg::message_stencil0< bool >::create("first parameter of #line shall be decimal digit sequence between 1 and 32767",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
line_expects_string (::lestes::msg::message_stencil0< bool >::create("second parameter of #line shall be a string",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
user_error (::lestes::msg::message_stencil0< bool >::create("user defined error",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil1<
ulint > > 
nesting_too_deep (::lestes::msg::message_stencil1< ulint >::create("nesting of includes is too deep, only %0 levels supported",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ulint >::instance()))
 initialize_logger (lex_logger,"lex", cplus_logger)
 declare_logger (lex_logger)
 initialize_logger (pp_lex_logger,"pp_lex", lex_logger)
 initialize_logger (pp_lex_guts_logger,"pp_lex_guts", lex_logger)
 initialize_logger (preprocessor_logger,"preprocessor", lex_logger)
 initialize_logger (trigraphs_logger,"trigraphs", lex_logger)
 initialize_logger (pre_lex_logger,"pre_lex", lex_logger)
 declare_logger (pp_lex_logger)
 declare_logger (pp_lex_guts_logger)
 declare_logger (preprocessor_logger)
 declare_logger (trigraphs_logger)
 declare_logger (pre_lex_logger)
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
unterminated_argument_list (::lestes::msg::message_stencil1< ucn_string >::create("unterminated argument list invoking macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil2<
ucn_string, ulint > > 
invalid_argument_count (::lestes::msg::message_stencil2< ucn_string, ulint >::create("invalid argument count %1 invoking macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance(),::lestes::msg::formatter< ulint >::instance()))
ptr< ::lestes::msg::message_stencil0<
bool > > 
definition_expects_macro_name (::lestes::msg::message_stencil0< bool >::create("expected name of a macro",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
macro_name_alt_operator (::lestes::msg::message_stencil1< ucn_string >::create("alternative spelling `%0' of a C++ operator cannot be used as a macro name",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil0<
bool > > 
macro_name_identifier (::lestes::msg::message_stencil0< bool >::create("macro name must be an identifier",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
defined_invalid_macro_name (::lestes::msg::message_stencil0< bool >::create("`defined' cannot be used as a macro name",::lestes::msg::message::FLG_ERROR))
void macro_argument_test (void)
ptr< ::lestes::msg::message_stencil0<
bool > > 
hash_without_parameter (::lestes::msg::message_stencil0< bool >::create("'#' is not followed by a macro parameter",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
hash_hash_at_beginning (::lestes::msg::message_stencil0< bool >::create("'##' at the beginning of a macro expansion",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
hash_hash_at_end (::lestes::msg::message_stencil0< bool >::create("'##' at the end of a macro expansion",::lestes::msg::message::FLG_ERROR))
void macro_body_test (void)
ptr< ::lestes::msg::message_stencil0<
bool > > 
expected_macro_parameter (::lestes::msg::message_stencil0< bool >::create("expected macro parameter name",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
expected_right_par (::lestes::msg::message_stencil0< bool >::create("expected `)' at the end of macro parameter list",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
expected_comma (::lestes::msg::message_stencil0< bool >::create("expected `,' separator between macro parameters",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
expected_comma_right_par (::lestes::msg::message_stencil1< ucn_string >::create("`%0' is invalid after macro parameter name, expected `,' or `)'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
duplicate_macro_parameter (::lestes::msg::message_stencil1< ucn_string >::create("duplicate macro parameter `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
void macro_head_test (void)
 Tests macro_head class.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
predefined_macro_redefined (::lestes::msg::message_stencil1< ucn_string >::create("attempt to redefine internal predefined macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
predefined_macro_undefined (::lestes::msg::message_stencil1< ucn_string >::create("attempt to undefine internal predefined macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
macro_redefinition_different (::lestes::msg::message_stencil1< ucn_string >::create("macro `%0' redefinition is different from the previous definition",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil0<
bool > > 
expected_macro_name (::lestes::msg::message_stencil0< bool >::create("macro name must be identifier",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
previous_definition (::lestes::msg::message_stencil0< bool >::create("this is the location of the previous definition",::lestes::msg::message::FLG_ERROR))
void run (void)
ptr< ::lestes::msg::message_stencil0<
bool > > 
unterminated_comment (::lestes::msg::message_stencil0< bool >::create("unterminated comment",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
empty_character_constant (::lestes::msg::message_stencil0< bool >::create("empty character constant",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
missing_terminating_quote (::lestes::msg::message_stencil0< bool >::create("missing terminating ' character",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
missing_terminating_dquote (::lestes::msg::message_stencil0< bool >::create("missing terminating \" character",::lestes::msg::message::FLG_ERROR))
void pp_lex_test (void)
void pp_token_test (void)
 Tests pp_token class.
ptr< ::lestes::msg::message_stencil0<
bool > > 
missing_newline (::lestes::msg::message_stencil0< bool >::create("newline at the end of file missing",::lestes::msg::message::FLG_ERROR))
void pre_lex_test (void)
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_character_in_number (::lestes::msg::message_stencil0< bool >::create("invalid character in number",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
floating_exponent_empty (::lestes::msg::message_stencil0< bool >::create("floating literal exponent with no digits",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
floating_suffix_invalid (::lestes::msg::message_stencil0< bool >::create("floating literal with invalid suffix",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
integral_suffix_invalid (::lestes::msg::message_stencil0< bool >::create("integral literal with invalid suffix",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
integral_empty (::lestes::msg::message_stencil0< bool >::create("integral literal with no digits",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
invalid_cpp_token (::lestes::msg::message_stencil1< ucn_string >::create("cannot convert `%0' to C++ token",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
stray_character (::lestes::msg::message_stencil1< ucn_string >::create("stray character `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance()))
ptr< ::lestes::msg::message_stencil0<
bool > > 
mixed_strings (::lestes::msg::message_stencil0< bool >::create("adjacent narrow and wide string literals",::lestes::msg::message::FLG_ERROR))
void string_joiner_test (void)
 Tests string_joiner class.
::std::ostream & operator<< (::std::ostream &o, const ptr< token_sequence > &ts)
 prints debug dump of token sequence
void token_sequence_test (void)
::std::ostream & operator<< (::std::ostream &o, const ptr< token_stream > &ts)
 Prints debug dump of token stream.
void trigraphs_test (void)
void ucn_token_test (void)
ptr< ::lestes::msg::message_stencil0<
bool > > 
ucn_escape_value_invalid (::lestes::msg::message_stencil0< bool >::create("value of universal character escape sequence out of range",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
ucn_escape_value_invalid_in_identifier (::lestes::msg::message_stencil0< bool >::create("value of universal character escape sequence out of range for identifiers",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
ucn_escape_insufficient_digits (::lestes::msg::message_stencil0< bool >::create("insufficient digits in universal character escape sequence",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_escape_sequence (::lestes::msg::message_stencil0< bool >::create("invalid escape sequence",::lestes::msg::message::FLG_ERROR))
ptr< ::lestes::msg::message_stencil0<
bool > > 
missing_hexadecimal_digits (::lestes::msg::message_stencil0< bool >::create("`\\x' with no hexadecimal digits",::lestes::msg::message::FLG_ERROR))
void ucn_token_buffer_test (void)
void unit_part_test (void)

Variables

ptr< ::lestes::msg::message_stencil0<
bool > > 
unable_to_concatenate
 Error message for token concatenation.
ptr< ::lestes::msg::message_stencil0<
bool > > 
elif_without_if
 Error message for conditional directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
endif_without_if
 Error message for conditional directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
else_without_if
 Error message for conditional directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
elif_after_else
 Error message for conditional directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
else_after_else
 Error message for conditional directives.
ptr< ::lestes::msg::message_stencil1<
lstring > > 
unterminated_conditional
 Error message for conditional directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
conditional_starts_here
 Error message for conditional directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_ascii_character
 Error message for encoder.
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_utf_character
 Error message for encoder.
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_character_in_filename
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil1<
lstring > > 
trailing_tokens_in_directive
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil1<
lstring > > 
directive_expects_macro_name
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil1<
lstring > > 
unable_to_open_file
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
malformed_include
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
invalid_directve
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
line_expects_number
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
line_expects_string
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil0<
bool > > 
user_error
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil1<
ulint > > 
nesting_too_deep
 Error message for preprocessing directives.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
unterminated_argument_list
 Error message for macro expansion.
ptr< ::lestes::msg::message_stencil2<
ucn_string, ulint > > 
invalid_argument_count
 Error message for macro expansion.
ptr< ::lestes::msg::message_stencil0<
bool > > 
definition_expects_macro_name
 Error message for macro parsing.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
macro_name_alt_operator
 Error message for macro parsing.
ptr< ::lestes::msg::message_stencil0<
bool > > 
macro_name_identifier
 Error message for macro parsing.
ptr< ::lestes::msg::message_stencil0<
bool > > 
defined_invalid_macro_name
 Error message for macro parsing.
ptr< ::lestes::msg::message_stencil0<
bool > > 
hash_without_parameter
 Error message for macro expansion list.
ptr< ::lestes::msg::message_stencil0<
bool > > 
hash_hash_at_beginning
 Error message for macro expansion list.
ptr< ::lestes::msg::message_stencil0<
bool > > 
hash_hash_at_end
 Error message for macro expansion list.
ptr< ::lestes::msg::message_stencil0<
bool > > 
expected_macro_parameter
 Error message for macro parameter list.
ptr< ::lestes::msg::message_stencil0<
bool > > 
expected_right_par
 Error message for macro parameter list.
ptr< ::lestes::msg::message_stencil0<
bool > > 
expected_comma
 Error message for macro parameter list.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
expected_comma_right_par
 Error message for macro parameter list.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
duplicate_macro_parameter
 Error message for macro parameter list.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
predefined_macro_redefined
 Error message for macro manipulation.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
predefined_macro_undefined
 Error message for macro manipulation.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
macro_redefinition_different
 Error message for macro manipulation.
ptr< ::lestes::msg::message_stencil0<
bool > > 
expected_macro_name
 Error message for macro manipulation.
ptr< ::lestes::msg::message_stencil0<
bool > > 
previous_definition
 Error message for macro manipulation.
ptr< ::lestes::msg::message_stencil0<
bool > > 
unterminated_comment
 Error message for flexer.
ptr< ::lestes::msg::message_stencil0<
bool > > 
empty_character_constant
 Error message for flexer.
ptr< ::lestes::msg::message_stencil0<
bool > > 
missing_terminating_quote
 Error message for flexer.
ptr< ::lestes::msg::message_stencil0<
bool > > 
missing_terminating_dquote
 Error message for flexer.
ptr< ::lestes::msg::message_stencil0<
bool > > 
missing_newline
 Error message for reading characters.
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_character_in_number
 Error message for number parsing.
ptr< ::lestes::msg::message_stencil0<
bool > > 
floating_exponent_empty
 Error message for number parsing.
ptr< ::lestes::msg::message_stencil0<
bool > > 
floating_suffix_invalid
 Error message for number parsing.
ptr< ::lestes::msg::message_stencil0<
bool > > 
integral_suffix_invalid
 Error message for number parsing.
ptr< ::lestes::msg::message_stencil0<
bool > > 
integral_empty
 Error message for number parsing.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
invalid_cpp_token
 Error message for token conversion.
ptr< ::lestes::msg::message_stencil1<
ucn_string > > 
stray_character
 Error message for token conversion.
ptr< ::lestes::msg::message_stencil0<
bool > > 
mixed_strings
 Error message for string joining.
ptr< ::lestes::msg::message_stencil0<
bool > > 
ucn_escape_value_invalid
 Error message for ucn translation.
ptr< ::lestes::msg::message_stencil0<
bool > > 
ucn_escape_value_invalid_in_identifier
 Error message for ucn translation.
ptr< ::lestes::msg::message_stencil0<
bool > > 
ucn_escape_insufficient_digits
 Error message for ucn translation.
ptr< ::lestes::msg::message_stencil0<
bool > > 
invalid_escape_sequence
 Error message for ucn translation.
ptr< ::lestes::msg::message_stencil0<
bool > > 
missing_hexadecimal_digits
 Error message for ucn translation.


Typedef Documentation

typedef basic_token<int,ptr<source_location>,ptr<token_value> > lestes::lang::cplus::lex::basic_cpp_token

Helper typedef.

Definition at line 52 of file cpp_token.hh.

typedef basic_token<lc_host_uint_least16,ptr<source_location>, ptr<token_value> > lestes::lang::cplus::lex::basic_pp_token

Defines basic preprocessor token.

Definition at line 204 of file pp_token.hh.

typedef basic_token<ttype,ptr<loc>,int> lestes::lang::cplus::lex::basic_testing_token

Helper typedef for basic_token template test.

Definition at line 99 of file basic_token.test.cc.

typedef basic_token<lc_host_uint_least9,ptr<simple_location>,ucn> lestes::lang::cplus::lex::basic_ucn_token

Helper typedef.

Definition at line 45 of file ucn_token.hh.

typedef cpp_token::type_type lestes::lang::cplus::lex::cpp_token_type

Type of token in cpp_token.

Definition at line 108 of file cpp_token.hh.

typedef encoder_test<1> lestes::lang::cplus::lex::enc1

Helper typedef for test encoder.

Definition at line 100 of file encoder_factory.test.cc.

typedef encoder_test<2> lestes::lang::cplus::lex::enc2

Helper typedef for test encoder.

Definition at line 102 of file encoder_factory.test.cc.

typedef encoder_test<3> lestes::lang::cplus::lex::enc3

Helper typedef for test encoder.

Definition at line 104 of file encoder_factory.test.cc.

typedef pp_token::type_type lestes::lang::cplus::lex::pp_token_type

Type of token in pp_token.

Definition at line 306 of file pp_token.hh.

typedef ucn_token::type_type lestes::lang::cplus::lex::ucn_token_type

Type of token in ucn_token.

Definition at line 111 of file ucn_token.hh.

typedef vector< srp<simple_location> > lestes::lang::cplus::lex::vec_loc

Definition at line 46 of file pre_lex.test.cc.


Enumeration Type Documentation

enum lestes::lang::cplus::lex::ttype

Token type.

Enumerator:
POSITIVE 
ZERO 
NEGATIVE 

Definition at line 96 of file basic_token.test.cc.

00096 { POSITIVE = 1, ZERO = 0, NEGATIVE = -1 } ttype;


Function Documentation

void lestes::lang::cplus::lex::basic_token_test ( void   ) 

Tests basic token.

Performs testing of basic token.

Definition at line 158 of file basic_token.test.cc.

References a, b, lestes::lang::cplus::lex::testing_token::create(), lestes::lang::cplus::lex::loc::create(), lestes::is_equal(), lassert, NEGATIVE, POSITIVE, and ZERO.

Referenced by main().

00159 {
00160         ptr<loc> el = loc::create(13);
00161         ptr<loc> em = loc::create(17);
00162         ptr<testing_token> a = testing_token::create(em,ZERO,0);
00163         
00164         lassert(is_equal(a,a));
00165         lassert(is_equal(a->location_get(),em));
00166         lassert(is_equal(a->type_get(),ZERO));
00167         lassert(is_equal(a->value_get(),0));
00168         
00169         a = testing_token::create(el,POSITIVE,13);
00170 
00171         lassert(is_equal(a,a));
00172         lassert(is_equal(a->location_get(),el));
00173         lassert(is_equal(a->type_get(),POSITIVE));
00174         lassert(is_equal(a->value_get(),13));
00175 
00176         ptr<testing_token> b = testing_token::create(em,NEGATIVE,-4);
00177         ptr<testing_token> c = b->clone();
00178 
00179         lassert(is_equal(c,b));
00180         lassert(is_equal(b,c));
00181         lassert(is_equal(b->type_get(),c->type_get()));
00182         lassert(is_equal(b->value_get(),c->value_get()));
00183         lassert(is_equal(b->location_get(),c->location_get()));
00184 
00185         ptr<testing_token> d;
00186 
00187         d = a;
00188 
00189         lassert(is_equal(d,a));
00190         lassert(is_equal(a,d));
00191         lassert(is_equal(d->type_get(),POSITIVE));
00192         lassert(is_equal(d->value_get(),13));
00193         lassert(is_equal(d->location_get(),el));
00194 }

void lestes::lang::cplus::lex::concat_test ( void   ) 

Tests concat class.

Performs testing of concat class.

Definition at line 55 of file concat.test.cc.

References lestes::is_equal(), lassert, TOK_EQ, TOK_IDENT, TOK_PLUS, TOK_PLUS_EQ, and u.

Referenced by main().

00056 {
00057         ptr<concat> cat = concat::instance();
00058         ptr<file_info> fi = file_info::create("<testing>",NULL);
00059         ptr<token_sequence> ts;
00060         
00061         ptr<source_location> l = source_location::create(fi,1,1);
00062         ptr<source_location> m = source_location::create(fi,1,2);
00063         ptr<pp_token> t = pp_token::create(l,pp_token::TOK_PLUS);
00064         ptr<pp_token> u = pp_token::create(m,pp_token::TOK_EQ);
00065         ts = cat->process(t,u);
00066         lassert(ts);
00067         lassert(ts->length() == 1);
00068         ptr<pp_token> r = ts->read_front();
00069         lassert(r);
00070         lassert(is_equal(r->type_get(),pp_token::TOK_PLUS_EQ));
00071         lassert(is_equal(r->location_get(),l));
00072 
00073         ts = cat->process(u,t);
00074         lassert(ts);
00075         lassert(ts->length() == 2);
00076         r = ts->read_front();
00077         lassert(is_equal(r,u));
00078         ptr<pp_token> s = ts->read_front();
00079         lassert(is_equal(s,t));
00080         
00081         t = pp_token::create(l,pp_token::TOK_IDENT,token_value::create("L"));
00082         u = pp_token::create(m,pp_token::TOK_STRING_LIT,token_value::create("abc"));
00083         ts = cat->process(t,u);
00084         lassert(ts->length() == 1);
00085         r = ts->read_front();
00086         lassert(r);
00087         lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT));
00088         lassert(is_equal(r->location_get(),l));
00089 
00090 }

void lestes::lang::cplus::lex::condition_stack_test ( void   ) 

Tests condition class.

Performs testing of condition_stack class.

Definition at line 52 of file condition_stack.test.cc.

References lestes::is_equal(), and lassert.

Referenced by main().

00053 {
00054         ptr<source_location> loc = source_location::create(file_info::create("abc",NULL),1,1);
00055         ptr<condition_stack> cs = condition_stack::create();
00056 
00057         lassert(is_equal(cs->active_get(),true));
00058         lassert(is_equal(cs->depth(),0U));
00059 
00060         // error: #else without #if
00061         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),false));
00062         lassert(is_equal(cs->active_get(),true));
00063         lassert(is_equal(cs->depth(),0U));
00064 
00065         // error: #elif without #if
00066         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),false));
00067         lassert(is_equal(cs->active_get(),true));
00068         lassert(is_equal(cs->depth(),0U));
00069 
00070         // error: #endif without #if
00071         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),false));
00072         lassert(is_equal(cs->active_get(),true));
00073         lassert(is_equal(cs->depth(),0U));
00074 
00075 
00076         // #if false
00077         lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true));
00078         lassert(is_equal(cs->active_get(),false));
00079         lassert(is_equal(cs->depth(),1U));
00080 
00081         // #endif
00082         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00083         lassert(is_equal(cs->active_get(),true));
00084         lassert(is_equal(cs->depth(),0U));
00085 
00086 
00087         // #if true
00088         lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true));
00089         lassert(is_equal(cs->active_get(),true));
00090         lassert(is_equal(cs->depth(),1U));
00091 
00092         // #endif
00093         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00094         lassert(is_equal(cs->active_get(),true));
00095         lassert(is_equal(cs->depth(),0U));
00096 
00097 
00098         // #if false
00099         lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true));
00100         lassert(is_equal(cs->active_get(),false));
00101         lassert(is_equal(cs->depth(),1U));
00102 
00103         // #else
00104         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00105         lassert(is_equal(cs->active_get(),true));
00106         lassert(is_equal(cs->depth(),1U));
00107         
00108         // #endif
00109         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00110         lassert(is_equal(cs->active_get(),true));
00111         lassert(is_equal(cs->depth(),0U));
00112 
00113 
00114         // #if true
00115         lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true));
00116         lassert(is_equal(cs->active_get(),true));
00117         lassert(is_equal(cs->depth(),1U));
00118 
00119         // #else
00120         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00121         lassert(is_equal(cs->active_get(),false));
00122         lassert(is_equal(cs->depth(),1U));
00123         
00124         // #endif
00125         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00126         lassert(is_equal(cs->active_get(),true));
00127         lassert(is_equal(cs->depth(),0U));
00128 
00129 
00130         // #if false
00131         lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true));
00132         lassert(is_equal(cs->active_get(),false));
00133         lassert(is_equal(cs->depth(),1U));
00134 
00135         // #elif true
00136         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true));
00137         lassert(is_equal(cs->active_get(),true));
00138         lassert(is_equal(cs->depth(),1U));
00139         
00140         // #elif false
00141         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true));
00142         lassert(is_equal(cs->active_get(),false));
00143         lassert(is_equal(cs->depth(),1U));
00144         
00145         // #endif
00146         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00147         lassert(is_equal(cs->active_get(),true));
00148         lassert(is_equal(cs->depth(),0U));
00149 
00150 
00151         // #if false
00152         lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true));
00153         lassert(is_equal(cs->active_get(),false));
00154         lassert(is_equal(cs->depth(),1U));
00155 
00156         // #elif false
00157         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true));
00158         lassert(is_equal(cs->active_get(),false));
00159         lassert(is_equal(cs->depth(),1U));
00160         
00161         // #elif true
00162         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true));
00163         lassert(is_equal(cs->active_get(),true));
00164         lassert(is_equal(cs->depth(),1U));
00165         
00166         // #endif
00167         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00168         lassert(is_equal(cs->active_get(),true));
00169         lassert(is_equal(cs->depth(),0U));
00170 
00171 
00172         // #if true
00173         lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true));
00174         lassert(is_equal(cs->active_get(),true));
00175         lassert(is_equal(cs->depth(),1U));
00176 
00177         // #elif true
00178         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true));
00179         lassert(is_equal(cs->active_get(),false));
00180         lassert(is_equal(cs->depth(),1U));
00181         
00182         // #elif false
00183         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true));
00184         lassert(is_equal(cs->active_get(),false));
00185         lassert(is_equal(cs->depth(),1U));
00186         
00187         // #endif
00188         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00189         lassert(is_equal(cs->active_get(),true));
00190         lassert(is_equal(cs->depth(),0U));
00191 
00192 
00193         // #if true
00194         lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true));
00195         lassert(is_equal(cs->active_get(),true));
00196         lassert(is_equal(cs->depth(),1U));
00197 
00198         // #elif false
00199         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true));
00200         lassert(is_equal(cs->active_get(),false));
00201         lassert(is_equal(cs->depth(),1U));
00202         
00203         // #elif true
00204         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true));
00205         lassert(is_equal(cs->active_get(),false));
00206         lassert(is_equal(cs->depth(),1U));
00207         
00208         // #endif
00209         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00210         lassert(is_equal(cs->active_get(),true));
00211         lassert(is_equal(cs->depth(),0U));
00212 
00213 
00214         // #if false
00215         lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true));
00216         lassert(is_equal(cs->active_get(),false));
00217         lassert(is_equal(cs->depth(),1U));
00218 
00219         // #elif false
00220         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),true));
00221         lassert(is_equal(cs->active_get(),false));
00222         lassert(is_equal(cs->depth(),1U));
00223         
00224         // #else
00225         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00226         lassert(is_equal(cs->active_get(),true));
00227         lassert(is_equal(cs->depth(),1U));
00228         
00229         // #endif
00230         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00231         lassert(is_equal(cs->active_get(),true));
00232         lassert(is_equal(cs->depth(),0U));
00233 
00234 
00235         // #if false
00236         lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true));
00237         lassert(is_equal(cs->active_get(),false));
00238         lassert(is_equal(cs->depth(),1U));
00239 
00240         // #elif true
00241         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,true,loc),true));
00242         lassert(is_equal(cs->active_get(),true));
00243         lassert(is_equal(cs->depth(),1U));
00244         
00245         // #else
00246         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00247         lassert(is_equal(cs->active_get(),false));
00248         lassert(is_equal(cs->depth(),1U));
00249         
00250         // #endif
00251         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00252         lassert(is_equal(cs->active_get(),true));
00253         lassert(is_equal(cs->depth(),0U));
00254 
00255 
00256         // #if true
00257         lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true));
00258         lassert(is_equal(cs->active_get(),true));
00259         lassert(is_equal(cs->depth(),1U));
00260 
00261         // error: eof in #if
00262         lassert(is_equal(cs->process(condition_stack::DIR_EOF,false,loc),false));
00263         lassert(is_equal(cs->active_get(),true));
00264         lassert(is_equal(cs->depth(),1U));
00265         
00266         // #else
00267         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00268         lassert(is_equal(cs->active_get(),false));
00269         lassert(is_equal(cs->depth(),1U));
00270         
00271         // error: #else after #else
00272         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),false));
00273         lassert(is_equal(cs->active_get(),false));
00274         lassert(is_equal(cs->depth(),1U));
00275         
00276         // error: #elif after #else
00277         lassert(is_equal(cs->process(condition_stack::DIR_ELIF,false,loc),false));
00278         lassert(is_equal(cs->active_get(),false));
00279         lassert(is_equal(cs->depth(),1U));
00280         
00281         // clear the #if with #endif
00282         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00283         lassert(is_equal(cs->active_get(),true));
00284         lassert(is_equal(cs->depth(),0U));
00285 
00286 
00287         // #if true
00288         lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true));
00289         lassert(is_equal(cs->active_get(),true));
00290         lassert(is_equal(cs->depth(),1U));
00291 
00292         // nested #if true
00293         lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true));
00294         lassert(is_equal(cs->active_get(),true));
00295         lassert(is_equal(cs->depth(),2U));
00296 
00297         // nested #else
00298         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00299         lassert(is_equal(cs->active_get(),false));
00300         lassert(is_equal(cs->depth(),2U));
00301         
00302         // nested #endif
00303         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00304         lassert(is_equal(cs->active_get(),true));
00305         lassert(is_equal(cs->depth(),1U));
00306 
00307         // nested #if false
00308         lassert(is_equal(cs->process(condition_stack::DIR_IF,false,loc),true));
00309         lassert(is_equal(cs->active_get(),false));
00310         lassert(is_equal(cs->depth(),2U));
00311 
00312         // nested #else
00313         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00314         lassert(is_equal(cs->active_get(),true));
00315         lassert(is_equal(cs->depth(),2U));
00316         
00317         // nested #endif
00318         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00319         lassert(is_equal(cs->active_get(),true));
00320         lassert(is_equal(cs->depth(),1U));
00321 
00322         // #else
00323         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00324         lassert(is_equal(cs->active_get(),false));
00325         lassert(is_equal(cs->depth(),1U));
00326 
00327         // nested #if true
00328         lassert(is_equal(cs->process(condition_stack::DIR_IF,true,loc),true));
00329         lassert(is_equal(cs->active_get(),false));
00330         lassert(is_equal(cs->depth(),2U));
00331 
00332         // nested #else
00333         lassert(is_equal(cs->process(condition_stack::DIR_ELSE,false,loc),true));
00334         lassert(is_equal(cs->active_get(),false));
00335         lassert(is_equal(cs->depth(),2U));
00336         
00337         // nested #endif
00338         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00339         lassert(is_equal(cs->active_get(),false));
00340         lassert(is_equal(cs->depth(),1U));
00341 
00342         // #endif
00343         lassert(is_equal(cs->process(condition_stack::DIR_ENDIF,false,loc),true));
00344         lassert(is_equal(cs->active_get(),true));
00345         lassert(is_equal(cs->depth(),0U));
00346 
00347 }

void lestes::lang::cplus::lex::condition_test ( void   ) 

Tests condition class.

Performs testing of condition class.

Definition at line 52 of file condition.test.cc.

References lestes::is_equal(), and lassert.

Referenced by main().

00053 {
00054         ptr<source_location> loc = source_location::create(file_info::create("abc",NULL),1,1);
00055 
00056         // empty condition
00057         ptr<condition> c0 = condition::create_empty();
00058         lassert(is_equal(c0,c0));
00059         lassert(is_equal(c0->type_get(),condition::COND_EMPTY));
00060         lassert(is_equal(c0->active_get(),true));
00061 
00062         // normal condition
00063         ptr<condition> c1 = condition::create(condition::COND_IF,true,false,loc);
00064         lassert(is_equal(c1,c1));
00065         lassert(!is_equal(c1,c0));
00066         lassert(is_equal(c1->type_get(),condition::COND_IF));
00067         lassert(is_equal(c1->waiting_get(),true));
00068         lassert(is_equal(c1->active_get(),false));
00069         lassert(is_equal(c1->location_get(),loc));
00070 
00071         // another normal condition
00072         ptr<condition> c2 = condition::create(condition::COND_ELIF,false,true,loc);
00073         lassert(is_equal(c2,c2));
00074         lassert(!is_equal(c2,c1));
00075         lassert(is_equal(c2->type_get(),condition::COND_ELIF));
00076         lassert(is_equal(c2->waiting_get(),false));
00077         lassert(is_equal(c2->active_get(),true));
00078         lassert(is_equal(c2->location_get(),loc));
00079 
00080         // same condition
00081         ptr<condition> c3 = condition::create(condition::COND_ELIF,false,true,loc);
00082         lassert(is_equal(c3,c3));
00083         lassert(!is_equal(c3,c1));
00084         lassert(is_equal(c3,c2));
00085         lassert(is_equal(c2->type_get(),condition::COND_ELIF));
00086         lassert(is_equal(c2->waiting_get(),false));
00087         lassert(is_equal(c2->active_get(),true));
00088         lassert(is_equal(c2->location_get(),loc));
00089 }

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::conditional_starts_here ( ::lestes::msg::message_stencil0< bool >::  create("the conditional starts here",::lestes::msg::message::FLG_ERROR)  ) 

Issued to show the actual start of the conditional.

lestes::lang::cplus::lex::declare_logger ( pre_lex_logger   ) 

lestes::lang::cplus::lex::declare_logger ( trigraphs_logger   ) 

lestes::lang::cplus::lex::declare_logger ( preprocessor_logger   ) 

lestes::lang::cplus::lex::declare_logger ( pp_lex_guts_logger   ) 

lestes::lang::cplus::lex::declare_logger ( pp_lex_logger   ) 

lestes::lang::cplus::lex::declare_logger ( lex_logger   ) 

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::defined_invalid_macro_name ( ::lestes::msg::message_stencil0< bool >::  create("`defined' cannot be used as a macro name",::lestes::msg::message::FLG_ERROR)  ) 

Issued when `defined' is used as a name of the macro.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::definition_expects_macro_name ( ::lestes::msg::message_stencil0< bool >::  create("expected name of a macro",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a macro definition does not contain the name of the macro being defined.

ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::directive_expects_macro_name ( ::lestes::msg::message_stencil1< lstring >::  create("expected macro name after %0",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance())  ) 

Issued when no macro name is given in a directive where expected. The zeroth parameter is the string representation of the directive name.

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::duplicate_macro_parameter ( ::lestes::msg::message_stencil1< ucn_string >::  create("duplicate macro parameter `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when the same identifier is used for two macro parameters. The parameter name is passed as an argument for the message.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::elif_after_else ( ::lestes::msg::message_stencil0< bool >::  create("#elif after #else",::lestes::msg::message::FLG_ERROR)  ) 

Issued when elif is encountered after else.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::elif_without_if ( ::lestes::msg::message_stencil0< bool >::  create("#elif without #if",::lestes::msg::message::FLG_ERROR)  ) 

Issued when elif is encountered prior to if.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::else_after_else ( ::lestes::msg::message_stencil0< bool >::  create("#else after #else",::lestes::msg::message::FLG_ERROR)  ) 

Issued when else is encountered after else.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::else_without_if ( ::lestes::msg::message_stencil0< bool >::  create("#else without #if",::lestes::msg::message::FLG_ERROR)  ) 

Issued when else is encountered prior to if.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::empty_character_constant ( ::lestes::msg::message_stencil0< bool >::  create("empty character constant",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a (wide) character literal does not contain any characters.

Referenced by lexer_parse().

void lestes::lang::cplus::lex::encoder_ascii7_test ( void   ) 

Tests encoder_ascii7 class.

Performs testing of encoder_ascii7 class.

Definition at line 52 of file encoder_ascii7.test.cc.

References lassert, TEST_CNT, TOK_EOF, and TOK_ERROR.

Referenced by main().

00053 {
00054         char *in[TEST_CNT] = {
00055                         /* allowed */
00056                         "\x01"
00057                 ,
00058                         /* allowed */
00059                         "\x4D"
00060                 ,
00061                         /* allowed */
00062                         "\x7E"
00063                 ,
00064                         /* allowed */
00065                         "\x7F"
00066                 ,
00067                         /* disallowed */
00068                         "\x80"
00069                 ,
00070                         /* disallowed */
00071                         "\x81"
00072                 ,
00073                         /* disallowed */
00074                         "\x90"
00075                 ,
00076                         /* disallowed */
00077                         "\xAF"
00078                 ,
00079                         /* disallowed */
00080                         "\xFF"
00081         };
00082 
00083         ucn_token_type out[] = {
00084                 ucn_token::TOK_NOT_EOF,
00085                 ucn_token::TOK_EOF,
00086                 ucn_token::TOK_NOT_EOF,
00087                 ucn_token::TOK_EOF,
00088                 ucn_token::TOK_NOT_EOF,
00089                 ucn_token::TOK_EOF,
00090                 ucn_token::TOK_NOT_EOF,
00091                 ucn_token::TOK_EOF,
00092                 ucn_token::TOK_ERROR,
00093                 ucn_token::TOK_ERROR,
00094                 ucn_token::TOK_ERROR,
00095                 ucn_token::TOK_ERROR,
00096                 ucn_token::TOK_ERROR,
00097         };
00098 
00099         ptr<ucn_token> tok;
00100         ucn_token_type utt;
00101         ulint test, i;
00102 
00103         for (i = test = 0; test < TEST_CNT; test++) {
00104                 ptr<data_source> ds = string_source::create(string_source::string_type(in[test]));
00105                 ptr<encoder_ascii7> enc = encoder_ascii7::create();
00106 
00107                 enc->input_set(ds);
00108 
00109                 while (true) {
00110                         tok = enc->read();
00111                         utt = tok->type_get();
00112                         lassert(utt == out[i]);
00113                         i++;
00114                         if (utt == ucn_token::TOK_EOF || utt == ucn_token::TOK_ERROR) break;
00115                 }
00116         }
00117 }

void lestes::lang::cplus::lex::encoder_factory_test ( void   ) 

Tests encoder_factory class.

Performs testing of encoder_factory class.

Definition at line 111 of file encoder_factory.test.cc.

References lestes::lang::cplus::lex::encoder_factory::instance(), lestes::is_equal(), and lassert.

Referenced by main().

00112 {
00113         ptr<encoder_factory> ef = encoder_factory::instance();
00114         
00115         // instance exists
00116         lassert(ef);
00117 
00118         // the factory is empty
00119         lassert(is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00120         lassert(is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00121         lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00122         
00123         // inserted first
00124         ef->insert("first",encoder_factory::encoder_create_adaptor<enc1>);
00125         lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00126         lassert(is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00127         lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00128         lassert(is_equal(ef->summon("first")->read()->value_get(),1U));
00129         
00130         // inserted second
00131         ef->insert("second",&encoder_factory::encoder_create_adaptor<enc2>);
00132         lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00133         lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00134         lassert(is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00135         lassert(is_equal(ef->summon("first")->read()->value_get(),1U));
00136         lassert(is_equal(ef->summon("second")->read()->value_get(),2U));
00137         
00138         // inserted third
00139         ef->insert("third",&encoder_factory::encoder_create_adaptor<enc3>);
00140         lassert(!is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00141         lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00142         lassert(!is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00143         lassert(is_equal(ef->summon("first")->read()->value_get(),1U));
00144         lassert(is_equal(ef->summon("second")->read()->value_get(),2U));
00145         lassert(is_equal(ef->summon("third")->read()->value_get(),3U));
00146         
00147         // removed first
00148         ef->remove("first");
00149         lassert(is_equal(ef->summon("first"),ptr<encoder>(NULL)));
00150         lassert(!is_equal(ef->summon("second"),ptr<encoder>(NULL)));
00151         lassert(!is_equal(ef->summon("third"),ptr<encoder>(NULL)));
00152         lassert(is_equal(ef->summon("second")->read()->value_get(),2U));
00153         lassert(is_equal(ef->summon("third")->read()->value_get(),3U));
00154         
00155 }

void lestes::lang::cplus::lex::encoder_host_test ( void   ) 

Tests encoder_host class.

Performs testing of encoder_host class.

Definition at line 53 of file encoder_host.test.cc.

References lassert, TEST_CNT, TOK_EOF, and TOK_ERROR.

Referenced by main().

00054 {
00055    char *supported =
00056          "\a\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@"
00057          "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
00058 
00059    // search for char value not expressable
00060    // TODO pt ugly 
00061    ptr< set<ulint> > sch = set<ulint>::create();
00062    for (char *s = supported; *s; s++) {
00063       sch->insert(static_cast<ulint>(*s));
00064    }
00065 
00066    set<ulint>::iterator it = sch->begin();
00067    char c = static_cast<char>(*it);
00068    if (c > CHAR_MIN) {
00069       c--;
00070    } else {
00071       set<ulint>::reverse_iterator rit = sch->rbegin();
00072       c = static_cast<char>(*rit);
00073       lassert(c < CHAR_MAX);
00074       c++;
00075    }
00076    
00077    char unsupported[] = { c, '\0' };
00078 
00079    char *in[TEST_CNT] = {
00080          /* allowed */
00081          supported
00082       ,
00083          /* disallowed */
00084          unsupported
00085    };
00086 
00087    ucn_token_type out[] = {
00088       ucn_token::TOK_NOT_EOF,
00089       ucn_token::TOK_NOT_EOF,
00090       ucn_token::TOK_NOT_EOF,
00091       ucn_token::TOK_NOT_EOF,
00092       ucn_token::TOK_NOT_EOF,
00093       ucn_token::TOK_NOT_EOF,
00094       ucn_token::TOK_NOT_EOF,
00095       ucn_token::TOK_NOT_EOF,
00096       ucn_token::TOK_NOT_EOF,
00097       ucn_token::TOK_NOT_EOF,
00098       ucn_token::TOK_NOT_EOF,
00099       ucn_token::TOK_NOT_EOF,
00100       ucn_token::TOK_NOT_EOF,
00101       ucn_token::TOK_NOT_EOF,
00102       ucn_token::TOK_NOT_EOF,
00103       ucn_token::TOK_NOT_EOF,
00104       ucn_token::TOK_NOT_EOF,
00105       ucn_token::TOK_NOT_EOF,
00106       ucn_token::TOK_NOT_EOF,
00107       ucn_token::TOK_NOT_EOF,
00108       ucn_token::TOK_NOT_EOF,
00109       ucn_token::TOK_NOT_EOF,
00110       ucn_token::TOK_NOT_EOF,
00111       ucn_token::TOK_NOT_EOF,
00112       ucn_token::TOK_NOT_EOF,
00113       ucn_token::TOK_NOT_EOF,
00114       ucn_token::TOK_NOT_EOF,
00115       ucn_token::TOK_NOT_EOF,
00116       ucn_token::TOK_NOT_EOF,
00117       ucn_token::TOK_NOT_EOF,
00118       ucn_token::TOK_NOT_EOF,
00119       ucn_token::TOK_NOT_EOF,
00120       ucn_token::TOK_NOT_EOF,
00121       ucn_token::TOK_NOT_EOF,
00122       ucn_token::TOK_NOT_EOF,
00123       ucn_token::TOK_NOT_EOF,
00124       ucn_token::TOK_NOT_EOF,
00125       ucn_token::TOK_NOT_EOF,
00126       ucn_token::TOK_NOT_EOF,
00127       ucn_token::TOK_NOT_EOF,
00128       ucn_token::TOK_NOT_EOF,
00129       ucn_token::TOK_NOT_EOF,
00130       ucn_token::TOK_NOT_EOF,
00131       ucn_token::TOK_NOT_EOF,
00132       ucn_token::TOK_NOT_EOF,
00133       ucn_token::TOK_NOT_EOF,
00134       ucn_token::TOK_NOT_EOF,
00135       ucn_token::TOK_NOT_EOF,
00136       ucn_token::TOK_NOT_EOF,
00137       ucn_token::TOK_NOT_EOF,
00138       ucn_token::TOK_NOT_EOF,
00139       ucn_token::TOK_NOT_EOF,
00140       ucn_token::TOK_NOT_EOF,
00141       ucn_token::TOK_NOT_EOF,
00142       ucn_token::TOK_NOT_EOF,
00143       ucn_token::TOK_NOT_EOF,
00144       ucn_token::TOK_NOT_EOF,
00145       ucn_token::TOK_NOT_EOF,
00146       ucn_token::TOK_NOT_EOF,
00147       ucn_token::TOK_NOT_EOF,
00148       ucn_token::TOK_NOT_EOF,
00149       ucn_token::TOK_NOT_EOF,
00150       ucn_token::TOK_NOT_EOF,
00151       ucn_token::TOK_NOT_EOF,
00152       ucn_token::TOK_NOT_EOF,
00153       ucn_token::TOK_NOT_EOF,
00154       ucn_token::TOK_NOT_EOF,
00155       ucn_token::TOK_NOT_EOF,
00156       ucn_token::TOK_NOT_EOF,
00157       ucn_token::TOK_NOT_EOF,
00158       ucn_token::TOK_NOT_EOF,
00159       ucn_token::TOK_NOT_EOF,
00160       ucn_token::TOK_NOT_EOF,
00161       ucn_token::TOK_NOT_EOF,
00162       ucn_token::TOK_NOT_EOF,
00163       ucn_token::TOK_NOT_EOF,
00164       ucn_token::TOK_NOT_EOF,
00165       ucn_token::TOK_NOT_EOF,
00166       ucn_token::TOK_NOT_EOF,
00167       ucn_token::TOK_NOT_EOF,
00168       ucn_token::TOK_NOT_EOF,
00169       ucn_token::TOK_NOT_EOF,
00170       ucn_token::TOK_NOT_EOF,
00171       ucn_token::TOK_NOT_EOF,
00172       ucn_token::TOK_NOT_EOF,
00173       ucn_token::TOK_NOT_EOF,
00174       ucn_token::TOK_NOT_EOF,
00175       ucn_token::TOK_NOT_EOF,
00176       ucn_token::TOK_NOT_EOF,
00177       ucn_token::TOK_NOT_EOF,
00178       ucn_token::TOK_NOT_EOF,
00179       ucn_token::TOK_NOT_EOF,
00180       ucn_token::TOK_NOT_EOF,
00181       ucn_token::TOK_NOT_EOF,
00182       ucn_token::TOK_NOT_EOF,
00183       ucn_token::TOK_NOT_EOF,
00184       ucn_token::TOK_NOT_EOF,
00185       ucn_token::TOK_NOT_EOF,
00186       ucn_token::TOK_NOT_EOF,
00187       ucn_token::TOK_NOT_EOF,
00188       ucn_token::TOK_NOT_EOF,
00189       ucn_token::TOK_NOT_EOF,
00190       ucn_token::TOK_EOF,
00191       ucn_token::TOK_ERROR,
00192    };
00193 
00194    ptr<ucn_token> tok;
00195    ucn_token_type utt;
00196    ulint test, i;
00197 
00198    for (i = test = 0; test < TEST_CNT; test++) {
00199       ptr<data_source> ds = string_source::create(string_source::string_type(in[test]));
00200       ptr<encoder_host> enc = encoder_host::create();
00201 
00202       enc->input_set(ds);
00203 
00204       while (true) {
00205          tok = enc->read();
00206          utt = tok->type_get();
00207          lassert(utt == out[i]);
00208          i++;
00209          if (utt == ucn_token::TOK_EOF || utt == ucn_token::TOK_ERROR) break;
00210       }
00211    }
00212 }

void lestes::lang::cplus::lex::encoder_utf8_test ( void   ) 

Definition at line 49 of file encoder_utf8.test.cc.

References lassert, TEST_CNT, TOK_EOF, and TOK_ERROR.

Referenced by main().

00050 {
00051         char *in[TEST_CNT] = {
00052                 
00053                         /* disallowed 1st */
00054                         "\x80"
00055                 ,
00056                         /* disallowed 1st */
00057                         "\xC0"
00058                 ,
00059                         /* disallowed 1st */
00060                         "\xF5"
00061                 ,
00062                         /* missing 2nd */
00063                         "\xC2"
00064                 ,
00065                         /* disallowed 2nd */
00066                         "\xC2"
00067                         "\x7F"
00068                 ,
00069                         /* disallowed 2nd */
00070                         "\xC2"
00071                         "\xC0"
00072                 ,
00073                         /* missing 2nd */
00074                         "\xE0"
00075                 ,
00076                         /* missing 3rd */
00077                         "\xE0"
00078                         "\xA0"
00079                 ,
00080                         /* disallowed 2nd */
00081                         "\xE0"
00082                         "\x9F"
00083                         "\x80"
00084                 ,
00085                         /* disallowed 2nd */
00086                         "\xE0"
00087                         "\xC0"
00088                         "\x80"
00089                 ,
00090                         /* disallowed 3rd */
00091                         "\xE0"
00092                         "\xA0"
00093                         "\x7F"
00094                 ,
00095                         /* disallowed 3rd */
00096                         "\xE0"
00097                         "\xA0"
00098                         "\xC0"
00099                 ,
00100                         /* disallowed 2nd */
00101                         "\xE1"
00102                         "\x7F"
00103                         "\x80"
00104                 ,
00105                         /* disallowed 2nd */
00106                         "\xE1"
00107                         "\xC0"
00108                         "\x80"
00109                 ,
00110                         /* disallowed 3rd */
00111                         "\xE1"
00112                         "\x80"
00113                         "\x7F"
00114                 ,
00115                         /* disallowed 3rd */
00116                         "\xE1"
00117                         "\x80"
00118                         "\xC0"
00119                 ,
00120                         /* disallowed 2nd */
00121                         "\xED"
00122                         "\x7F"
00123                         "\x80"
00124                 ,
00125                         /* disallowed 2nd */
00126                         "\xED"
00127                         "\xA0"
00128                         "\x80"
00129                 ,
00130                         /* disallowed 3rd */
00131                         "\xED"
00132                         "\x80"
00133                         "\x7F"
00134                 ,
00135                         /* disallowed 3rd */
00136                         "\xED"
00137                         "\x80"
00138                         "\xC0"
00139                 ,
00140                         /* disallowed 2nd */
00141                         "\xEE"
00142                         "\x7F"
00143                         "\x80"
00144                 ,
00145                         /* disallowed 2nd */
00146                         "\xEE"
00147                         "\xC0"
00148                         "\x80"
00149                 ,
00150                         /* disallowed 3rd */
00151                         "\xEE"
00152                         "\x80"
00153                         "\x7F"
00154                 ,
00155                         /* disallowed 3rd */
00156                         "\xEE"
00157                         "\x80"
00158                         "\xC0"
00159                 ,
00160                         /* missing 2nd */
00161                         "\xF0"
00162                 ,
00163                         /* missing 3rd */
00164                         "\xF0"
00165                         "\x90"
00166                 ,
00167                         /* missing 4th */
00168                         "\xF0"
00169                         "\x90"
00170                         "\x80"
00171                 ,
00172                         /* disallowed 2nd */
00173                         "\xF0"
00174                         "\x8F"
00175                         "\x80"
00176                         "\x80"
00177                 ,
00178                         /* disallowed 2nd */
00179                         "\xF0"
00180                         "\xC0"
00181                         "\x80"
00182                         "\x80"
00183                 ,
00184                         /* disallowed 3rd */
00185                         "\xF0"
00186                         "\x90"
00187                         "\x7F"
00188                         "\x80"
00189                 ,
00190                         /* disallowed 3rd */
00191                         "\xF0"
00192                         "\x90"
00193                         "\xC0"
00194                         "\x80"
00195                 ,
00196                         /* disallowed 4th */
00197                         "\xF0"
00198                         "\x90"
00199                         "\x80"
00200                         "\x7F"
00201                 ,
00202                         /* disallowed 4th */
00203                         "\xF0"
00204                         "\x90"
00205                         "\x80"
00206                         "\xC0"
00207                 ,
00208                         /* disallowed 2nd */
00209                         "\xF1"
00210                         "\x7F"
00211                         "\x80"
00212                         "\x80"
00213                 ,
00214                         /* disallowed 2nd */
00215                         "\xF1"
00216                         "\xC0"
00217                         "\x80"
00218                         "\x80"
00219                 ,
00220                         /* disallowed 3rd */
00221                         "\xF1"
00222                         "\x80"
00223                         "\x7F"
00224                         "\x80"
00225                 ,
00226                         /* disallowed 3rd */
00227                         "\xF1"
00228                         "\x80"
00229                         "\xC0"
00230                         "\x80"
00231                 ,
00232                         /* disallowed 4th */
00233                         "\xF1"
00234                         "\x80"
00235                         "\x80"
00236                         "\x7F"
00237                 ,
00238                         /* disallowed 4th */
00239                         "\xF1"
00240                         "\x80"
00241                         "\x80"
00242                         "\xC0"
00243                 ,
00244                         /* disallowed 2nd */
00245                         "\xF4"
00246                         "\x7F"
00247                         "\x80"
00248                         "\x80"
00249                 ,
00250                         /* disallowed 2nd */
00251                         "\xF4"
00252                         "\x90"
00253                         "\x80"
00254                         "\x80"
00255                 ,
00256                         /* disallowed 3rd */
00257                         "\xF4"
00258                         "\x80"
00259                         "\x7F"
00260                         "\x80"
00261                 ,
00262                         /* disallowed 3rd */
00263                         "\xF4"
00264                         "\x80"
00265                         "\xC0"
00266                         "\x80"
00267                 ,
00268                         /* disallowed 4th */
00269                         "\xF4"
00270                         "\x80"
00271                         "\x80"
00272                         "\x7F"
00273                 ,
00274                         /* disallowed 4th */
00275                         "\xF4"
00276                         "\x80"
00277                         "\x80"
00278                         "\xC0"
00279                 ,
00280                         /* ordinary characters */
00281                         "a"
00282                         "z"
00283                 ,
00284                         /* Czech characters */
00285                         "\xC3\xA1"
00286                         "\xC4\x8D"
00287                         "\xC4\x8F"
00288                         "\xC3\xA9"
00289                         "\xC4\x9B"
00290                         "\xC3\xAD"
00291                         "\xC5\x88"
00292                         "\xC3\xB3"
00293                         "\xC5\x99"
00294                         "\xC5\xA1"
00295                         "\xC5\xA5"
00296                         "\xC3\xBA"
00297                         "\xC5\xAF"
00298                         "\xC5\xBE"
00299         };
00300 
00301         ucn_token_type out[] = {
00302                 ucn_token::TOK_ERROR,
00303                 ucn_token::TOK_ERROR,
00304                 ucn_token::TOK_ERROR,
00305                 ucn_token::TOK_ERROR,
00306                 ucn_token::TOK_ERROR,
00307                 ucn_token::TOK_ERROR,
00308                 ucn_token::TOK_ERROR,
00309                 ucn_token::TOK_ERROR,
00310                 ucn_token::TOK_ERROR,
00311                 ucn_token::TOK_ERROR,
00312                 ucn_token::TOK_ERROR,
00313                 ucn_token::TOK_ERROR,
00314                 ucn_token::TOK_ERROR,
00315                 ucn_token::TOK_ERROR,
00316                 ucn_token::TOK_ERROR,
00317                 ucn_token::TOK_ERROR,
00318                 ucn_token::TOK_ERROR,
00319                 ucn_token::TOK_ERROR,
00320                 ucn_token::TOK_ERROR,
00321                 ucn_token::TOK_ERROR,
00322                 ucn_token::TOK_ERROR,
00323                 ucn_token::TOK_ERROR,
00324                 ucn_token::TOK_ERROR,
00325                 ucn_token::TOK_ERROR,
00326                 ucn_token::TOK_ERROR,
00327                 ucn_token::TOK_ERROR,
00328                 ucn_token::TOK_ERROR,
00329                 ucn_token::TOK_ERROR,
00330                 ucn_token::TOK_ERROR,
00331                 ucn_token::TOK_ERROR,
00332                 ucn_token::TOK_ERROR,
00333                 ucn_token::TOK_ERROR,
00334                 ucn_token::TOK_ERROR,
00335                 ucn_token::TOK_ERROR,
00336                 ucn_token::TOK_ERROR,
00337                 ucn_token::TOK_ERROR,
00338                 ucn_token::TOK_ERROR,
00339                 ucn_token::TOK_ERROR,
00340                 ucn_token::TOK_ERROR,
00341                 ucn_token::TOK_ERROR,
00342                 ucn_token::TOK_ERROR,
00343                 ucn_token::TOK_ERROR,
00344                 ucn_token::TOK_ERROR,
00345                 ucn_token::TOK_ERROR,
00346                 ucn_token::TOK_ERROR,
00347                 ucn_token::TOK_NOT_EOF,
00348                 ucn_token::TOK_NOT_EOF,
00349                 ucn_token::TOK_EOF,
00350                 ucn_token::TOK_NOT_EOF,
00351                 ucn_token::TOK_NOT_EOF,
00352                 ucn_token::TOK_NOT_EOF,
00353                 ucn_token::TOK_NOT_EOF,
00354                 ucn_token::TOK_NOT_EOF,
00355                 ucn_token::TOK_NOT_EOF,
00356                 ucn_token::TOK_NOT_EOF,
00357                 ucn_token::TOK_NOT_EOF,
00358                 ucn_token::TOK_NOT_EOF,
00359                 ucn_token::TOK_NOT_EOF,
00360                 ucn_token::TOK_NOT_EOF,
00361                 ucn_token::TOK_NOT_EOF,
00362                 ucn_token::TOK_NOT_EOF,
00363                 ucn_token::TOK_NOT_EOF,
00364                 ucn_token::TOK_EOF
00365         };
00366 
00367         ptr<file_info> fi = file_info::create(string("abc"),NULL);
00368         ptr<ucn_token> tok;
00369         ucn_token_type utt;
00370         ulint test, i;
00371         
00372         for (i = test = 0; test < TEST_CNT; test++) {
00373                 ptr<data_source> ds = string_source::create(string_source::string_type(in[test]));
00374                 ptr<encoder_utf8> enc = encoder_utf8::create();
00375 
00376                 enc->input_set(ds);
00377                                 
00378                 while (true) {
00379                         tok = enc->read();
00380                         utt = tok->type_get();
00381                         lassert(utt == out[i]);
00382                         i++;
00383                         if (utt == ucn_token::TOK_EOF || utt == ucn_token::TOK_ERROR) break;
00384                 }
00385         }
00386 }

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::endif_without_if ( ::lestes::msg::message_stencil0< bool >::  create("#endif without #if",::lestes::msg::message::FLG_ERROR)  ) 

Issued when endif is encountered prior to if.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_comma ( ::lestes::msg::message_stencil0< bool >::  create("expected `,' separator between macro parameters",::lestes::msg::message::FLG_ERROR)  ) 

Issued when two macro parameters are not comma separated.

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::expected_comma_right_par ( ::lestes::msg::message_stencil1< ucn_string >::create("`%0' is invalid after macro parameter name, expected `,' or `)'"  ,
::lestes::msg::message::FLG_ERROR  ,
::lestes::msg::formatter< ucn_string >::  instance() 
)

Issued when an invalid token is encountered after macro parameter. The token is passed as an argument of the message.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_macro_name ( ::lestes::msg::message_stencil0< bool >::  create("macro name must be identifier",::lestes::msg::message::FLG_ERROR)  ) 

Issued when undef, ifdef or ifndef directive is followed by a non identifier token, which can not be a name of a macro.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_macro_parameter ( ::lestes::msg::message_stencil0< bool >::  create("expected macro parameter name",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a non-identifier token is found in the place of a macro parameter name.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_right_par ( ::lestes::msg::message_stencil0< bool >::create("expected `)' at the end of macro parameter list ,
::lestes::msg::message::FLG_ERROR   
)

Issued when the macro parameter list is not terminated by `)' token.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::floating_exponent_empty ( ::lestes::msg::message_stencil0< bool >::  create("floating literal exponent with no digits",::lestes::msg::message::FLG_ERROR)  ) 

Issued when `e' in floating number literal is not followed by digits.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::floating_suffix_invalid ( ::lestes::msg::message_stencil0< bool >::  create("floating literal with invalid suffix",::lestes::msg::message::FLG_ERROR)  ) 

Issued when floating number literal suffix is not one of `f', `F', `l', `L'.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_hash_at_beginning ( ::lestes::msg::message_stencil0< bool >::  create("'##' at the beginning of a macro expansion",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the '##' operator is found at the beginning of a macro expansion.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_hash_at_end ( ::lestes::msg::message_stencil0< bool >::  create("'##' at the end of a macro expansion",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the '##' operator is found at the end of a macro expansion.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_without_parameter ( ::lestes::msg::message_stencil0< bool >::  create("'#' is not followed by a macro parameter",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the '#' operator is used without macro parameter.

lestes::lang::cplus::lex::initialize_logger ( pre_lex_logger  ,
"pre_lex"  ,
lex_logger   
)

lestes::lang::cplus::lex::initialize_logger ( trigraphs_logger  ,
"trigraphs"  ,
lex_logger   
)

lestes::lang::cplus::lex::initialize_logger ( preprocessor_logger  ,
"preprocessor"  ,
lex_logger   
)

lestes::lang::cplus::lex::initialize_logger ( pp_lex_guts_logger  ,
"pp_lex_guts"  ,
lex_logger   
)

lestes::lang::cplus::lex::initialize_logger ( pp_lex_logger  ,
"pp_lex"  ,
lex_logger   
)

lestes::lang::cplus::lex::initialize_logger ( lex_logger  ,
"lex"  ,
cplus_logger   
)

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::integral_empty ( ::lestes::msg::message_stencil0< bool >::  create("integral literal with no digits",::lestes::msg::message::FLG_ERROR)  ) 

Issued when integral number (hexadecimal) literal has no digits.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::integral_suffix_invalid ( ::lestes::msg::message_stencil0< bool >::  create("integral literal with invalid suffix",::lestes::msg::message::FLG_ERROR)  ) 

Issued when integral number literal suffix is not a proper combination of `u', `U', `l', `L'.

ptr< ::lestes::msg::message_stencil2< ucn_string, ulint > > lestes::lang::cplus::lex::invalid_argument_count ( ::lestes::msg::message_stencil2< ucn_string, ulint >::  create("invalid argument count %1 invoking macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance(),::lestes::msg::formatter< ulint >::instance())  ) 

Issued when a macro is invoked with invalid number of arguments.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_ascii_character ( ::lestes::msg::message_stencil0< bool >::  create("the character is invalid for ASCII source encoding",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a character invalid in UTF-8 encoding is encountered.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_character_in_filename ( ::lestes::msg::message_stencil0< bool >::  create("unsupported character in filename",::lestes::msg::message::FLG_ERROR)  ) 

Issued when there is an unsupported character in name of the include file.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_character_in_number ( ::lestes::msg::message_stencil0< bool >::  create("invalid character in number",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a number literal contains invalid character (ucn or underscore).

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::invalid_cpp_token ( ::lestes::msg::message_stencil1< ucn_string >::  create("cannot convert `%0' to C++ token",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when a token which has no meaning outside preprocessor would be emitted.

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::invalid_directve ( ::lestes::msg::message_stencil1< ucn_string >::  create("invalid preprocessing directive `#%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when the token after `#' does not resemble any directive name. The zeroth parameter is the spelling of the .

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_escape_sequence ( ::lestes::msg::message_stencil0< bool >::  create("invalid escape sequence",::lestes::msg::message::FLG_ERROR)  ) 

Issued when escape sequence was not recognized.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_utf_character ( ::lestes::msg::message_stencil0< bool >::  create("the character is invalid for UTF-8 source encoding",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a character invalid in UTF-8 encoding is encountered.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::line_expects_number ( ::lestes::msg::message_stencil0< bool >::  create("first parameter of #line shall be decimal digit sequence between 1 and 32767",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the first token after line is not a sequence of decimal digits between 1 and 32767.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::line_expects_string ( ::lestes::msg::message_stencil0< bool >::  create("second parameter of #line shall be a string",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the second token after line is not a string.

void lestes::lang::cplus::lex::macro_argument_test ( void   ) 

Definition at line 47 of file macro_argument.test.cc.

References BEGIN, lestes::is_equal(), lassert, TOK_COMMA, TOK_DOT, TOK_EQ, TOK_GT, TOK_HAT, TOK_LEFT_PAR, TOK_LT, TOK_QMARK, TOK_RIGHT_PAR, and TOK_STAR.

Referenced by main().

00048 {
00049         ptr<file_info> fi = file_info::create(string("abc"),NULL);
00050         ptr<source_location> loc = source_location::create(fi,0,0);
00051         
00052         ptr<token_sequence> ts = token_sequence::create();
00053         ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00054         ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00055         ts->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00056 
00057         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00058 
00059         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00060                 
00061         ts->add_back(pp_token::create(loc,pp_token::TOK_HAT));
00062         ts->add_back(pp_token::create(loc,pp_token::TOK_LT));
00063         ts->add_back(pp_token::create(loc,pp_token::TOK_GT));
00064         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00065 
00066         ts->add_back(pp_token::create(loc,pp_token::TOK_EQ));
00067         ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00068         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00069 
00070         ts->add_back(pp_token::create(loc,pp_token::TOK_STAR));
00071         ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00072         ts->add_back(pp_token::create(loc,pp_token::TOK_EMARK));
00073         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00074         ts->add_back(pp_token::create(loc,pp_token::TOK_QMARK));
00075         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00076                 
00077         ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00078         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00079         ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00080         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00081         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00082         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00083         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00084         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00085 
00086         ptr<token_sequence> os1 = token_sequence::create();
00087         os1->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00088         
00089         ptr<token_sequence> os2 = token_sequence::create();
00090         os2->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00091         
00092         ptr<token_sequence> os3 = token_sequence::create();
00093         os3->add_back(pp_token::create(loc,pp_token::TOK_HAT));
00094         os3->add_back(pp_token::create(loc,pp_token::TOK_LT));
00095         os3->add_back(pp_token::create(loc,pp_token::TOK_GT));
00096         os3->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00097 
00098         ptr<token_sequence> os4 = token_sequence::create();
00099         os4->add_back(pp_token::create(loc,pp_token::TOK_EQ));
00100         os4->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00101         os4->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00102 
00103         ptr<token_sequence> os5 = token_sequence::create();
00104         os5->add_back(pp_token::create(loc,pp_token::TOK_STAR));
00105         os5->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00106         os5->add_back(pp_token::create(loc,pp_token::TOK_EMARK));
00107         os5->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00108         os5->add_back(pp_token::create(loc,pp_token::TOK_QMARK));
00109         os5->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00110 
00111         ptr<token_sequence> os6 = token_sequence::create();
00112         os6->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00113         os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00114         os6->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00115         os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00116         os6->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00117         os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00118         os6->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00119         os6->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00120 
00121         ptr<macro_argument> ma0 = macro_argument::create();
00122         
00123         // created object
00124         lassert(is_equal(ma0->state_get(),macro_argument::BEGIN));
00125         lassert(is_equal(ma0,ma0));
00126         
00127         // eof in argument
00128         lassert(is_equal(ma0->parse(ts,true),macro_argument::ERROR));
00129         lassert(is_equal(ma0->state_get(),macro_argument::DEAD));
00130         lassert(is_equal(ma0,ma0));
00131         // discard the eof
00132         ts->read_front();
00133 
00134         ptr<macro_argument> ma1 = macro_argument::create();
00135   
00136         // empty first argument
00137         lassert(is_equal(ma1->parse(ts,true),macro_argument::EMPTY));
00138         lassert(is_equal(ma1->state_get(),macro_argument::PARSED));
00139         lassert(is_equal(ma1,ma1));
00140 
00141         lassert(is_equal(ma1->nonexpanded_get(),os1));
00142 
00143         ptr<macro_argument> ma2 = macro_argument::create();
00144         lassert(!is_equal(ma2,ma1));
00145         
00146         // empty last argument
00147         lassert(is_equal(ma2->parse(ts,false),macro_argument::LAST));
00148         lassert(is_equal(ma2->state_get(),macro_argument::PARSED));
00149         lassert(is_equal(ma2,ma2));
00150         lassert(is_equal(ma1->nonexpanded_get(),os2));
00151 
00152         ptr<macro_argument> ma3 = macro_argument::create();
00153         
00154         // argument with comma
00155         lassert(is_equal(ma3->parse(ts,true),macro_argument::CONTINUE));
00156         lassert(is_equal(ma3->state_get(),macro_argument::PARSED));
00157         lassert(is_equal(ma3,ma3));
00158         lassert(is_equal(ma3->nonexpanded_get(),os3));
00159 
00160         ptr<macro_argument> ma4 = macro_argument::create();
00161         
00162         // argument with right parenthesis
00163         lassert(is_equal(ma4->parse(ts,true),macro_argument::LAST));
00164         lassert(is_equal(ma4->state_get(),macro_argument::PARSED));
00165         lassert(is_equal(ma4,ma4));
00166         lassert(is_equal(ma4->nonexpanded_get(),os4));
00167 
00168         ptr<macro_argument> ma5 = macro_argument::create();
00169         
00170         // argument with inner parentheses
00171         lassert(is_equal(ma5->parse(ts,true),macro_argument::CONTINUE));
00172         lassert(is_equal(ma5->state_get(),macro_argument::PARSED));
00173         lassert(is_equal(ma5,ma5));
00174         lassert(is_equal(ma5->nonexpanded_get(),os5));
00175         
00176         ptr<macro_argument> ma6 = macro_argument::create();
00177         
00178         // argument with inner parentheses and commas
00179         lassert(is_equal(ma6->parse(ts,true),macro_argument::LAST));
00180         lassert(is_equal(ma6->state_get(),macro_argument::PARSED));
00181         lassert(is_equal(ma6,ma6));
00182         lassert(is_equal(ma6->nonexpanded_get(),os6));
00183         
00184 }

void lestes::lang::cplus::lex::macro_body_test ( void   ) 

Definition at line 49 of file macro_body.test.cc.

References BEGIN, lestes::is_equal(), lassert, TOK_AMP, TOK_COMMA, TOK_EQ, TOK_GT, TOK_HAT, TOK_IDENT, TOK_LT, TOK_PLUS, and TOK_RIGHT_PAR.

Referenced by main().

00050 {
00051         ptr<file_info> fi = file_info::create(string("abc"),NULL);
00052         ptr<source_location> loc = source_location::create(fi,0,0);
00053 
00054         ptr<token_sequence> mhts = token_sequence::create();
00055         mhts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) );
00056         mhts->add_back( pp_token::create(loc,pp_token::TOK_COMMA) );
00057         mhts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("def")) );
00058         mhts->add_back( pp_token::create(loc,pp_token::TOK_RIGHT_PAR) );
00059         
00060         ptr<macro_head> mh = macro_head::create();
00061         lassert(is_equal(mh->parse(mhts),true));
00062         
00063         ptr<token_sequence> ts = token_sequence::create();
00064         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00065         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00066         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00067                 
00068         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00069         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00070                 
00071         ts->add_back( pp_token::create(loc,pp_token::TOK_GT) );
00072         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00073         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00074         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00075 
00076         ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) );
00077         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00078         ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) );
00079         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00080 
00081         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00082         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00083         ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) );
00084         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00085         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00086         ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) );
00087         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00088         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00089         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00090 
00091         ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) );
00092         ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) );
00093         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00094 
00095         ts->add_back( pp_token::create(loc,pp_token::TOK_EMARK) );
00096         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00097         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00098         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00099         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00100         ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) );
00101         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00102 
00103         ts->add_back( pp_token::create(loc,pp_token::TOK_EMARK) );
00104         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00105         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00106         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00107         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00108         ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) );
00109         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00110 
00111         ts->add_back( pp_token::create(loc,pp_token::TOK_LT) );
00112         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00113         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00114         ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) );
00115         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00116 
00117                 // function-like
00118         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00119         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00120         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00121                 
00122         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00123         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00124                 
00125         ts->add_back( pp_token::create(loc,pp_token::TOK_GT) );
00126         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00127         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00128         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00129 
00130         ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) );
00131         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00132         ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) );
00133         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00134 
00135         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00136         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00137         ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) );
00138         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00139         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00140         ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) );
00141         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00142         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00143         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00144 
00145         ts->add_back( pp_token::create(loc,pp_token::TOK_AMP) );
00146         ts->add_back( pp_token::create(loc,pp_token::TOK_HAT) );
00147         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00148 
00149         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00150         ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) );
00151         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00152         ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("iii")) );
00153         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00154         ts->add_back( pp_token::create(loc,pp_token::TOK_PLUS) );
00155         ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) );
00156         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00157         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00158 
00159         ts->add_back( pp_token::create(loc,pp_token::TOK_EQ) );
00160         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00161         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00162         ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("iii")) );
00163         ts->add_back( pp_token::create(loc,pp_token::TOK_PLUS) );
00164         ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) );
00165         ts->add_back( pp_token::create(loc,pp_token::TOK_BLANK) );
00166         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00167 
00168         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH) );
00169         ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) );
00170         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00171 
00172         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH) );
00173         ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("iii")) );
00174         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00175 
00176         ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("iii")) );
00177         ts->add_back( pp_token::create(loc,pp_token::TOK_HASH_HASH) );
00178         ts->add_back( pp_token::create(loc,pp_token::TOK_IDENT,token_value::create("abc")) );
00179         ts->add_back( pp_token::create(loc,pp_token::TOK_LINE_END) );
00180 
00181         ptr<macro_body> mb0 = macro_body::create();
00182         // created object
00183         lassert(is_equal(mb0,mb0));
00184         lassert(is_equal(mb0->state_get(),macro_body::BEGIN));
00185         
00186         // object-like macro
00187 
00188         // eol
00189         lassert(is_equal(mb0->parse(ts),true));
00190         lassert(is_equal(mb0->state_get(),macro_body::PARSED));
00191         lassert(is_equal(mb0,mb0));
00192 
00193         ptr<macro_body> mb1 = macro_body::create();
00194         // ## at beginning 
00195         lassert(is_equal(mb1->parse(ts),false));
00196         lassert(is_equal(mb1->state_get(),macro_body::DEAD));
00197         lassert(is_equal(mb1,mb1));
00198         lassert(!is_equal(mb1,mb0));
00199         
00200         ptr<macro_body> mb2 = macro_body::create();
00201         // ## at the end
00202         lassert(is_equal(mb2->parse(ts),false));
00203         lassert(is_equal(mb2->state_get(),macro_body::DEAD));
00204         lassert(is_equal(mb2,mb1));
00205 
00206         ptr<macro_body> mb3 = macro_body::create();
00207         // normal tokens 
00208         lassert(is_equal(mb3->parse(ts),true));
00209         lassert(is_equal(mb3->state_get(),macro_body::PARSED));
00210 
00211         ptr<macro_body> mb4 = macro_body::create();
00212         // the same tokens with front and back ws and extended internal ws
00213         lassert(is_equal(mb4->parse(ts),true));
00214         lassert(is_equal(mb4->state_get(),macro_body::PARSED));
00215         lassert(is_equal(mb4,mb4));
00216         lassert(is_equal(mb4,mb3));
00217 
00218         ptr<macro_body> mb5 = macro_body::create();
00219         // the same tokens with different ws
00220         lassert(is_equal(mb5->parse(ts),true));
00221         lassert(is_equal(mb5->state_get(),macro_body::PARSED));
00222         lassert(!is_equal(mb5,mb4));
00223 
00224         ptr<macro_body> mb6 = macro_body::create();
00225         // tokens with ## inside and ws
00226         lassert(is_equal(mb6->parse(ts),true));
00227         lassert(is_equal(mb6->state_get(),macro_body::PARSED));
00228         lassert(is_equal(mb6,mb6));
00229 
00230         ptr<macro_body> mb7 = macro_body::create();
00231         // tokens with ## inside and equivalent ws around
00232         lassert(is_equal(mb7->parse(ts),true));
00233         lassert(is_equal(mb7->state_get(),macro_body::PARSED));
00234         lassert(is_equal(mb7,mb7));
00235         lassert(is_equal(mb7,mb6));
00236 
00237         ptr<macro_body> mb8 = macro_body::create();
00238         // tokens with two ## successive ##
00239         lassert(is_equal(mb8->parse(ts),true));
00240         lassert(is_equal(mb8->state_get(),macro_body::PARSED));
00241         lassert(is_equal(mb8,mb8));
00242 
00243         // function-like macro
00244         ptr<macro_body> mb9 = macro_body::create();
00245 
00246         // eol
00247         lassert(is_equal(mb9->parse(ts,mh),true));
00248         lassert(is_equal(mb9->state_get(),macro_body::PARSED));
00249         lassert(is_equal(mb9,mb9));
00250 
00251         ptr<macro_body> mb10 = macro_body::create();
00252         // ## at the beginning
00253         lassert(is_equal(mb10->parse(ts,mh),false));
00254         lassert(is_equal(mb10->state_get(),macro_body::DEAD));
00255         lassert(!is_equal(mb10,mb9));
00256 
00257         ptr<macro_body> mb11 = macro_body::create();
00258         // ## at the end
00259         lassert(is_equal(mb11->parse(ts,mh),false));
00260         lassert(is_equal(mb11->state_get(),macro_body::DEAD));
00261         lassert(is_equal(mb11,mb10));
00262 
00263         ptr<macro_body> mb12 = macro_body::create();
00264         // ordinary tokens
00265         lassert(is_equal(mb12->parse(ts,mh),true));
00266         lassert(is_equal(mb12->state_get(),macro_body::PARSED));
00267         lassert(is_equal(mb12,mb12));
00268 
00269         ptr<macro_body> mb13 = macro_body::create();
00270         // ordinary tokens with equivalent ws
00271         lassert(is_equal(mb13->parse(ts,mh),true));
00272         lassert(is_equal(mb13->state_get(),macro_body::PARSED));
00273         lassert(is_equal(mb13,mb12));
00274 
00275         ptr<macro_body> mb14 = macro_body::create();
00276         // ordinary tokens with nonequivalent ws
00277         lassert(is_equal(mb14->parse(ts,mh),true));
00278         lassert(is_equal(mb14->state_get(),macro_body::PARSED));
00279         lassert(!is_equal(mb14,mb13));
00280 
00281         ptr<macro_body> mb15 = macro_body::create();
00282         // identifier and parameter
00283         lassert(is_equal(mb15->parse(ts,mh),true));
00284         lassert(is_equal(mb15->state_get(),macro_body::PARSED));
00285         lassert(is_equal(mb15,mb15));
00286 
00287         ptr<macro_body> mb16 = macro_body::create();
00288         // identifier and parameter with equivalent ws
00289         lassert(is_equal(mb16->parse(ts,mh),true));
00290         lassert(is_equal(mb16->state_get(),macro_body::PARSED));
00291         lassert(is_equal(mb16,mb16));
00292 
00293         ptr<macro_body> mb17 = macro_body::create();
00294         // # and parameter
00295         lassert(is_equal(mb17->parse(ts,mh),true));
00296         lassert(is_equal(mb17->state_get(),macro_body::PARSED));
00297         lassert(is_equal(mb17,mb17));
00298 
00299         ptr<macro_body> mb18 = macro_body::create();
00300         // # and identifier
00301         lassert(is_equal(mb18->parse(ts,mh),false));
00302         lassert(is_equal(mb18->state_get(),macro_body::DEAD));
00303 
00304         ptr<macro_body> mb19 = macro_body::create();
00305         // identifier ## and parameter
00306         lassert(is_equal(mb19->parse(ts,mh),true));
00307         lassert(is_equal(mb19->state_get(),macro_body::PARSED));
00308         lassert(is_equal(mb19,mb19));
00309 }

void lestes::lang::cplus::lex::macro_head_test ( void   ) 

Tests macro_head class.

Performs testing of macro_head class.

Definition at line 53 of file macro_head.test.cc.

References BEGIN, lestes::is_equal(), lassert, TOK_COMMA, TOK_DOT, TOK_IDENT, and TOK_RIGHT_PAR.

Referenced by main().

00054 {
00055         ptr<file_info> fi = file_info::create("abc",NULL);
00056         ptr<source_location> loc = source_location::create(fi,0,0);
00057 
00058         ptr<token_value> tv1 = token_value::create("abc");
00059         ptr<token_value> tv2 = token_value::create("def");
00060         
00061         ptr<token_sequence> ts = token_sequence::create();
00062         
00063         ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK));
00064         ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK));
00065         ts->add_back(pp_token::create(loc,pp_token::TOK_LINE_END));
00066                 
00067         ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK));
00068         ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00069                 
00070         ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00071         ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK));
00072         ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00073 
00074         ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00075         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00076         ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00077 
00078         ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00079         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00080         ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv2));
00081         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00082 
00083         ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv2));
00084         ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00085         ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00086         ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00087 
00088         ptr<macro_head> mh0 = macro_head::create();
00089 
00090         // created object
00091         lassert(is_equal(mh0,mh0));
00092         lassert(is_equal(mh0->state_get(),macro_head::BEGIN));
00093         
00094         // eol 
00095         lassert(is_equal(mh0->parse(ts),false));
00096         lassert(is_equal(mh0->state_get(),macro_head::DEAD));
00097         lassert(is_equal(mh0,mh0));
00098 
00099         ptr<macro_head> mh1 = macro_head::create();
00100 
00101         // nonidentifier 
00102         lassert(is_equal(mh1->parse(ts),false));
00103         lassert(is_equal(mh1->state_get(),macro_head::DEAD));
00104 
00105         ptr<macro_head> mh2 = macro_head::create();
00106 
00107         // ident and noncomma 
00108         lassert(is_equal(mh2->parse(ts),false));
00109         lassert(is_equal(mh2->state_get(),macro_head::DEAD));
00110 
00111         ptr<macro_head> mh3 = macro_head::create();
00112 
00113         // duplicate ident 
00114         lassert(is_equal(mh3->parse(ts),false));
00115         lassert(is_equal(mh3->state_get(),macro_head::DEAD));
00116 
00117         ptr<macro_head> mh4 = macro_head::create();
00118 
00119         // two distinct idents 
00120         lassert(is_equal(mh4->parse(ts),true));
00121         lassert(is_equal(mh4->state_get(),macro_head::PARSED));
00122         lassert(is_equal(mh4,mh4));
00123         lassert(is_equal(mh4->length(),2U));
00124         lassert(is_equal(mh4->index_of(tv1),0U));
00125         lassert(is_equal(mh4->index_of(tv2),1U));
00126         lassert(is_equal(mh4->index_of(token_value::create("ghi")),mh4->length()));
00127 
00128         ptr<macro_head> mh5 = macro_head::create();
00129 
00130         // swapped idents
00131         lassert(is_equal(mh5->parse(ts),true));
00132         lassert(is_equal(mh5->state_get(),macro_head::PARSED));
00133         lassert(!is_equal(mh5,mh4));
00134         lassert(is_equal(mh5->length(),2U));
00135         lassert(is_equal(mh5->index_of(tv2),0U));
00136         lassert(is_equal(mh5->index_of(tv1),1U));
00137         lassert(is_equal(mh5->index_of(token_value::create("ghi")),mh5->length()));
00138 
00139 }

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::macro_name_alt_operator ( ::lestes::msg::message_stencil1< ucn_string >::  create("alternative spelling `%0' of a C++ operator cannot be used as a macro name",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when a name of the macro being defined is alternative spelling of an operator.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::macro_name_identifier ( ::lestes::msg::message_stencil0< bool >::  create("macro name must be an identifier",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a name of the macro being defined is not identifier.

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::macro_redefinition_different ( ::lestes::msg::message_stencil1< ucn_string >::  create("macro `%0' redefinition is different from the previous definition",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when a macro redefinition is different from the original definition.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::malformed_include ( ::lestes::msg::message_stencil0< bool >::  create("malformed #include, expecting <filename> or \"filename\"",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the include directive does not have the form include <filename.ext>> or include "filename.ext".

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_hexadecimal_digits ( ::lestes::msg::message_stencil0< bool >::  create("`\\x' with no hexadecimal digits",::lestes::msg::message::FLG_ERROR)  ) 

Issued when hexadecimal escape sequence has no digits.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_newline ( ::lestes::msg::message_stencil0< bool >::  create("newline at the end of file missing",::lestes::msg::message::FLG_ERROR)  ) 

Issued when there is no proper newline at the end of file.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_terminating_dquote ( ::lestes::msg::message_stencil0< bool >::  create("missing terminating \" character",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a (wide) string literal does not end with a double quote.

Referenced by lexer_parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_terminating_quote ( ::lestes::msg::message_stencil0< bool >::  create("missing terminating ' character",::lestes::msg::message::FLG_ERROR)  ) 

Issued when a (wide) character literal does not end with a quote.

Referenced by lexer_parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::mixed_strings ( ::lestes::msg::message_stencil0< bool >::  create("adjacent narrow and wide string literals",::lestes::msg::message::FLG_ERROR)  ) 

Issued when both wide and narrow string literals are found in a sequence of string literals.

ptr< ::lestes::msg::message_stencil1< ulint > > lestes::lang::cplus::lex::nesting_too_deep ( ::lestes::msg::message_stencil1< ulint >::  create("nesting of includes is too deep, only %0 levels supported",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ulint >::instance())  ) 

Issued for include directive if the nesting is too deep.

std::ostream & lestes::lang::cplus::lex::operator<< ( ::std::ostream &  o,
const ptr< token_stream > &  ts 
)

Prints debug dump of token stream.

Prints debug dump of token sequence to stream.

Parameters:
o The stream to print to.
ts The token sequence to print.

Definition at line 297 of file token_stream.cc.

00297                                                                    {
00298         ts->debug_print(o);
00299         return o;
00300 }

std::ostream & lestes::lang::cplus::lex::operator<< ( ::std::ostream &  o,
const ptr< token_sequence > &  ts 
)

prints debug dump of token sequence

Prints debug dump of token sequence to stream.

Parameters:
o The stream to print to.
ts The token sequence to print.

Definition at line 463 of file token_sequence.cc.

00463                                                                      {
00464         ts->debug_print(o);
00465         return o;
00466 }

void lestes::lang::cplus::lex::pp_lex_test ( void   ) 

Definition at line 50 of file pp_lex.test.cc.

References lestes::is_equal(), lassert, TOK_AMP, TOK_AMP_AMP, TOK_AMP_EQ, TOK_ASM, TOK_AUTO, TOK_BOOL, TOK_BREAK, TOK_CASE, TOK_CATCH, TOK_CHAR, TOK_CLASS, TOK_COLON, TOK_COLON_COLON, TOK_COMMA, TOK_CONST_CAST, TOK_CONTINUE, TOK_DEFAULT, TOK_DELETE, TOK_DO, TOK_DOT, TOK_DOT_DOT_DOT, TOK_DOT_STAR, TOK_DOUBLE, TOK_DYNAMIC_CAST, TOK_ELSE, TOK_ENUM, TOK_EQ, TOK_EQ_EQ, TOK_ERROR, TOK_EXPLICIT, TOK_EXPORT, TOK_EXTERN, TOK_FLOAT, TOK_FOR, TOK_FRIEND, TOK_GOTO, TOK_GT, TOK_GT_EQ, TOK_GT_GT, TOK_GT_GT_EQ, TOK_HAT, TOK_HAT_EQ, TOK_IF, TOK_INLINE, TOK_INT, TOK_LEFT_BRACE, TOK_LEFT_BRACKET, TOK_LEFT_PAR, TOK_LONG, TOK_LT, TOK_LT_EQ, TOK_LT_LT, TOK_LT_LT_EQ, TOK_MINUS, TOK_MINUS_EQ, TOK_MINUS_GT, TOK_MINUS_GT_STAR, TOK_MINUS_MINUS, TOK_MUTABLE, TOK_NAMESPACE, TOK_NEW, TOK_OPERATOR, TOK_PERCENT, TOK_PERCENT_EQ, TOK_PLUS, TOK_PLUS_EQ, TOK_PLUS_PLUS, TOK_PRIVATE, TOK_PROTECTED, TOK_PUBLIC, TOK_QMARK, TOK_REGISTER, TOK_REINTERPRET_CAST, TOK_RETURN, TOK_RIGHT_BRACE, TOK_RIGHT_BRACKET, TOK_RIGHT_PAR, TOK_SEMICOLON, TOK_SHORT, TOK_SIGNED, TOK_SIZEOF, TOK_SLASH, TOK_SLASH_EQ, TOK_STAR, TOK_STAR_EQ, TOK_STATIC, TOK_STATIC_CAST, TOK_STRUCT, TOK_SWITCH, TOK_TEMPLATE, TOK_THIS, TOK_THROW, TOK_TILDE, TOK_TRY, TOK_TYPEDEF, TOK_TYPEID, TOK_TYPENAME, TOK_UNION, TOK_UNSIGNED, TOK_USING, TOK_VBAR, TOK_VBAR_EQ, TOK_VBAR_VBAR, TOK_VIRTUAL, TOK_VOID, TOK_VOLATILE, and TOK_WHILE.

Referenced by main().

00051 {
00052         char inp[] = 
00053                 " [<:]:>}%>{<%#%:##%:%:)(;:?.+*%/^xor&bitand|bitor"
00054                 "~compl!not=<>,-::.*+=-=*=/=%=^=xor_eq&=and_eq|=or_eq<<>>"
00055                 ">>=<<===!=not_eq<=>=&&and||or++--->*->..."
00056                 "asm auto bool break case catch char class const_cast continue default delete do "
00057                 "double dynamic_cast else enum explicit export extern float for friend goto if "
00058                 "inline int long mutable namespace new operator private protected public register "
00059                 "reinterpret_cast return short signed sizeof static static_cast struct switch "
00060                 "template this throw try typedef typeid typename union unsigned using virtual "
00061                 "void volatile wchar_t while false true define undef pragma error "
00062                 "defined ifdef ifndef elif endif "
00063                 "\n#include\n#line\n"
00064                 "123 007 0xF00 1.23e+45 "
00065                 "1eet 0range 0xygen 1.2.3e+e-45 "
00066                 "'a''bcd''\\\'\\\"\\?\\\\\\a\\b\\r\\f\\n\\r\\t\\v''\\123\\xFaCe''\\udEaD\\U1234cdef'\n"
00067                 "'''\\c\\d\\e\\g\\h\\i''\\xg\\x''\\u\\uabcx\\U\\Uabcdeef\\uf0''unterminated\n"
00068                 "\"\"\"a\"\"bcd\"\"\\\'\\\"\\?\\\\\\a\\b\\r\\f\\n\\r\\t\\v\"\"\\123\\xFaCe\"\"\\udEaD\\U1234cdef\"\n"
00069                 "\"\\c\\d\\e\\g\\h\\i\"\"\\xg\\x\"\"\\u\\uabcx\\U\\Uabcdef\\uf0\"\"unterminated\n"
00070                 "\n";
00071 
00072         pp_token_type out[] = {
00073                 pp_token::TOK_BLANK,
00074                 pp_token::TOK_LEFT_BRACKET,
00075                 pp_token::TOK_LEFT_BRACKET,
00076                 pp_token::TOK_RIGHT_BRACKET,
00077                 pp_token::TOK_RIGHT_BRACKET,
00078                 pp_token::TOK_RIGHT_BRACE,
00079                 pp_token::TOK_RIGHT_BRACE,
00080                 pp_token::TOK_LEFT_BRACE,
00081                 pp_token::TOK_LEFT_BRACE,
00082                 pp_token::TOK_HASH,
00083                 pp_token::TOK_HASH,
00084                 pp_token::TOK_HASH_HASH,
00085                 pp_token::TOK_HASH_HASH,
00086                 pp_token::TOK_RIGHT_PAR,
00087                 pp_token::TOK_LEFT_PAR,
00088                 pp_token::TOK_SEMICOLON,
00089                 pp_token::TOK_COLON,
00090                 pp_token::TOK_QMARK,
00091                 pp_token::TOK_DOT,
00092                 pp_token::TOK_PLUS,
00093                 pp_token::TOK_STAR,
00094                 pp_token::TOK_PERCENT,
00095                 pp_token::TOK_SLASH,
00096                 pp_token::TOK_HAT,
00097                 pp_token::TOK_HAT,
00098                 pp_token::TOK_AMP,
00099                 pp_token::TOK_AMP,
00100                 pp_token::TOK_VBAR,
00101                 pp_token::TOK_VBAR,
00102                 pp_token::TOK_TILDE,
00103                 pp_token::TOK_TILDE,
00104                 pp_token::TOK_EMARK,
00105                 pp_token::TOK_EMARK,
00106                 pp_token::TOK_EQ,
00107                 pp_token::TOK_LT,
00108                 pp_token::TOK_GT,
00109                 pp_token::TOK_COMMA,
00110                 pp_token::TOK_MINUS,
00111                 pp_token::TOK_COLON_COLON,
00112                 pp_token::TOK_DOT_STAR,
00113                 pp_token::TOK_PLUS_EQ,
00114                 pp_token::TOK_MINUS_EQ,
00115                 pp_token::TOK_STAR_EQ,
00116                 pp_token::TOK_SLASH_EQ,
00117                 pp_token::TOK_PERCENT_EQ,
00118                 pp_token::TOK_HAT_EQ,
00119                 pp_token::TOK_HAT_EQ,
00120                 pp_token::TOK_AMP_EQ,
00121                 pp_token::TOK_AMP_EQ,
00122                 pp_token::TOK_VBAR_EQ,
00123                 pp_token::TOK_VBAR_EQ,
00124                 pp_token::TOK_LT_LT,
00125                 pp_token::TOK_GT_GT,
00126                 pp_token::TOK_GT_GT_EQ,
00127                 pp_token::TOK_LT_LT_EQ,
00128                 pp_token::TOK_EQ_EQ,
00129                 pp_token::TOK_EMARK_EQ,
00130                 pp_token::TOK_EMARK_EQ,
00131                 pp_token::TOK_LT_EQ,
00132                 pp_token::TOK_GT_EQ,
00133                 pp_token::TOK_AMP_AMP,
00134                 pp_token::TOK_AMP_AMP,
00135                 pp_token::TOK_VBAR_VBAR,
00136                 pp_token::TOK_VBAR_VBAR,
00137                 pp_token::TOK_PLUS_PLUS,
00138                 pp_token::TOK_MINUS_MINUS,
00139                 pp_token::TOK_MINUS_GT_STAR,
00140                 pp_token::TOK_MINUS_GT,
00141                 pp_token::TOK_DOT_DOT_DOT,
00142 
00143                 pp_token::TOK_ASM,
00144                 pp_token::TOK_BLANK,
00145                 pp_token::TOK_AUTO,
00146                 pp_token::TOK_BLANK,
00147                 pp_token::TOK_BOOL,
00148                 pp_token::TOK_BLANK,
00149                 pp_token::TOK_BREAK,
00150                 pp_token::TOK_BLANK,
00151                 pp_token::TOK_CASE,
00152                 pp_token::TOK_BLANK,
00153                 pp_token::TOK_CATCH,
00154                 pp_token::TOK_BLANK,
00155                 pp_token::TOK_CHAR,
00156                 pp_token::TOK_BLANK,
00157                 pp_token::TOK_CLASS,
00158                 pp_token::TOK_BLANK,
00159                 pp_token::TOK_CONST_CAST,
00160                 pp_token::TOK_BLANK,
00161                 pp_token::TOK_CONTINUE,
00162                 pp_token::TOK_BLANK,
00163                 pp_token::TOK_DEFAULT,
00164                 pp_token::TOK_BLANK,
00165                 pp_token::TOK_DELETE,
00166                 pp_token::TOK_BLANK,
00167                 pp_token::TOK_DO,
00168                 pp_token::TOK_BLANK,
00169                 pp_token::TOK_DOUBLE,
00170                 pp_token::TOK_BLANK,
00171                 pp_token::TOK_DYNAMIC_CAST,
00172                 pp_token::TOK_BLANK,
00173                 pp_token::TOK_ELSE,
00174                 pp_token::TOK_BLANK,
00175                 pp_token::TOK_ENUM,
00176                 pp_token::TOK_BLANK,
00177                 pp_token::TOK_EXPLICIT,
00178                 pp_token::TOK_BLANK,
00179                 pp_token::TOK_EXPORT,
00180                 pp_token::TOK_BLANK,
00181                 pp_token::TOK_EXTERN,
00182                 pp_token::TOK_BLANK,
00183                 pp_token::TOK_FLOAT,
00184                 pp_token::TOK_BLANK,
00185                 pp_token::TOK_FOR,
00186                 pp_token::TOK_BLANK,
00187                 pp_token::TOK_FRIEND,
00188                 pp_token::TOK_BLANK,
00189                 pp_token::TOK_GOTO,
00190                 pp_token::TOK_BLANK,
00191                 pp_token::TOK_IF,
00192                 pp_token::TOK_BLANK,
00193                 pp_token::TOK_INLINE,
00194                 pp_token::TOK_BLANK,
00195                 pp_token::TOK_INT,
00196                 pp_token::TOK_BLANK,
00197                 pp_token::TOK_LONG,
00198                 pp_token::TOK_BLANK,
00199                 pp_token::TOK_MUTABLE,
00200                 pp_token::TOK_BLANK,
00201                 pp_token::TOK_NAMESPACE,
00202                 pp_token::TOK_BLANK,
00203                 pp_token::TOK_NEW,
00204                 pp_token::TOK_BLANK,
00205                 pp_token::TOK_OPERATOR,
00206                 pp_token::TOK_BLANK,
00207                 pp_token::TOK_PRIVATE,
00208                 pp_token::TOK_BLANK,
00209                 pp_token::TOK_PROTECTED,
00210                 pp_token::TOK_BLANK,
00211                 pp_token::TOK_PUBLIC,
00212                 pp_token::TOK_BLANK,
00213                 pp_token::TOK_REGISTER,
00214                 pp_token::TOK_BLANK,
00215                 pp_token::TOK_REINTERPRET_CAST,
00216                 pp_token::TOK_BLANK,
00217                 pp_token::TOK_RETURN,
00218                 pp_token::TOK_BLANK,
00219                 pp_token::TOK_SHORT,
00220                 pp_token::TOK_BLANK,
00221                 pp_token::TOK_SIGNED,
00222                 pp_token::TOK_BLANK,
00223                 pp_token::TOK_SIZEOF,
00224                 pp_token::TOK_BLANK,
00225                 pp_token::TOK_STATIC,
00226                 pp_token::TOK_BLANK,
00227                 pp_token::TOK_STATIC_CAST,
00228                 pp_token::TOK_BLANK,
00229                 pp_token::TOK_STRUCT,
00230                 pp_token::TOK_BLANK,
00231                 pp_token::TOK_SWITCH,
00232                 pp_token::TOK_BLANK,
00233                 pp_token::TOK_TEMPLATE,
00234                 pp_token::TOK_BLANK,
00235                 pp_token::TOK_THIS,
00236                 pp_token::TOK_BLANK,
00237                 pp_token::TOK_THROW,
00238                 pp_token::TOK_BLANK,
00239                 pp_token::TOK_TRY,
00240                 pp_token::TOK_BLANK,
00241                 pp_token::TOK_TYPEDEF,
00242                 pp_token::TOK_BLANK,
00243                 pp_token::TOK_TYPEID,
00244                 pp_token::TOK_BLANK,
00245                 pp_token::TOK_TYPENAME,
00246                 pp_token::TOK_BLANK,
00247                 pp_token::TOK_UNION,
00248                 pp_token::TOK_BLANK,
00249                 pp_token::TOK_UNSIGNED,
00250                 pp_token::TOK_BLANK,
00251                 pp_token::TOK_USING,
00252                 pp_token::TOK_BLANK,
00253                 pp_token::TOK_VIRTUAL,
00254                 pp_token::TOK_BLANK,
00255                 pp_token::TOK_VOID,
00256                 pp_token::TOK_BLANK,
00257                 pp_token::TOK_VOLATILE,
00258                 pp_token::TOK_BLANK,
00259                 pp_token::TOK_WCHAR,
00260                 pp_token::TOK_BLANK,
00261                 pp_token::TOK_WHILE,
00262                 pp_token::TOK_BLANK,
00263                 pp_token::TOK_BOOL_LIT,
00264                 pp_token::TOK_BLANK,
00265                 pp_token::TOK_BOOL_LIT,
00266                 pp_token::TOK_BLANK,
00267                 pp_token::TOK_DEFINE,
00268                 pp_token::TOK_BLANK,
00269                 pp_token::TOK_UNDEF,
00270                 pp_token::TOK_BLANK,
00271                 pp_token::TOK_PRAGMA,
00272                 pp_token::TOK_BLANK,
00273                 pp_token::TOK_ERROR,
00274                 pp_token::TOK_BLANK,
00275                 pp_token::TOK_DEFINED,
00276                 pp_token::TOK_BLANK,
00277                 pp_token::TOK_IFDEF,
00278                 pp_token::TOK_BLANK,
00279                 pp_token::TOK_IFNDEF,
00280                 pp_token::TOK_BLANK,
00281                 pp_token::TOK_ELIF,
00282                 pp_token::TOK_BLANK,
00283                 pp_token::TOK_ENDIF,
00284                 pp_token::TOK_BLANK,
00285                 pp_token::TOK_LINE_END,
00286                 pp_token::TOK_HASH,
00287                 pp_token::TOK_INCLUDE,
00288                 pp_token::TOK_INCL_SIG,
00289                 pp_token::TOK_LINE_END,
00290                 pp_token::TOK_HASH,
00291                 pp_token::TOK_LINE,
00292                 pp_token::TOK_LINE_SIG,
00293                 pp_token::TOK_LINE_END,
00294 
00295                 pp_token::TOK_NUMBER_LIT,
00296                 pp_token::TOK_BLANK,
00297                 pp_token::TOK_NUMBER_LIT,
00298                 pp_token::TOK_BLANK,
00299                 pp_token::TOK_NUMBER_LIT,
00300                 pp_token::TOK_BLANK,
00301                 pp_token::TOK_NUMBER_LIT,
00302                 pp_token::TOK_BLANK,
00303 
00304                 pp_token::TOK_NUMBER_LIT,
00305                 pp_token::TOK_BLANK,
00306                 pp_token::TOK_NUMBER_LIT,
00307                 pp_token::TOK_BLANK,
00308                 pp_token::TOK_NUMBER_LIT,
00309                 pp_token::TOK_BLANK,
00310                 pp_token::TOK_NUMBER_LIT,
00311                 pp_token::TOK_BLANK,
00312 
00313                 pp_token::TOK_CHAR_LIT,
00314                 pp_token::TOK_CHAR_LIT,
00315                 pp_token::TOK_CHAR_LIT,
00316                 pp_token::TOK_CHAR_LIT,
00317                 pp_token::TOK_CHAR_LIT,
00318                 pp_token::TOK_LINE_END,
00319                 
00320                 pp_token::TOK_CHAR_LIT,
00321                 pp_token::TOK_CHAR_LIT,
00322                 pp_token::TOK_CHAR_LIT,
00323                 pp_token::TOK_CHAR_LIT,
00324                 pp_token::TOK_CHAR_LIT,
00325                 pp_token::TOK_LINE_END,
00326                 
00327                 pp_token::TOK_STRING_LIT,
00328                 pp_token::TOK_STRING_LIT,
00329                 pp_token::TOK_STRING_LIT,
00330                 pp_token::TOK_STRING_LIT,
00331                 pp_token::TOK_STRING_LIT,
00332                 pp_token::TOK_STRING_LIT,
00333                 pp_token::TOK_LINE_END,
00334                 
00335                 pp_token::TOK_STRING_LIT,
00336                 pp_token::TOK_STRING_LIT,
00337                 pp_token::TOK_STRING_LIT,
00338                 pp_token::TOK_STRING_LIT,
00339                 pp_token::TOK_LINE_END,
00340                 
00341                 pp_token::TOK_LINE_END,
00342                 pp_token::TOK_FILE_END
00343         };
00344 
00345         ptr<file_info> fi = file_info::create("abcd",NULL);
00346 
00347         ptr<pre_lex> plx = pre_lex::create(string_source::create(inp),encoder_ascii7::create());
00348         ptr<pp_lex> pp = pp_lex::create(plx,fi);
00349         ptr<pp_token> tok;
00350 
00351         ulint i = 0;
00352         do {
00353                 
00354                 tok = pp->read(tok && tok->type_get() == pp_token::TOK_LINE_END);
00355 #if 0
00356                 ::std::cerr << " test " << i << " : " <<
00357                         tok->name_get() << " " <<
00358                         tok->type_get() << " ?== " << (int)out[i] << ""
00359                         << ::std::endl;
00360 #if 0         
00361                         (int)tok->value_get() << " ?== " << (int)ouv[i] << " offset " <<
00362                         (int)tok->location_get()->offset_get() << " ?== " << loc[i]->offset_get() << " line " <<
00363                         (int)tok->location_get()->line_get() << " ?== " << loc[i]->line_get() << " column " <<
00364                         (int)tok->location_get()->column_get() << " ?== " << loc[i]->column_get() << " order " <<
00365                         (int)tok->location_get()->order_get() << " ?== " << loc[i]->order_get() << ::std::endl;
00366 #endif
00367 #endif
00368                 lassert(is_equal(tok->type_get(),out[i]));
00369 
00370                 if (tok->type_get() == pp_token::TOK_FILE_END) break;
00371                 i++;
00372         } while (true);
00373 }

void lestes::lang::cplus::lex::pp_token_test ( void   ) 

Tests pp_token class.

Performs testing of pp_token class.

Definition at line 53 of file pp_token.test.cc.

References a, b, lestes::is_equal(), lassert, and u.

Referenced by main().

00054 {
00055         ptr<file_info> fi = file_info::create("foobar.h",NULL);
00056         ptr<source_location> loc = source_location::create(fi,2,3);
00057         ptr<token_value> s = token_value::create("123");
00058         ptr<token_value> t = token_value::create("123");
00059         ptr<token_value> u = token_value::create("abc");
00060         ptr<token_value> v = token_value::create("abc");
00061         
00062         ptr<pp_token> a = pp_token::create(loc,pp_token::TOK_NUMBER_LIT,s);
00063 
00064         lassert(is_equal(a,a));
00065         lassert(is_equal(a->type_get(),pp_token::TOK_NUMBER_LIT));
00066         lassert(is_equal(a->value_get(),t));
00067         lassert(is_equal(a->location_get()->file_get(),fi));
00068         lassert(is_equal(a->location_get()->line_get(),2U));
00069         lassert(is_equal(a->location_get()->column_get(),3U));
00070         lassert(is_equal(a->flags_get(),pp_token::FLG_LITERAL));
00071                 
00072         a->type_set(pp_token::TOK_STRING_LIT);
00073         a->value_set(u);
00074         a->location_set(source_location::create(fi,0,0));
00075         a->flags_set(pp_token::FLG_ERROR);
00076 
00077         lassert(is_equal(a->type_get(),pp_token::TOK_STRING_LIT));
00078         lassert(is_equal(a->value_get(),v));
00079         lassert(is_equal(a->location_get()->file_get(),fi));
00080         lassert(is_equal(a->location_get()->line_get(),0U));
00081         lassert(is_equal(a->location_get()->column_get(),0U));
00082         lassert(is_equal(a->flags_get(),(pp_token::FLG_LITERAL | pp_token::FLG_ERROR)));
00083                 
00084         ptr<pp_token> b = a->clone();
00085 
00086         lassert(is_equal(b,a));
00087         lassert(is_equal(a,b));
00088         lassert(is_equal(b->type_get(),pp_token::TOK_STRING_LIT));
00089         lassert(is_equal(b->value_get(),v));
00090         lassert(is_equal(b->location_get()->file_get(),fi));
00091         lassert(is_equal(b->location_get()->line_get(),0U));
00092         lassert(is_equal(b->location_get()->column_get(),0U));
00093         lassert(is_equal(b->flags_get(),(pp_token::FLG_LITERAL | pp_token::FLG_ERROR)));
00094                 
00095         ptr<pp_token> c;
00096 
00097         c = a;
00098         lassert(is_equal(c,a));
00099         lassert(is_equal(a,c));
00100         lassert(is_equal(c->type_get(),pp_token::TOK_STRING_LIT));
00101         lassert(is_equal(c->value_get(),v));
00102         lassert(is_equal(c->location_get()->file_get(),fi));
00103         lassert(is_equal(c->location_get()->line_get(),0U));
00104         lassert(is_equal(c->location_get()->column_get(),0U));
00105         lassert(is_equal(c->flags_get(),(pp_token::FLG_LITERAL | pp_token::FLG_ERROR)));
00106 }

void lestes::lang::cplus::lex::pre_lex_test ( void   ) 

Definition at line 50 of file pre_lex.test.cc.

References lestes::is_equal(), lassert, and TOK_EOF.

Referenced by main().

00051 {
00052         char inp[] = "abc$@`\n?""?""?""?""?=?""?/?""?(?""?)?""?!?""?<?""?>?""?-?""?'?""?+\\\nx\n";
00053         char ouv[] = "abc$@`\n?""?""?#\\[]|{}~^?""?+x\n";
00054         ulint out[] = {
00055                 ucn_token::TOK_BASIC,
00056                 ucn_token::TOK_BASIC,
00057                 ucn_token::TOK_BASIC,
00058                 
00059                 ucn_token::TOK_TRANSLATED,
00060                 ucn_token::TOK_TRANSLATED,
00061                 ucn_token::TOK_TRANSLATED,
00062                 
00063                 ucn_token::TOK_BASIC,
00064                 
00065                 ucn_token::TOK_BASIC,
00066                 ucn_token::TOK_BASIC,
00067                 ucn_token::TOK_BASIC,
00068 
00069                 ucn_token::TOK_BASIC,
00070                 ucn_token::TOK_BASIC,
00071                 ucn_token::TOK_BASIC,
00072                 ucn_token::TOK_BASIC,
00073                 ucn_token::TOK_BASIC,
00074                 ucn_token::TOK_BASIC,
00075                 ucn_token::TOK_BASIC,
00076                 ucn_token::TOK_BASIC,
00077                 ucn_token::TOK_BASIC,
00078 
00079                 ucn_token::TOK_BASIC,
00080                 ucn_token::TOK_BASIC,
00081                 ucn_token::TOK_BASIC,
00082 
00083                 ucn_token::TOK_BASIC,
00084                 
00085                 ucn_token::TOK_BASIC,
00086         };
00087 
00088         ptr<vec_loc> loc = vec_loc::create();
00089 
00090         loc->push_back(simple_location::create(1,1));
00091         loc->push_back(simple_location::create(1,2));
00092         loc->push_back(simple_location::create(1,3));
00093         loc->push_back(simple_location::create(1,4));
00094         loc->push_back(simple_location::create(1,5));
00095         loc->push_back(simple_location::create(1,6));
00096         loc->push_back(simple_location::create(1,7));
00097                 
00098         loc->push_back(simple_location::create(2,1));
00099         loc->push_back(simple_location::create(2,2));
00100         loc->push_back(simple_location::create(2,3));
00101                 
00102         loc->push_back(simple_location::create(2,4));      
00103         loc->push_back(simple_location::create(2,7));
00104         loc->push_back(simple_location::create(2,10));
00105         loc->push_back(simple_location::create(2,13));
00106         loc->push_back(simple_location::create(2,16));
00107         loc->push_back(simple_location::create(2,19));
00108         loc->push_back(simple_location::create(2,22));
00109         loc->push_back(simple_location::create(2,25));
00110         loc->push_back(simple_location::create(2,28));
00111                 
00112         loc->push_back(simple_location::create(2,31));
00113         loc->push_back(simple_location::create(2,32));
00114         loc->push_back(simple_location::create(2,33));
00115         loc->push_back(simple_location::create(3,1));
00116         loc->push_back(simple_location::create(3,2));
00117                 
00118         ulint i;
00119 
00120         ptr<pre_lex> plx = pre_lex::create(string_source::create(inp),encoder_host::create());
00121         ptr<ucn_token> tok;
00122 
00123         i = 0;
00124         do {
00125                 
00126                 tok = plx->read();
00127                 if (tok->type_get() == ucn_token::TOK_EOF) break;
00128 #if 0
00129                 ::std::cerr << " test " << i << " : " <<
00130                         "type " <<
00131                         (int)tok->type_get() << " ?== " << out[i] << 
00132                         "value " <<
00133                         (int)tok->value_get() << " ?== " << (int)ouv[i] << 
00134                         " line " <<
00135                         (int)tok->location_get()->line_get() << " ?== " << loc->at(i)->line_get() << 
00136                         " column " <<
00137                         (int)tok->location_get()->column_get() << " ?== " << loc->at(i)->column_get() 
00138                         << ::std::endl;
00139 #endif
00140                 lassert(is_equal((char)tok->value_get(),ouv[i]));
00141                 lassert(is_equal((char)tok->value_get(),ouv[i]));
00142                 lassert(is_equal(tok->type_get(),out[i]));
00143                 lassert(is_equal(tok->location_get(),ptr<simple_location>(loc->at(i))));
00144                 
00145                 i++;
00146         } while (true);
00147 }

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::predefined_macro_redefined ( ::lestes::msg::message_stencil1< ucn_string >::  create("attempt to redefine internal predefined macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when an internal predefined macro would be redefined.

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::predefined_macro_undefined ( ::lestes::msg::message_stencil1< ucn_string >::  create("attempt to undefine internal predefined macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when an internal predefined macro would be undefined.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::previous_definition ( ::lestes::msg::message_stencil0< bool >::  create("this is the location of the previous definition",::lestes::msg::message::FLG_ERROR)  ) 

Issued to show location of previous definition of a macro.

void lestes::lang::cplus::lex::run ( void   ) 

Definition at line 52 of file lang/cplus/lex/main.cc.

References lestes::msg::report_end::create(), lestes::msg::report_ostream::create(), lestes::msg::report_origin_filter::create(), lestes::msg::reporter::instance(), TOK_EOF, and TOK_LITERAL.

00053 {
00054 	::lestes::msg::reporter::instance()->filter_set(
00055                         ::lestes::msg::report_origin_filter::create( 
00056                                 ::lestes::msg::report_ostream::create(
00057                                         ::lestes::msg::report_end::create(),
00058                                         ostream_wrapper::create(&::std::cerr,false))));
00059 
00060         ptr<file_system> fs = file_system::create();
00061         if (!fs->add_search_path("/usr/include")) {
00062                 ::std::cout << "could not add path\n";
00063         }
00064         ptr<preprocessor> pp = preprocessor::create(fs,"");
00065 
00066         ptr<cpp_token> tok;
00067         ptr<source_location> loc;
00068         cpp_token::type_type type;
00069         ptr<token_value> tv;
00070         ptr<lex_literal> literal;
00071 
00072         do {
00073                 tok = pp->read();
00074                 loc = tok->location_get();
00075                 type = tok->type_get();
00076                 tv = tok->value_get();
00077                 literal = type == cpp_token::TOK_LITERAL ? tok->literal_get() : ptr<lex_literal>(NULL);
00078                 
00079                 ::std::cout << loc->file_get()->name_get() << ':' << loc->line_get() << ':' << loc->column_get();
00080                 ::std::cout << ' ' << tok->description_get();
00081                 
00082                 if (tv) {
00083                         ::std::cout << ' ';
00084 
00085                         ucn_string str(tv->content_get());
00086                         for (ucn_string::iterator it = str.begin(), end = str.end(); it != end; ++it) {
00087                                 ::std::cout << static_cast<ulint>(*it);
00088                         }
00089                         ::std::cout << ' ' << tv->content_get();
00090                 }
00091 
00092                 if (literal) {
00093                         ::std::cout << ' ' << "LINFO";
00094                 }
00095                 
00096                 ::std::cout << ::std::endl;
00097                 
00098         } while (tok->type_get() != cpp_token::TOK_EOF);
00099 
00100         if (pp->pragma_flag_get()) ::std::cout << "saw pragma\n";
00101 }

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::stray_character ( ::lestes::msg::message_stencil1< ucn_string >::  create("stray character `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when encountering a token holding a character, which does not fall into any token category would be emitted.

void lestes::lang::cplus::lex::string_joiner_test ( void   ) 

Tests string_joiner class.

Performs testing of string_joiner class.

Definition at line 54 of file string_joiner.test.cc.

References lestes::is_equal(), lassert, and TOK_EQ.

Referenced by main().

00055 {
00056         ptr<token_sequence> ts = token_sequence::create();
00057         ptr<file_info> fi = file_info::create("abc",NULL);
00058         ptr<source_location> loc = source_location::create(fi,1,1);
00059         ptr<pp_token> sep = pp_token::create(loc,pp_token::TOK_EQ);
00060 
00061         ts->add_back(sep);
00062         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("aaa")));
00063         
00064         ts->add_back(sep);
00065         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("bbb")));
00066 
00067         ts->add_back(sep);
00068         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("ccc")));
00069         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("ddd")));
00070         
00071         ts->add_back(sep);
00072         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("eee")));
00073         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("fff")));
00074   
00075         ts->add_back(sep);
00076         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("xxx")));
00077         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("yyy")));
00078         
00079         ts->add_back(sep);
00080         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("ggg")));
00081         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("hhh")));
00082         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("iii")));
00083         
00084         ts->add_back(sep);
00085         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("jjj")));
00086         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("kkk")));
00087         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("lll")));
00088 
00089         ts->add_back(sep);
00090         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("xxx")));
00091         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("yyy")));
00092         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("zzz")));
00093 
00094         ts->add_back(sep);
00095         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("www")));
00096         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("vvv")));
00097         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("uuu")));
00098 
00099 #if 0
00100         ts->add_back(sep);
00101         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("xxx")));
00102         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("yyy")));
00103         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("zzz")));
00104         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("aaa")));
00105         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("bbb")));
00106         ts->add_back(pp_token::create(loc,pp_token::TOK_WSTRING_LIT,token_value::create("ccc")));
00107         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("ddd")));
00108         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("eee")));
00109         ts->add_back(pp_token::create(loc,pp_token::TOK_STRING_LIT,token_value::create("fff")));
00110 #endif
00111         ts->add_back(sep);
00112 
00113         ptr<string_joiner> sj = string_joiner::create(ts);
00114 
00115         ptr<pp_token> r = sj->read();
00116         lassert(r);
00117         lassert(is_equal(r,sep));
00118         
00119         r = sj->read();
00120         lassert(r);
00121         lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT));
00122         lassert(is_equal(r->value_get(),token_value::create("aaa")));
00123         
00124         r = sj->read();
00125         lassert(r);
00126         lassert(is_equal(r,sep));
00127         
00128         r = sj->read();
00129         lassert(r);
00130         lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT));
00131         lassert(is_equal(r->value_get(),token_value::create("bbb")));
00132 
00133         r = sj->read();
00134         lassert(r);
00135         lassert(is_equal(r,sep));
00136         
00137         r = sj->read();
00138         lassert(r);
00139         lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT));
00140         lassert(is_equal(r->value_get(),token_value::create("cccddd")));
00141         
00142         r = sj->read();
00143         lassert(r);
00144         lassert(is_equal(r,sep));
00145         
00146         r = sj->read();
00147         lassert(r);
00148         lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT));
00149         lassert(is_equal(r->value_get(),token_value::create("eeefff")));
00150         
00151         r = sj->read();
00152         lassert(r);
00153         lassert(is_equal(r,sep));
00154         
00155         r = sj->read();
00156         lassert(r);
00157         lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT));
00158         lassert(is_equal(r->value_get(),token_value::create("xxxyyy")));
00159         
00160         r = sj->read();
00161         lassert(r);
00162         lassert(is_equal(r,sep));
00163         
00164 
00165         r = sj->read();
00166         lassert(r);
00167         lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT));
00168         lassert(is_equal(r->value_get(),token_value::create("ggghhhiii")));
00169         
00170         r = sj->read();
00171         lassert(r);
00172         lassert(is_equal(r,sep));
00173         
00174         r = sj->read();
00175         lassert(r);
00176         lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT));
00177         lassert(is_equal(r->value_get(),token_value::create("jjjkkklll")));
00178         
00179         r = sj->read();
00180         lassert(r);
00181         lassert(is_equal(r,sep));
00182         
00183         r = sj->read();
00184         lassert(r);
00185         lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT));
00186         lassert(is_equal(r->value_get(),token_value::create("xxxyyyzzz")));
00187         
00188         r = sj->read();
00189         lassert(r);
00190         lassert(is_equal(r,sep));
00191         
00192         r = sj->read();
00193         lassert(r);
00194         lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT));
00195         lassert(is_equal(r->value_get(),token_value::create("wwwvvvuuu")));
00196 
00197 #if 0
00198         r = sj->read();
00199         lassert(r);
00200         lassert(is_equal(r,sep));
00201 
00202         r = sj->read();
00203         lassert(r);
00204         lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT));
00205         lassert(is_equal(r->value_get(),token_value::create("xxxyyyzzz")));
00206         
00207         r = sj->read();
00208         lassert(r);
00209         lassert(is_equal(r->type_get(),pp_token::TOK_WSTRING_LIT));
00210         lassert(is_equal(r->value_get(),token_value::create("aaabbbccc")));
00211         
00212         r = sj->read();
00213         lassert(r);
00214         lassert(is_equal(r->type_get(),pp_token::TOK_STRING_LIT));
00215         lassert(is_equal(r->value_get(),token_value::create("dddeeefff")));
00216         
00217         r = sj->read();
00218         lassert(r);
00219         lassert(is_equal(r,sep));
00220 #endif
00221         
00222 }

void lestes::lang::cplus::lex::token_sequence_test ( void   ) 

Tests token sequence class.

Todo:
pt Add actual tests.

Definition at line 51 of file token_sequence.test.cc.

References lestes::is_equal(), and lassert.

Referenced by main().

00052 {
00053         ptr<file_info> fi = file_info::create(string("abc"),NULL);
00054         ptr<source_location> loc = source_location::create(fi,0,0);
00055         
00056         ptr<token_sequence> t1 = token_sequence::create();
00057 
00058         lassert(is_equal(t1,t1));
00059         lassert(is_equal(t1->empty(),true));
00060         lassert(is_equal(t1->length(),0U));
00061 
00062         //   pp_token::create(loc,pp_token::TOK_COMMA),
00063 
00064 }

ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::trailing_tokens_in_directive ( ::lestes::msg::message_stencil1< lstring >::  create("extra tokens at the end of %0 directive",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance())  ) 

Issued when there are extra tokens at the end of a preprocessor directive. The zeroth parameter is the string representation of the directive name.

void lestes::lang::cplus::lex::trigraphs_test ( void   ) 

Definition at line 49 of file trigraphs.test.cc.

References lassert, and TOK_EOF.

Referenced by main().

00050 {
00051         char in[] = "?""?= ?""?/ ?""?( ?""?) ?""?! ?""?< ?""?> ?""?- ?""?' \\?""?/ ?\\?/\n";
00052         char out[] = "# \\ [ ] | { } ~ ^ \\\\ ?\\?/\n";
00053         lint i;
00054         ptr<file_info> fi = file_info::create(string("abcd"),NULL);
00055         ptr<data_source> ds = string_source::create(in);
00056         ptr<encoder_host> enc = encoder_host::create();
00057         ptr<special_tokens> stok = special_tokens::create();
00058         ptr<trigraphs> tri = trigraphs::create();
00059         ptr<ucn_token> tok;
00060 
00061         enc->input_set(ds);
00062         stok->input_set(enc);
00063         tri->input_set(stok);
00064         
00065         i = 0;
00066         do {
00067                 tok = tri->read();
00068                 //cout << i << ": " << (char)tok.get_value() << endl;
00069                 if (tok->type_get() == ucn_token::TOK_EOF) break;
00070                 lassert((char)tok->value_get() == out[i]);
00071                 
00072                 i++;
00073         } while (true);
00074 }

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_insufficient_digits ( ::lestes::msg::message_stencil0< bool >::  create("insufficient digits in universal character escape sequence",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the ucn escape sequence does not contain proper number of digits.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_value_invalid ( ::lestes::msg::message_stencil0< bool >::  create("value of universal character escape sequence out of range",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the value of ucn escape sequence does not fall into the allowed ranges.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_value_invalid_in_identifier ( ::lestes::msg::message_stencil0< bool >::  create("value of universal character escape sequence out of range for identifiers",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the value of ucn escape sequence does not fall into the allowed ranges for identifiers.

void lestes::lang::cplus::lex::ucn_token_buffer_test ( void   ) 

Definition at line 49 of file ucn_token_buffer.test.cc.

References a, b, lestes::is_equal(), lassert, and u.

Referenced by main().

00050 {
00051         ptr<ucn_token> a = ucn_token::create(0,u(':'));
00052         ptr<ucn_token> b = ucn_token::create(0,u('h'));
00053         
00054         ptr<ucn_token_buffer> cb = ucn_token_buffer::create();
00055 
00056         cb->add_back(a);
00057         lassert(is_equal(cb->peek_front(),a));
00058         cb->add_back(b);
00059         lassert(is_equal(cb->peek_front(),a));
00060         cb->add_back(ucn_token::create(0,u('e')));
00061 
00062         cb->advance(1);
00063         lassert(is_equal(cb->peek_front(),b));
00064 
00065         cb->add_back(ucn_token::create(0,u('l')));
00066         cb->add_back(ucn_token::create(0,u('l')));
00067         cb->add_back(ucn_token::create(0,u('o')));
00068 
00069         ptr<token_value> tv = cb->extract_ordinary(5);
00070         ucn_string text(tv->content_get());
00071         
00072         for (ulint i = 0; i < 6; i++) {
00073           // cerr << "text " << text[i] << " string " << (int)("hello"[i]) << endl;
00074                 lassert(is_equal(text[i],static_cast<ucn>("hello"[i])));
00075         }
00076 }

void lestes::lang::cplus::lex::ucn_token_test ( void   ) 

Definition at line 45 of file ucn_token.test.cc.

References a, b, lestes::is_equal(), and lassert.

Referenced by main().

00046 {
00047         ptr<simple_location> loc = simple_location::create(3,5);
00048         ptr<ucn_token> a = ucn_token::create(ucn_token::TOK_NOT_EOF);
00049         
00050         lassert(is_equal(a,a));
00051         lassert(is_equal(a->location_get(),ptr<simple_location>(NULL)));
00052         lassert(is_equal(a->type_get(),ucn_token::TOK_NOT_EOF));
00053         
00054         ptr<ucn_token> b = ucn_token::create(ucn_token::TOK_BASIC,character::create_from_host('z'));
00055 
00056         lassert(is_equal(b,b));
00057         lassert(is_equal(b->type_get(),ucn_token::TOK_BASIC));
00058         lassert(is_equal(b->value_get(),character::create_from_host('z')));
00059         lassert(is_equal(a->location_get(),ptr<simple_location>(NULL)));
00060         
00061         ptr<ucn_token> c = ucn_token::create(ucn_token::TOK_BASIC,character::create_from_host('v'),loc);
00062         lassert(is_equal(c->type_get(),ucn_token::TOK_BASIC));
00063         lassert(is_equal(c->value_get(),character::create_from_host('v')));
00064         lassert(is_equal(c->location_get(),loc));
00065 
00066         ptr<ucn_token> d;
00067         d = c;
00068         lassert(is_equal(c,d));
00069         lassert(is_equal(d,c));
00070 
00071         lassert(is_equal(d->type_get(),ucn_token::TOK_BASIC));
00072         lassert(is_equal(d->value_get(),character::create_from_host('v')));
00073         lassert(is_equal(d->location_get(),loc));
00074 }

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::unable_to_concatenate ( ::lestes::msg::message_stencil0< bool >::  create("the concatenation does not result in a valid preprocessing token",::lestes::msg::message::FLG_ERROR)  ) 

Issued when the concatenation does not produce a valid preprocessing token.

ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::unable_to_open_file ( ::lestes::msg::message_stencil1< lstring >::  create("unable to open file `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance())  ) 

Issued when the file given in include does not exist or is not accessible. The zeroth parameter is the name of the file.

void lestes::lang::cplus::lex::unit_part_test ( void   ) 

Definition at line 48 of file unit_part.test.cc.

References lestes::is_equal(), lassert, and TOK_PLUS.

Referenced by main().

00049 {
00050         char inp[] = "+\n";
00051         pp_token_type out[] = { pp_token::TOK_PLUS, pp_token::TOK_LINE_END, pp_token::TOK_FILE_END };
00052         ptr<file_info> fi = file_info::create("abcd",NULL);
00053         ptr<unit_part> up =
00054                 unit_part::create(fi,string_source::create(inp),encoder_host::create(),macro_storage::create());
00055         ptr<pp_token> tok;
00056         
00057         ulint i = 0;
00058         do {
00059                 
00060                 tok = up->read();
00061 #if 0
00062                 ::std::cerr << " test " << i << " : " <<
00063                         tok->name_get() << " " <<
00064                         tok->type_get() << " ?== " << (int)out[i] << ""
00065                         << ::std::endl;
00066 #if 0         
00067                         (int)tok->value_get() << " ?== " << (int)ouv[i] << " offset " <<
00068                         (int)tok->location_get()->offset_get() << " ?== " << loc[i]->offset_get() << " line " <<
00069                         (int)tok->location_get()->line_get() << " ?== " << loc[i]->line_get() << " column " <<
00070                         (int)tok->location_get()->column_get() << " ?== " << loc[i]->column_get() << " order " <<
00071                         (int)tok->location_get()->order_get() << " ?== " << loc[i]->order_get() << ::std::endl;
00072 #endif
00073 #endif
00074                 lassert(is_equal(tok->type_get(),out[i]));
00075 
00076                 if (tok->type_get() == pp_token::TOK_FILE_END) break;
00077                 i++;
00078         } while (true);
00079 }

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::unterminated_argument_list ( ::lestes::msg::message_stencil1< ucn_string >::  create("unterminated argument list invoking macro `%0'",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< ucn_string >::instance())  ) 

Issued when the invocation of a function-like macro lacks the terminating `)'.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::unterminated_comment ( ::lestes::msg::message_stencil0< bool >::  create("unterminated comment",::lestes::msg::message::FLG_ERROR)  ) 

Issued when end of file is encountered within a multi-line comment.

Referenced by lexer_parse().

ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::unterminated_conditional ( ::lestes::msg::message_stencil1< lstring >::  create("unterminated %0",::lestes::msg::message::FLG_ERROR,::lestes::msg::formatter< lstring >::instance())  ) 

Issued for unterminated conditional directives. The zeroth parameter is the string representation of the directive name.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::user_error ( ::lestes::msg::message_stencil0< bool >::  create("user defined error",::lestes::msg::message::FLG_ERROR)  ) 

Issued for error directive.


Variable Documentation

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::conditional_starts_here

Error message for conditional directives.

Referenced by lestes::lang::cplus::lex::condition_stack::process().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::defined_invalid_macro_name

Error message for macro parsing.

Referenced by lestes::lang::cplus::lex::macro::parse_name().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::definition_expects_macro_name

Error message for macro parsing.

Referenced by lestes::lang::cplus::lex::macro::parse_name().

ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::directive_expects_macro_name

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::process_directive().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::duplicate_macro_parameter

Error message for macro parameter list.

Referenced by lestes::lang::cplus::lex::macro_head::parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::elif_after_else

Error message for conditional directives.

Referenced by lestes::lang::cplus::lex::condition_stack::process().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::elif_without_if

Error message for conditional directives.

Referenced by lestes::lang::cplus::lex::condition_stack::process().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::else_after_else

Error message for conditional directives.

Referenced by lestes::lang::cplus::lex::condition_stack::process().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::else_without_if

Error message for conditional directives.

Referenced by lestes::lang::cplus::lex::condition_stack::process().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::empty_character_constant

Error message for flexer.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::endif_without_if

Error message for conditional directives.

Referenced by lestes::lang::cplus::lex::condition_stack::process().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_comma

Error message for macro parameter list.

Referenced by lestes::lang::cplus::lex::macro_head::parse().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::expected_comma_right_par

Error message for macro parameter list.

Referenced by lestes::lang::cplus::lex::macro_head::parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_macro_name

Error message for macro manipulation.

Referenced by lestes::lang::cplus::lex::macro_storage::defined(), and lestes::lang::cplus::lex::macro_storage::undef().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_macro_parameter

Error message for macro parameter list.

Referenced by lestes::lang::cplus::lex::macro_head::parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::expected_right_par

Error message for macro parameter list.

Referenced by lestes::lang::cplus::lex::macro_head::parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::floating_exponent_empty

Error message for number parsing.

Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::floating_suffix_invalid

Error message for number parsing.

Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_hash_at_beginning

Error message for macro expansion list.

Referenced by lestes::lang::cplus::lex::macro_body::parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_hash_at_end

Error message for macro expansion list.

Referenced by lestes::lang::cplus::lex::macro_body::parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::hash_without_parameter

Error message for macro expansion list.

Referenced by lestes::lang::cplus::lex::macro_body::parse().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::integral_empty

Error message for number parsing.

Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::integral_suffix_invalid

Error message for number parsing.

Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().

ptr< ::lestes::msg::message_stencil2< ucn_string, ulint > > lestes::lang::cplus::lex::invalid_argument_count

Error message for macro expansion.

Referenced by lestes::lang::cplus::lex::macro::expand().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_ascii_character

Error message for encoder.

Referenced by lestes::lang::cplus::lex::encoder_ascii7::read().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_character_in_filename

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::process_directive().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_character_in_number

Error message for number parsing.

Referenced by lestes::lang::cplus::lex::preprocessor::classify_number().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::invalid_cpp_token

Error message for token conversion.

Referenced by lestes::lang::cplus::lex::preprocessor::read().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::invalid_directve

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::process_directive().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_escape_sequence

Error message for ucn translation.

Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_bad_literal().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::invalid_utf_character

Error message for encoder.

Referenced by lestes::lang::cplus::lex::encoder_utf8::read().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::line_expects_number

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::process_directive().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::line_expects_string

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::process_directive().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::macro_name_alt_operator

Error message for macro parsing.

Referenced by lestes::lang::cplus::lex::macro::parse_name().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::macro_name_identifier

Error message for macro parsing.

Referenced by lestes::lang::cplus::lex::macro::parse_name().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::macro_redefinition_different

Error message for macro manipulation.

Referenced by lestes::lang::cplus::lex::macro_storage::define().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::malformed_include

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::process_directive().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_hexadecimal_digits

Error message for ucn translation.

Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_bad_literal().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_newline

Error message for reading characters.

Referenced by lestes::lang::cplus::lex::pre_lex::read().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_terminating_dquote

Error message for flexer.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::missing_terminating_quote

Error message for flexer.

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::mixed_strings

Error message for string joining.

Referenced by lestes::lang::cplus::lex::string_joiner::read().

ptr< ::lestes::msg::message_stencil1< ulint > > lestes::lang::cplus::lex::nesting_too_deep

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::process_directive().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::predefined_macro_redefined

Error message for macro manipulation.

Referenced by lestes::lang::cplus::lex::macro_storage::define().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::predefined_macro_undefined

Error message for macro manipulation.

Referenced by lestes::lang::cplus::lex::macro_storage::undef().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::previous_definition

Error message for macro manipulation.

Referenced by lestes::lang::cplus::lex::macro_storage::define().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::stray_character

Error message for token conversion.

Referenced by lestes::lang::cplus::lex::preprocessor::read().

ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::trailing_tokens_in_directive

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::check_extra_tokens().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_insufficient_digits

Error message for ucn translation.

Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_bad_literal(), and lestes::lang::cplus::lex::ucn_token_buffer::extract_invalid_ucn().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_value_invalid

Error message for ucn translation.

Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_bad_literal(), lestes::lang::cplus::lex::ucn_token_buffer::extract_invalid_ucn(), lestes::lang::cplus::lex::ucn_token_buffer::extract_simple_ucn(), and lestes::lang::cplus::lex::ucn_token_buffer::extract_ucn_literal().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::ucn_escape_value_invalid_in_identifier

Error message for ucn translation.

Referenced by lestes::lang::cplus::lex::ucn_token_buffer::extract_invalid_ucn(), and lestes::lang::cplus::lex::ucn_token_buffer::extract_simple_ucn().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::unable_to_concatenate

Error message for token concatenation.

Referenced by lestes::lang::cplus::lex::concat::process().

ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::unable_to_open_file

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::evaluator(), and lestes::lang::cplus::lex::evaluator::process_directive().

ptr< ::lestes::msg::message_stencil1< ucn_string > > lestes::lang::cplus::lex::unterminated_argument_list

Error message for macro expansion.

Referenced by lestes::lang::cplus::lex::macro::expand().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::unterminated_comment

Error message for flexer.

ptr< ::lestes::msg::message_stencil1< lstring > > lestes::lang::cplus::lex::unterminated_conditional

Error message for conditional directives.

Referenced by lestes::lang::cplus::lex::condition_stack::process().

ptr< ::lestes::msg::message_stencil0< bool > > lestes::lang::cplus::lex::user_error

Error message for preprocessing directives.

Referenced by lestes::lang::cplus::lex::evaluator::process_directive().


Generated on Mon Feb 12 18:24:16 2007 for lestes by doxygen 1.5.1-20070107