Sto creando una DSL per un motore di gioco di carte estensibile su cui sto lavorando, con boo.Difficile boo sintattica macro
Ho una macro di scheda che crea una classe per un nuovo tipo di scheda e inizializza alcune proprietà nel costruttore. Quella macro ha alcuni submacro per impostare altre cose. Fondamentalmente voglio che diventi qualcosa di simile:
card 'A new card':
type TypeA
ability EffectA:
// effect definition
in questo:
class ANewCard (Card):
def constructor():
Name = "A new card"
Type = Types.TypeA
AddEffect(EffectA())
class EffectA (Effect):
// effectdefintion
L'effetto sicuramente deve essere una classe, perché sarà passato in giro (si tratta di un modello di strategia).
Finora, ho questo semplice scheletro:
macro card:
yield [|
class $(ReferenceExpression(card.Arguments[0])) (Card):
def constructor():
Name = $(card.Arguments[0])
|]
Ora, non so cosa devo fare con card.Body per rendere il codice aggiuntivo macro capacità di costruttore, mentre anche la generazione di un nidificato classe. qualche idea? Questo può essere fatto con le attuali competenze linguistiche?