Jak zrobić Java, C++, C# itp. obejść tę konkretną wieloznaczność składniową za pomocą < and?
Kiedyś myślałem, że C++ jest tym "dziwnym" ze wszystkimi niejasnościami z <
i >
, ale po próbie zaimplementowania parsera myślę, że znalazłem przykład, który łamie prawie każdego dnia. język, który używa <
i >
dla typów rodzajowych:
f(g<h, i>(j));
To może być interpretowane składniowo albo jako wywołanie metody ogólnej (g
), albo może być interpretowane jako dające f
wyniki dwóch porównań.
Jak powstają takie języki (zwłaszcza Java, który miał być LALR (1) - parsable?) obejść tę dwuznaczność składniową?
Po prostu nie mogę sobie wyobrazić żadnego Nie-hakerskiego / wolnego od kontekstu sposobu radzenia sobie z tym i jestem zdumiony, jak każdy taki język może być wolny od kontekstu, nie mówiąc już o LALR(1) - parsownym...
(warto zauważyć, że nawet parser GLR nie może zwrócić ani jednego Parsa dla tej instrukcji bez kontekstu!!)
2 answers
Wywołanie metody generycznej w Javie byłoby
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-19 16:25:06
Po prostu nie mogę sobie wyobrazić żadnego Nie-hakerskiego / wolnego od kontekstu sposobu radzenia sobie z tym i jestem zdumiony, jak każdy taki język może być wolny od kontekstu, nie mówiąc już o LALR(1) - parsownym...
Odpowiedź jest taka ,że nie są (przynajmniej nie Java i C++; niewiele wiem o C#). Gramatyka języka Java, którą łączysz, pochodzi z 1996 roku, na długo przed wprowadzeniem generyków.
Do dalszej dyskusji zobacz czy C# i Java są Gramatykami LALR(x)?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:17