Ну, похож, я ответил на свой собственный вопрос.
LogParser.exe -i:IISW3C
"SELECT COUNT(cs(User-Agent)) AS Client
FROM *.log WHERE STRLEN(cs(User-Agent)) > 100"
Вы не не сказать, что такое целевая машина, или должен ли компилятор существовать или быть только воображаемым.
В мире воображения я бы сказал, что адаптация метациркулярного интерпретатора LISP Джона Маккарти была бы весьма неплохой. Закрыть. Вы также можете посмотреть на Джона Рейнольда ' s paper Определительные интерпретаторы для языков высшего порядка , которые, хотя и являются плотными, являются образцом простоты.
В мире реальности я бы сделал ставку на Chez Scheme , но, к сожалению, Компилятор с собственным кодом является закрытым исходным кодом. Тем не менее, вы можете научиться чему-то, изучая переводчика. Еще одна система, которую стоит изучить, - это компилятор Oberon , который был разработан, чтобы его мог собрать и понять один человек, и он очень чистый.
что означает код вне глобальной области видимости и внутри FunctionBody
других функций.
Следует избегать функций внутри блоков, поскольку они могут вести к непредсказуемому поведению, например:
if (true) { функция foo () {предупреждение ('истина'); }} еще {функция foo () {предупреждение ('ложь!'); }} foo (); // правда? ложный? почему?
Приведенный выше код должен фактически вызвать ошибку SyntaxError
, поскольку блок
может содержать только операторы (а спецификация ECMAScript не определяет никаких операторов функций), но большинство реализаций являются толерантными и просто будут использовать вторую функцию, которая предупреждает «ложь!»
.
Реализации Mozilla -Rhino, SpiderMonkey - имеют другое поведение. Их грамматика содержит нестандартное описание функции, это означает, что функция будет оцениваться во время выполнения , а не во время синтаксического анализа, как это происходит с FunctionDeclaration
s. В этих реализациях мы получим первую определенную функцию.
Функции могут быть объявлены по-разному, сравните следующие :
1- Функция, определенная с помощью конструктора Function присвоено переменной multiply :
var multiply = new Function("x", "y", "return x * y;");
2- Объявление функции с именем multiply :
function multiply(x, y) {
return x * y;
}
3- Выражение функции, присвоенное переменной multiply :
var multiply = function (x, y) {
return x * y;
};
4- Выражение именованной функции func_name , присвоенное переменной multiply :
var multiply = function func_name(x, y) {
return x * y;
};