如何扩展 Crystal 语言语法?

How to extend Crystal language syntax?

例如,我想获得看起来像本机的 "for" 循环,它是在 crystal 的嵌入式宏语言中实现的,但它不存在(出于原则原因)主要,"runtime" 语言:

for i in list do
end

for k, v in hash do
end

(这里的“{}”是一个简单的块。无论如何我不能在这里使用 do .. end 语法(也许不能))。 会很好的实现multi-inlcude指令,比如:

includes MixinX, MixinY, MixinZ

等等... 据我所知,宏(在提供的片段中名为 "for" 和 "includes")不能接受 "i in list" 而不用双引号。那么...是否只有一种方法可以做到这一点 - 扩展 crystal 的 syntax/lexical 解析器和分析器本身?

也许,你可以使用这样的东西:

module Foo
  def foo
    "foo"
  end
end

module Bar
  def bar
    "bar"
  end
end

class Object
  macro includes(*mods)
    {% for mod in mods %}
      include  {{ mod }}
      {% end %}
  end
end

class Baz
  includes Foo, Bar
end

Baz.new.foo # => "foo"
Baz.new.bar # => "bar"