Последовательности символов ASCII, доступные для использования в качестве операторов в макросах - PullRequest
7 голосов
/ 13 октября 2019

Макрос RecipesBase.jl @recipe использует пару специальных операторов, построенных из символов ASCII, а именно --> и :=. Эти последовательности символов, кажется, имеют какой-то особый атрибут, который позволяет их анализировать в Expr. Сравните --> с --:

julia> 1 --> 2
ERROR: syntax: invalid syntax 1 --> 2

julia> 1 -- 2
ERROR: syntax: invalid operator "--"

julia> :(1 --> 2)
:($(Expr(:-->, 1, 2)))

julia> :(1 -- 2)
ERROR: syntax: invalid operator "--"

Интересно, что 1 --> 2 анализируется с заголовком выражения :-->, тогда как другие бинарные операторы, включая бинарные операторы Unicode, такие как (типизированныекак \uparrow + TAB), анализируются с помощью выражения :call:

julia> dump(:(1 --> 2))
Expr
  head: Symbol -->
  args: Array{Any}((2,))
    1: Int64 1
    2: Int64 2

julia> dump(:(1 ↑ 2))
Expr
  head: Symbol call
  args: Array{Any}((3,))
    1: Symbol ↑
    2: Int64 1
    3: Int64 2

Итак, у меня есть несколько связанных вопросов:

  1. Что случилосьс --> и :=? (РЕДАКТИРОВАТЬ: Другими словами, почему эти последовательности символов специально анализируются?)
  2. Существуют ли другие последовательности символов ASCII, которые ведут себя аналогично --> и := и поэтому могут использоваться в качестве операторов в макросах?
  3. Есть ли где-нибудь документация, в которой перечислены различные "специальные" последовательности символов ASCII?

1 Ответ

4 голосов
/ 13 октября 2019

--> и := специально анализируются анализатором Julia.

Посмотрите на этот файл: https://github.com/JuliaLang/julia/blob/f54cdf45a9e04f1450ba22142ddac8234389fe05/src/julia-parser.scm

В нем перечислены все специально проанализированные последовательности символов,и я почти уверен, что вы также можете получить ассоциативность от него.

...