+ Reply to Thread
Results 1 to 2 of 2

Thread: Working in a maximal munch

  1. #1
    Chinmoy's Avatar
    Chinmoy is offline Programming Expert
    Join Date
    Feb 2008
    Location
    where heaven meets earth
    Posts
    410
    Rep Power
    18

    Working in a maximal munch

    Maximal munch

    In computer programming, the "maximal munch" principle is the rule that as much of the input as possible should be processed when creating some construct.
    [Quoting wikipedia]

    But the real problem is where we have to solve such expression.

    Welcome to the world of maximal munch.

    In one of the early stages of C++ translation, the portion of the compiler that performs “lexical analysis” has the task of breaking up the input stream into individual “words,” or tokens. So when the lexical analyzer encounters a character like (->*), it might reasonably identify three tokens (-, >, and *), two tokens (-> and *), or a single token (->*)!

    However to avoid this ambiguous state of affairs, the lexical analyzer has been taught to identify the lingest sequence, thus consuming as many characters as it legally can. The situation :: a maximal munch!

    The expression a+++++b is illegal, because it’s tokenized as a ++ ++ + b, and it’s illegal to post-increment an rvalue like a++.

    If you had wanted to post-increment a and add the result to a pre-incremented b, you’d have to introduce at least one space as in: a+++ ++b. If you are writing a code which should be reusable, even though it’s not strictly necessary you should consider including one more space as: a++ + ++b, and the last and best is the addition of a few parentheses: (a++) + (++b).

    Maximal munch solves many more problems than it causes, but in two common situations, it’s an annoyance. The first is in the instantiation of templates with arguments that are themselves instantiated templates. For example, using the standard library, one might want to declare a list of vectors of strings:
    list> lovos; // error!

    Unfortunately, the two adjacent closing angle brackets in the instantiation are interpreted as a shift operator, and we’ll get a syntax error. Addition of whitespaces fixes the problem ::
    list< vector > lovos;

    Another situation - default argument initializers for pointer formal arguments ::
    void process( const char *= 0 ); // error!

    This declaration is attempting to use the *= assignment operator in a formal argument declaration.That is a syntax error. This problem comes under the “wages of sin” category. It wouldn’t have happened if the author of the code had given the formal argument a name. Not only is such a name some of the best documentation one can provide, its presence would have made the maximal munch problem impossible:
    void process( const char *processId = 0 );

    Read more on this topic :: The maximal munch | TECHARRAZ
    God is real... unless declared an integer

  2. CODECALL Circuit advertisement
    Join Date
    Always
    Location
    Advertising world
    Posts
    Many

     
  3. #2
    Jordan Guest

    Re: Working in a maximal munch

    Another excellent read! +rep

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Not working in FF/Chrome, working in IE
    By fedlerner in forum AJAX
    Replies: 17
    Last Post: 03-14-2011, 10:26 AM
  2. CSS not working for me
    By An Alien in forum HTML Programming
    Replies: 16
    Last Post: 02-09-2011, 06:15 PM
  3. Not too sure why this isn't working...
    By ANG AfterShock in forum Visual Basic Programming
    Replies: 5
    Last Post: 12-13-2010, 02:57 PM
  4. need help : working with xml
    By denarced in forum Java Help
    Replies: 2
    Last Post: 12-18-2008, 11:52 AM

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts