operator
Задайте новый символ оператора
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
operator(symb
,f
, <Prefix | Postfix | Binary | Nary, prio
>, <Global>) operator(symb
, Delete, <Global>)
operator(symb, f, T, prio)
задает новый символ оператора symb
типа T
с приоритетом prio
. Функциональный f
выполняет выражения с помощью нового оператора.
operator(symb, Delete)
удаляет определение символа оператора symb
.
operator
используется, чтобы задать новые пользовательские символы оператора или удалить их.
Учитывая символ оператора "++"
, скажем, с оценкой функционального f
, следующие выражения создаются синтаксическим анализатором, в зависимости от типа оператора:
Prefix
:
Вход ++x
приводит к f(x)
.
Postfix
:
Вход x++
приводит к f(x)
.
Двоичный файл:
Вход x ++ y ++ z
приводит к f(f(x, y), z)
.
Nary
:
Вход x ++ y ++ z
приводит к f(x, y, z)
.
Там может существовать символы оператора, которые являются префиксами других символов оператора. Сканер читает как можно больше символов и выбирает самый длинный символ оператора соответствия. Cf. Пример 3.
Не возможно задать два оператора с тем же символом. Таким образом, нельзя задать унарный ++
и бинарный ++
одновременно.
Следующие ограничения существуют для строки символа оператора symb
:
Это не может быть более длинно, чем 32 символа.
Это не может запуститься с пробела.
Это не может запустить с \
(наклонная черта влево) символ.
Таким образом строки " @"
и "/"
не позволены. Обратите внимание на то, что в настоящее время operator
не проверяет эти ограничения.
Могут быть переопределены встроенные операторы.
Не возможно задать - фиксируют операторы как |x | или или другие типы с 3 не операторов.
Новый символ оператора также используется, если файлы читаются за одним исключением: если файл читается с функциональным read
с помощью опции Plain
, новый оператор не учтен. (Эта опция используется, если файлы библиотеки MuPAD® читаются, потому что в противном случае пользовательские операторы могли изменить значение исходного кода неконтролируемым способом.)
Если оператор будет задан при чтении файла с опцией Plain
, то определение будет использоваться для остатка от файла и затем удалено автоматически. Если оператор задан с опцией Global
, это поведение изменяется, и оператор не будет активен при чтении файла, но будет существовать на интерактивном уровне вместо этого.
Новый символ оператора symb
известен синтаксическим анализатором и может использоваться, чтобы ввести выражения. Новый символ оператора не будет использоваться при чтении файлов с помощью функционального read
с опцией Plain
.
Функциональный f
, соответствующий новому оператору, будет всегда преобразовываться в function environment
, содержащий дополнительную программу вывода для оператора вывод, если это уже не содержало программу вывода.
Этот пример показывает, как задать символ оператора для операции сдвига разряда (как на языке C
):
bitshiftleft := (a, b) -> a * 2^b: operator("<<", bitshiftleft, Binary, 950):
После этого вызова символ <<
может использоваться, чтобы ввести выражения:
2 << 1, x << y
operator("<<", Delete):
Идентификаторы могут использоваться в качестве символов оператора:
operator("x", _vector_product, Binary, 1000):
PRETTYPRINT := FALSE: print(Plain, a x b x c)
(a x b) x c
PRETTYPRINT := TRUE: operator("x", Delete):
Этот пример показывает, что сканер пытается совпадать с самым длинным символом оператора:
operator("~", F, Prefix, 1000): operator("~>", F1, Prefix, 1000): operator("~~>", F2, Prefix, 1000):
print(Plain, ~~ x, ~~> x, ~ ~> x, ~~~> x)
~ ~ x, ~~> x, ~ ~> x, ~ ~~> x
operator("~", Delete): operator("~>", Delete): operator("~~>", Delete):
|
Символ оператора: символьная строка. |
|
Функция, оценивающая выражения с помощью оператора. |
|
Приоритет оператора: целое число между 1 и 1999. Значение по умолчанию 1300. |
|
Оператор рассматривается как унарный оператор с префиксной нотацией. Учитывая символ оператора |
|
Оператор рассматривается как унарный оператор с постфиксным обозначением. Учитывая символ оператора |
|
Оператор рассматривается как неассоциативный бинарный оператор с инфиксной нотацией. Учитывая символ оператора |
|
Оператор рассматривается как ассоциативный оператор не с инфиксной нотацией. Учитывая символ оператора |
|
Оператор с символом |
|
При определении оператора в библиотеке или коде пакета (технически: в файле, который читается с опцией |
Пустой объект типа DOM_NULL
.
Когда сканер читает новую лексему, он сначала отбрасывает любой пробел и символы наклонной черты влево. Затем это пытается совпадать с пользовательскими символами оператора. Самый длинный пользовательский символ оператора, совпадающий с отсканированными символами, сделан следующей лексемой. Если никакой пользовательский символ оператора не соответствует, это сканирует для встроенных лексем.
Синтаксический анализатор использует и рекурсивное убывание и парсинг приоритета оператора. Встроенные и пользовательские операторы анализируются с помощью приоритета оператора.