Boost logo

Boost :

Subject: [boost] [wave] add_macro_definition("TEST=") behaves different than #define TEST
From: Klaus Gütter (Klaus.Guetter_at_[hidden])
Date: 2012-11-09 03:07:59


Test1 posted below produces:

INT
SPACE
EOF
SPACE
IDENTIFIER
SEMICOLON
NEWLINE
EOF

While Test2 produces:

INT
SPACE
IDENTIFIER
SEMICOLON
NEWLINE
EOF

The EOF in the third line of Test1 output is produced by the TEST macro expansion.
If this expected behaviour? I found this surprising.
(MSVC10, Boost 1.51)

Regards, Klaus

----
Code:
typedef cpplexer::lex_token<> token_type;
typedef context<
    string::iterator, 
    cpplexer::lex_iterator<token_type>
    > lexer_context_type;
 
void Test1()
{
  string instring("int TEST x;\n");
  lexer_context_type ctx(instring.begin(), instring.end(), "");
  ctx.set_language(language_support(support_c99));
  ctx.add_macro_definition("TEST=");
 
  for (lexer_context_type::iterator_type it = ctx.begin(); it != ctx.end(); ++it)
    cout << get_token_name(token_id(*it)) << endl;
}
void Test2()
{
  string instring("#define TEST\nint TEST x;\n");
  lexer_context_type ctx(instring.begin(), instring.end(), "");
  ctx.set_language(language_support(support_c99));
  for (lexer_context_type::iterator_type it = ctx.begin(); it != ctx.end(); ++it)
    cout << get_token_name(token_id(*it)) << endl;
}

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk