Одна вещь, которую я нашел сбивающей с толку, это то, что "()" - это операторы группировки.
Вот ваша основная объявленная функция.
Пр. 1:
var message = 'SO';
function foo(msg) {
alert(msg);
}
foo(message);
Функции являются объектами и могут быть сгруппированы. Так что давайте разбрасывать парень вокруг функции.
Пр. 2:
var message = 'SO';
function foo(msg) { //declares foo
alert(msg);
}
(foo)(message); // calls foo
Теперь вместо того, чтобы объявлять и сразу вызывать одну и ту же функцию, мы можем использовать базовую замену, чтобы объявить ее так, как мы ее называем.
Пр. 3.
var message = 'SO';
(function foo(msg) {
alert(msg);
})(message); // declares & calls foo
Наконец, нам не нужен этот дополнительный foo, потому что мы не используем имя для его вызова! Функции могут быть анонимными.
Пр. 4.
var message = 'SO';
(function (msg) { // remove unnecessary reference to foo
alert(msg);
})(message);
Чтобы ответить на ваш вопрос, вернитесь к примеру 2. Ваша первая строка объявляет некоторую безымянную функцию и группирует ее, но не вызывает ее. Вторая строка группирует строку. Оба ничего не делают. (Первый пример Винсента.)
(function (msg){alert(msg)});
('SO'); // nothing.
(foo);
(msg); //Still nothing.
Но
(foo)
(msg); //works
Аххм, я погуглил "Prolog.NET" и нашел это (1-й результат, кстати)
Prolog.NET - это полнофункциональный Prolog среда программирования для .NET Фреймворк. Он включает расширенный компилятор с языковыми расширениями и генератор кода, ориентированный на Microsoft Промежуточный язык (MSIL) и интеграция с Visual Studio .NET Интегрированная среда разработки.
Если вы не найдете, возможно, вам понадобится этот инструмент Microsoft Oslo (Codename). Это программное обеспечение для создания DSL и отлично работает для разработки синтаксиса диаграмм для компиляторов.
Проверьте эту ссылку http://www.codeproject.com/KB/cs/Oslo_MGrammar.aspx?display=PrintAll