PHP/FI Version 2.0

         

Вышлите мне ваши добавления!



Шаг 6 - Вышлите мне ваши добавления!

Если Вы хотите, чтобы ваши функции, были добавленны к следующему выпуску PHP/FI, пошлите их мне. Возможно самый лучший способ это сделать - это с помощью контекстно-зависимого diff. Чтобы сделать это, вам нужна будет копия немодифицированной дистрибуции. Просто сделайте, diff -c, для файлов, которые были изменены, сравнивая их с первоначальными файлми. Пожалуйста не высылайте мне изменения в файле parse.c, так как тот файл генерируется автоматически. Вместо этого высылайте мне различия в файле parse.raw.

Time() - это пример, иллюстрирующий шаги, при добавлении функции. Возможно, что функция, которую Вы захотите добавить будет немного более сложной чем этот пример. Возможно вы захотите передавать параметры вашей функции и манипулировать этими параметрами каким-либо способом. Возможно вы даже захотите чтобы она вызывалась различными способами. Эти понятия будут проиллюстрированы PHP/FI функцией Crypt(). См. также раздел, озаглавленный Замечания по хаканию Кода для несколько большего числа технических деталей




относительно написания кода для PHP/FI.

Грамматика Crypt() в parse.raw:

%token CRYPT . . . | CRYPT '(' expr ',' expr ')' { if(GetCurrentState(NULL) || inCase || inElseIf) Crypt(1); } | CRYPT '(' expr ')' { if(GetCurrentState(NULL) || inCase || inElseIf) Crypt(0); }

Здесь показано, как определить грамматику, которая позволяет, вызывать функцию с 1 или 2 параметрами. Вы можете написать различные функции, чтобы обрабатывать оба случая, или просто посылать параметр режима, как выполнено здесь, для указания режима, в котором функция вызвана. Обратите внимание, что в этом случае нельзя использовать одну из предопределенных INTFUNC грамматик, так как ваша функция может принимать переменное число параметров.

Другой иллюстрируемый аспект - как фактически представить параметры функции . В большинстве случаев Вы захотите использовать идентификатор expr. Этот идентификатор означает, что параметр - выражение. Выражение может быть литеральное значение, обращение к функции или комбинация многих выражений. См. parse.raw для полного определения грамматики yacc для выражений для большего количества деталей.

Запись Хэш-Таблицы в lex.c:



Содержание раздела