C++ <
ve >
, tüm belirsizlikler içindeki bir "tuhaf" olduğunu düşünürdüm ama bir ayrıştırıcı uygulamaya çalışırken sonra ben <
ve >
kullandığı hemen her dil kırar bir örnek buldum jenerik türleri için:Java, C++, C#, vs. < and > ile bu sözdizimsel belirsizliği nasıl aşar?
f(g<h, i>(j));
Bu sözdizimsel ya bir jenerik yöntem çağrısı (g
) olarak yorumlanabilir olabilir, ya da f
iki karşılaştırmaların sonuçları veren olarak yorumlanabilir.
Bu diller (özellikle Java, which I thought was supposed to be LALR(1)-parsable?) bu sözdizimsel belirsizliği nasıl aşar?
Sadece bununla uğraştığım herhangi bir habersiz/bağlamsız bir yol düşünemiyorum, ve LALR (1) -parsable izin vermeden, böyle bir dilin bağlamı nasıl olabileceği konusunda şaşkınım. .
(hatta GLR ayrıştırıcı hiçbir bağlam ile bu bildirimin için tek ayrıştırma döndüremez dikkati çekiyor !! var)
1 harika bir soru vardır, sadece bir not, java derleyicisinin, belirsizliği gidermek için birçok sezgisel etkisi vardır, bu da bol miktarda tahmin eder. Kendileri, jenerik sisteminin bozulduğunu ve başarısız oldukları vakaların olduğunu (her ne kadar oran olsalar da), java 8'in bazı sunumlarını açıkladıkları sunuma ve 8 nolu java'da nasıl ele alabileceklerine bakarlar. –
@BenjaminGruenbaum: Teşekkürler. :) Sezgisel yaklaşımla ilgili olarak - iyi derleyici hata mesajları oluşturmak için kesinlikle harikalar, ama dil özelliklerinin dilbilgisinin bir parçası olmadıkça, belirsizlikleri çözmek için yasal olarak kullanılamazlar, değil mi? Ve eğer bunlar * dilbilgisinin bir parçasıysa, o zaman dilbilgisi bağlamdan nasıl özgür olabilir (yalnız LR (1) - ayrılabilir)? – Mehrdad
değil amibugous, g'nin – NimChimpsky