Gramer şöyle olsun. Burada ilginç olan Word1. Hem gramer Word1 ile bitebiliyor hem de optional word ile bitebiliyor.
Grammar ::= ( 'SINGLE-WORD' | 'PARAMETERISED-WORD' '('[A-Z]+')' | 'WORD1' 'OPTIONAL-WORD'? | 'WORD2' ( 'WORD-CHOICE-A' | 'WORD-CHOICE-B' ) | 'WORD3'+ )
Elimizde şöyle bir DSL olsun.
// Initial interface, entry point of the DSL// Depending on your DSL's nature, this can also be a class with static// methods which can be static imported making your DSL even more fluentinterface Start {End singleWord();End parameterisedWord(String parameter);Intermediate1 word1();Intermediate2 word2();Intermediate3 word3();}// Terminating interface, might also contain methods like execute();interface End {void end();}// Intermediate DSL "step" extending the interface that is returned// by optionalWord(), to make that method "optional"interface Intermediate1 extends End {End optionalWord();}// Intermediate DSL "step" providing several choices (similar to Start)interface Intermediate2 {End wordChoiceA();End wordChoiceB();}// Intermediate interface returning itself on word3(), in order to allow// for repetitions. Repetitions can be ended any time because this// interface extends Endinterface Intermediate3 extends End {Intermediate3 word3();}
Şöyle yaparız
Start start = ... start.singleWord().end(); start.parameterisedWord("abc").end(); start.word1().end(); start.word1().optionalWord().end(); start.word2().wordChoiceA().end(); start.word2().wordChoiceB().end(); start.word3().end(); start.word3().word3().end(); start.word3().word3().word3().end();
Hiç yorum yok:
Yorum Gönder