2010-12-10 17 views

cevap

11

x+++++y, x ++ ++ + y olarak değil x ++ + ++ y olarak ayrıştırılır. Maximal Munch principle göre, "simgeleştiricisine anlamda yapmayı durdurmak için geçerli belirteci bir daha karakterini neden olur ekleyerek kadar kaynak dosyadan karakterleri okuma tutmalı"

x++ ++ +y (C ve C++ olarak) derlemek olmamalıdır artırma sonrası operatörü çünkü ++, bir argüman olarak bir lvalue gerektirir ve rvalue değerini döndürür.

+0

Bu, açgözlü/en uzun eşleşme kullanan tüm diller için geçerlidir. tokenizasyon için rejeksler - bunların çoğu (aslında, olmayan bir düşünemiyorum). – delnan

+0

* "' x ++ ++ + y 'derlememelidir" * Ve gerçekten de, (gcc'de zaten): 'hata: artış işleneni olarak gerekli olan lvalue' Vay onu görmekten bıkmıştı. –

+0

Maalesef, '+++++++++' biçimlerinin tamamı, birleştirilemez. MSVC, en azından bazılarını memnuniyetle kabul eder ve WTF bununla ne olduğunu bilir. Her zaman bir stajyere verilmiş olan (benim kararım değil) bu küçük, kurum içi yarar var. Her yerde böyle bir şey var. –