2010-12-10 9 views

risposta

11

x+++++y viene analizzato come x ++ ++ + y e non come x ++ + ++ y. Secondo Maximal Munch principle "il tokenizzatore dovrebbe continuare a leggere i caratteri dal file sorgente fino a quando l'aggiunta di un altro personaggio provoca il token corrente di smettere di dare un senso"

x++ ++ +y non deve compilare (in C e C++), in quanto l'operatore di post-incremento ++ richiede un lvalue come argomento e restituisce un rvalue.

+0

Questo vale per tutte le lingue che usano la corrispondenza avida/più lunga regex per la tokenizzazione - che dovrebbe essere la maggior parte di loro (in realtà, non riesco a pensare a uno che non lo fa). – delnan

+0

* "' x ++ ++ + y' non dovrebbe essere compilato "* E infatti, non lo fa (su' gcc' comunque): 'error: lvalue richiesto come incremento operando' Wow mi ha sollevato di vederlo. –

+0

Sfortunatamente, non tutte le forme di '+++++++++' sono incomprensibili. MSVC accetta almeno felicemente alcuni di loro e quindi WTF sa cosa con esso. C'è questa piccola, in-house utility della nostra che è sempre stata data a un tirocinante da fare (non la mia decisione). Ha una merda come quella in tutto il posto. –