簡體   English   中英

困難的boo語法宏

[英]Difficult boo syntactic macro

我正在使用boo為正在使用的可擴展紙牌游戲引擎創建DSL。

我有一個card宏,它為一種新型的card創建一個類,並在構造函數中初始化一些屬性。 該宏具有一些用於設置其他內容的子宏。 基本上我希望它變成這樣的東西:

card 'A new card':
    type TypeA
    ability EffectA:
        // effect definition

到這個:

class ANewCard (Card):
    def constructor():
        Name = "A new card"
        Type = Types.TypeA
        AddEffect(EffectA())

    class EffectA (Effect):
        // effectdefintion

效果肯定需要是一個類,因為它會被傳遞(這是一種策略模式)。

到目前為止,我有這個簡單的框架:

macro card:
    yield [|
        class $(ReferenceExpression(card.Arguments[0])) (Card):
            def constructor():
                Name = $(card.Arguments[0])
    |]

現在,我不知道該如何使用card.Body來使能力宏將代碼添加到構造函數中,同時還要生成一個嵌套類。 有什么想法嗎? 可以使用當前的語言功能嗎?

可以辦到。 這是如何做:

import Boo.Lang.Compiler.Ast 
import Boo.Lang.PatternMatching 

macro card(name as string): 
    klass = [| 
        class $(ReferenceExpression(name)): 
            def constructor(): 
                Name = $name
    |] 
    klass.Members.Add(card["effect"]) 
    klass.GetConstructor(0).Body.Add(card["effect-ctor"] as Expression) 
    yield klass 

macro effect(eff as ReferenceExpression): 
    card["effect"] = [| 
        class $eff (Effect): 
            pass 
    |] 
    card["effect-ctor"] = [| Effects.Add($(eff)()) |] 

感謝Cedric Vivier協助我加入Google boo小組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM