
ããã¯ãã¢ãã«é§ååéçºãµã€ã¯ã«ã®5çªç®ã®èšäºã§ãã 以åã®èšäºã§ã¯ããã§ã«ã¡ã¿ã¢ãã« ã ã¢ãã«æ€èšŒ ã ã¢ãã«ã®ããã€ãã®è¡šèšæ³ïŒ å³ãšè¡š ïŒãæ±ã£ãŠããŸããã ããã¯ãã¹ãŠãMOF ã¢ããªã³ã°ã¹ããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯å ã«ãããŸããã ä»æ¥ã¯ãEBNFã¢ããªã³ã°ã¹ããŒã¹ãžã®æ©æž¡ããè¡ããŸããMOFã¢ãã«ã®ããã¹ãè¡šèšã«ç²ŸéããŸãã
ã¯ããã«
äžè¬ã«ãæ±çšããã°ã©ãã³ã°èšèªãšãµããžã§ã¯ãæåèšèªã®éçºã®ãããã¯ã«é¢ããå€ãã®æ å ±ããããŸãã 確ãã«ããã«èå³ããã人ã¯èª°ã§ããã¬ã¯ãµãŒãããŒãµãŒãæ§ææšãªã©ã®äžè¬çãªèããæã£ãŠããŸãã ããããå察åŽããå°ãã¢ãããŒãããŸãã DSLã®éçºå šè¬ã«ã€ããŠã¯èæ ®ããŸãããã¢ãã«æåã®éçºã®èŠ³ç¹ããã®ã¿èå³ããããŸãã

ã泚æ
æ£çŽãªãšãããå°å ¥ã¯äœããã®ãã¬ãŒã³ã¹ããŒãã³ã°ã§ããããšãå€æããŸããã äž»ã«ã¢ãã«é§ååéçºã®å°é家ã«çŠç¹ãåœãŠãŠããŸãã ã¹ã¯ããŒã«ã§ããŸãã
å³ã§ã¯ãèµ€ãé»ã玫ãç·ã®è²ã¯ãããã°ã©ãã³ã°èšèªã®çè«ã§éåžžèæ ®ããããã®ã瀺ããŠããŸãã EBNFïŒãŸãã¯ãã®ä»ïŒã®èšèªã§ã¯ããã®èšèªã®ææ³ãéçºãããŠããŸãã ãã®åŸãããã°ã©ããŒã¯ææ³ã«åŸã£ãŠãœãŒã¹ã³ãŒããèšè¿°ããŸãã ãœãŒã¹ã³ãŒãã¯ããŒãµãŒã«æž¡ãããããŒãµãŒã¯ããã°ã©ã ããã¹ããäœããã®å éšè¡šçŸã«å€æããŸãïŒæœè±¡ã»ãã³ãã£ãã¯ã°ã©ããšåŒã³ãŸãããïŒã ãã®ã°ã©ãã¯ãã€ã³ã¿ãŒããªã¿ãŒãã³ã³ãã€ã©ãŒããšãã£ã¿ãŒããŸãã¯ã³ãŒããžã§ãã¬ãŒã¿ãŒã«ãã£ãŠäœ¿çšãããŸãã
ããã¯ãããã°ã©ãã³ã°èšèªã®çè«ã®éåžžã«åçŽåãããæŠç¥å³ã§ãã ããŸã詳ãã調ã¹ãŸããã
ãããšäžŠè¡ããŠããã®ã·ãªãŒãºã®èšäºã«å°å¿µããã¢ãã«æåéçºãšããå¥ã®é åããããŸãã
ã¢ãã«æåã®éçºã§ã¯ãéçºè ã®é ã®äžã®æèãããœãŒã¹ã³ãŒããåäœãã¹ãããŸãã¯ããã¥ã¡ã³ããŸã§ããã¹ãŠãã¢ãã«ãšèŠãªãããŸãïŒãããäž»èŠãªäž»èŠãšã³ãã£ãã£ã§ãïŒã ãŸããéçºããã»ã¹ã¯ãäžéšã®ã¢ãã«ãä»ã®ã¢ãã«ã«å€æããããšã§ãã
- ããšãã°ãæåã«éçºè ã®é ã®äžã§ã¯ãå°æ¥ã®ããã°ã©ã ã®ç¹å®ã®ã€ã¡ãŒãžïŒã¢ãã«ïŒãçºçããŸãã
- 次ã«ããã®ç²Ÿç¥çãªã€ã¡ãŒãžãUMLã¢ãã«ã«å€æããŸãã
- UMLã¢ãã«ã«åºã¥ããŠããœãŒã¹ã³ãŒãïŒã¢ãã«æåéçºã®èŠ³ç¹ãããã¢ãã«ïŒãèšè¿°ããŸãã
- ãœãŒã¹ã³ãŒãã®åäœãã¹ããèšè¿°ããŸãïŒããã¯ã¢ãã«ã§ãïŒã
- ããã¥ã¡ã³ããäœæããŸãïŒãã¹ãŠãã¢ãã«ã§ãïŒã
ãããã®å€æã®äžã«ã¯ãèªååã容æãªãã®ãããã°ãçæçã«ã¯ããè€éãŸãã¯äžå¯èœãªãã®ããããŸãã ããããããã¯æ¬è³ªãå€ãããã®ã§ã¯ãããŸãã-ã¢ãã«ãšã¢ãã«å€æã®ã¿ããããŸã-ä»ã«ã¯äœããããŸããïŒå®éãå€æãã¢ãã«ã§ããã次ã®èšäºã§è©³ãã説æããŸãïŒã
äžéšã®ã¢ãã«ã¯äºãã«éåžžã«äŒŒãŠããŸãã ããšãã°ããã¹ãŠã®UMLã¢ãã«ã¯ãåäžã®è¡šèšæ³ã§ç¹å®ã®ã«ãŒã«ã«åŸã£ãŠæ§ç¯ãããŸãïŒå ±éã®ã¡ã¿ã¢ãã«-UMLããããŸãïŒã BPMNãŸãã¯ERã¢ãã«ã¯ãUMLãšã¯ãã§ã«ç°ãªã£ãŠããŸãã ããããããã§ãããœãŒã¹ã³ãŒããããã°ã©ãã®èããããUMLã«ã¯ããã«è¿ããã®ã§ãã
ããã¯ãUMLãBPMNãããã³ERãåäžã®MOFã¡ã¿ã¡ã¿ã¢ãã«ã«åºã¥ããŠæ§ç¯ãããã¡ã¿ã¢ãã«ã§ãããšããäºå®ã«ãããã®ã§ãã ãããŠãããã°ã©ãã³ã°èšèªã®ææ³ïŒã¡ã¿ã¢ãã«ïŒã¯å¥ã®ã¡ã¿ã¡ã¿ã¢ãã«-EBNFã«åºã¥ããŠããŸãã ããã°ã©ããŒã®èãã¯ãäžéšã®ã¡ã¿ã¢ãã«ã«ã察å¿ããŠããŸããããã¯ãçŸåšå®å šã«åœ¢åŒåãããŠããªãã¡ã¿ã¡ã¿ã¢ãã«ã«å¯Ÿå¿ããŠããŸãã
åã¡ã¿ã¡ã¿ã¢ãã«ã¯ç¬èªã®ã¢ããªã³ã°ç©ºéã圢æããŸãããä»ã®ã¢ãã«ç©ºéãšã¯ãŸã£ããç°ãªããŸãã
ã泚æ
ç§ã話ããŠããããšãç解ããŠããªãå Žåã¯ã OCLãšã¡ã¿ã¢ãã«ã«é¢ããã·ãªãŒãºã®æåã®èšäºãèªãããšãã§ããŸãã ã¹ããŒã¹ã®ã¢ããªã³ã°ã«é¢ããèšäºããããŸã ã
1ã€ã®ã¢ããªã³ã°ç©ºéïŒããšãã°ãMOFïŒå ã§ã¢ãã«ãå€æããå¿ èŠãããå Žåãããã¯åºæ¬ã§ãã é¢é£ããä»æ§ãšããŒã«ãããã次ã®èšäºã§èª¬æããŸãã
ãã ããaïŒãœãŒã¹ã³ãŒããUMLã«å€æããããbïŒBPMNã¢ãã«ããåäœãã¹ããŸãã¯ããã¥ã¡ã³ããçæããå¿ èŠãããå Žåãããã¯ãã§ã«ããå°é£ã§ãã ãããè¡ãã«ã¯ã2ã€ã®ã¢ããªã³ã°ã¹ããŒã¹ã®éã«ããªããžãå¿ èŠã§ãã ãããŠãããã§ããã°ã©ãã³ã°èšèªã®çè«ãå©ãã«ãªããŸãã
ãã®èšäºã§ã¯ã1ã€ã®éåžžã«åçŽãªãµããžã§ã¯ãæåèšèªïŒå³ã®éããããã¯ïŒã®ã¡ã¿ã¢ãã«ãæ€èšãããã®ææ³ïŒå³ã®ç·ã®ãããã¯ïŒã«ã€ããŠèª¬æããŸãã ãŸããçæããŸãïŒã¢ãã«æåéçºã§ã¯ãããŒãµãŒãšã³ãŒããžã§ãã¬ãŒã¿ãŒã䜿çšããŠã³ãŒããæåã§èšè¿°ããããšã¯äžè¬çã«ããŸãç¿æ £çã§ã¯ãããŸãã-ã¢ããªã³ã°ã¹ããŒã¹MOFãšEBNFã®éã®ããªããžã§ãããã®èšèªçšã®ãšãã£ã¿ãŒãçæããŸãã
Eclipse Modeling Frameworkã«ã¯ãããã«åœ¹ç«ã€ããŒã«ãããã€ããããŸãã
MOFã¢ãã«ããããã¹ãå€æèšèªïŒAcceleoïŒ
ããã¯ãOMFä»æ§ã§èª¬æãããŠãã MOFã¢ãã«ããããã¹ããçæããããã®ãã³ãã¬ãŒãèšèªã§ãã Acceleoã¯OMGä»æ§ã®å®è£ ã§ãã ä»æ§ã¯2008幎以éæŽæ°ãããŠããŸããããAcceleoã¯å€ãã®ãããžã§ã¯ãã§äœ¿çšãããŠããŸãã ãã®èšèªã¯éåžžã«åçŽã§ãããèšèªãæŽæ°ããå¿ èŠããªãå ŽåããããŸãã 次ã®ããããã®èšäºã§è©³çŽ°ã«æ€èšããŸãã
ãã®èšèªã®å©ç¹ã¯ãã¢ãã«ããããã¹ããç°¡åã«äœæã§ããããšã§ãã UMLãŸãã¯ERã¢ãã«ããSQLã¯ãšãªããã°ããçæããããCSV圢åŒã§ã¢ãã«ããã¢ã³ããŒããããããå¿ èŠãããå Žåã¯ããã®èšèªãæé©ã§ãã
äž»ãªæ¬ ç¹ã¯ããã®ããªããžãäžæ¹éè¡ã§ããããšã§ãã ããã¹ãã解æããŠãã¢ãã«ã«æ»ãããšã¯ã§ããŸããã ãŸããçµæã®ããã¹ããæ£ãããã©ãŒããããããããã«ããã©ãŒããããã³ãã¬ãŒãïŒã¹ããŒã¹ãã©ã€ã³ãã£ãŒãïŒã«å€ãã®æ³šæãæãå¿ èŠããããŸãã åæã«ããã³ãã¬ãŒãèªäœã¯ããŸãèªã¿ã«ãããªããŸãã
ã¡ãªã¿ã«ãAcceleoã¯å®éã«ã¯OCLã®ãã³ãã¬ãŒãã¢ããªã³ã§ãã ãã®èšäºãèªãã å ŽåãAcceleoãéçºããã«ã¯ãããã«ããã€ãã®èšèšãåŠã¶å¿ èŠããããŸãã
EMFText
EMFTextã¯ãã§ã«Acceleoãããã¯ããã«èå³æ·±ããã®ã§ãã ã¡ã¿ã¢ãã«ãšèšèªæ§æã説æããŸãã ãã®çµæãMOFã·ãã¥ã¬ãŒã·ã§ã³ã¹ããŒã¹ãšEBNFã·ãã¥ã¬ãŒã·ã§ã³ã¹ããŒã¹ã®éã«åæ¹åã®ããªããžãã§ããŸãã ããªãã®ããã«ãããŒãµãŒïŒããã¹ãããã¢ãã«ãžïŒãã³ãŒããžã§ãã¬ãŒã¿ãŒïŒã¢ãã«ããããã¹ããžïŒããšãã£ã¿ãŒïŒæ§æã®åŒ·èª¿è¡šç€ºãšãªãŒãã³ã³ããªãŒãïŒããã³ã³ã³ãã€ã©ãŒãã€ã³ã¿ãŒããªã¿ãŒãèšèªãããã¬ãŒã®ãã©ã³ã¯ãèªåçã«çæãããŸãã
EMFTextã䜿çšããŠå®è£ ãããèšèªã®äŸããããŸãã
ãã®èšäºã§ã¯ãEMFTextã䜿çšããŸãã
Xtext
Xtextã®æ©èœã¯EMFTextã«äŒŒãŠããŸãã ãã掻çºãªã³ãã¥ããã£ãç¹åŸŽã§ãã ãŸããXtextã®ã©ã³ã¿ã€ã ã©ã€ãã©ãªã«äŸåããããŒãµãŒãšã³ãŒããžã§ãã¬ãŒã¿ãŒãçæããæ¹æ³ã EMFTextãšã¯ç°ãªããEMFTextã¯èšèšæã«ã®ã¿å¿ èŠã§ãããå®è¡æã«ã¯å¿ èŠãããŸããã ãã®ããããããžã§ã¯ãã§ã¯ãXtextã§ã¯ãªãEMFTextã䜿çšããŸãã
ã€ãã·ãã³çæèšèª
Epsilonçšã®Acceleoã¢ããã°ã
人éã䜿çšã§ããããã¹ãè¡šèš
OMG HUTNã泚ç®ã«å€ããŸãã ããã¯ãMOFã¢ãã«ãã·ãªã¢ã«åããããã®ããã¹ãæ§æã§ãã MOFã¢ãã«ã®JSONãšèããããšãã§ããŸãã Epsilonã®å®è£ ããããŸãã ãã ãããã®ããšã¯ç§ãã¡ã«ã¯é©ããŠããŸãããäžæ¬åŒ§ã ãã§ãªããä»»æã®æ§æãèšè¿°ããå¿ èŠãããããã§ãã
çè«ã®ããã
ç·Žç¿ãå§ããåã«ããŸã å°ãçè«ãå¿ èŠã§ãã
ã泚æ
ãã®ã»ã¯ã·ã§ã³ã¯ãå æ¬çãŸãã¯æ£ç¢ºã§ããããšãæå³ããŠããŸããã 次ã®ã»ã¯ã·ã§ã³ãç解ã§ããããã«ããããã«ããã¹ãŠãéåžžã«åçŽåãããæŠç¥çãªæ¹æ³ã§èª¬æããŸãã ããã°ã©ãã³ã°èšèªã®çè«ã«èå³ãããå Žåã¯ããã®ãããã¯å°çšã®ãœãŒã¹ãåç §ããããšããå§ãããŸãã
EBNFãšMOFã¢ããªã³ã°ã¹ããŒã¹ã®éã«æ©ãæ¶ããŠããŸãã ããªããžã®çåŽã«ã¯ãœãŒã¹ã³ãŒãããããããçåŽã«ã¯ããã°ã©ã ã®ç¹å®ã®ã¢ãã«ããããŸãïŒæ確ã«ããããã«ãæœè±¡ã»ãã³ãã£ãã¯ã°ã©ããšåŒã³ãŸãïŒã
éåžžãæœè±¡çãªã»ãã³ãã£ãã¯ã°ã©ãã¯ããã°ã©ãããé ãããŠããŸãã ã©ã®ããã«æ£ç¢ºã«æ©èœãããã¯ãã³ã³ãã€ã©ãŸãã¯ã€ã³ã¿ãŒããªã¿ãŒãå®è£ ããããšã®åé¡ã§ãã ãã®ã°ã©ãã䜿çšããããã°ã©ããŒã¯çŽæ¥åäœããããœãŒã¹ã³ãŒãã§ã®ã¿åäœããŸãã
äžæ¹ãã¢ãã«æåã®éçºã§ã¯ãæœè±¡çãªã»ãã³ãã£ãã¯ã°ã©ããéèŠãªåœ¹å²ãæãããŸãã ããã¯ãäœããã®çš®é¡ã®ããŒãµãŒã®æè¡çãªå éšæ§é ã§ã¯ãªããããã°ã©ããŒã䜿çšããã¢ãã«ã§ãã ããã°ã©ããŒã«ãšã£ãŠããã®ã¢ãã«ãã©ã®çšåºŠæ£ç¢ºã«èšèšãããã©ãã»ã©äŸ¿å©ã§ããããéèŠã§ãã
ã泚æ
ãã¡ãããããã°ã©ããŒãèšèªã®åå°æ©èœã䜿çšããå ŽåããœãŒã¹ã³ãŒãã§ã¯ãªãããã°ã©ã ã®ã¢ãã«ã䜿çšããŸãã ããããåæã«ã圌ãã¯ããããããããèªèããã«ãã¢ãã«æåéçºã®é åã«åé¡ãããŸãã 圌ãã¯ããã°ã©ã ãã¢ãã«ãšããŠèŠãŠããŸãã
ãã®å³ã¯ãããŒãµãŒãšèšèªã³ãŒããžã§ãã¬ãŒã¿ãŒã®åäœãæŠç¥çã«ç€ºããŠããŸãã

åå¥è§£æ
æåã«ããœãŒã¹ã³ãŒãã®åå¥è§£æãå®è¡ããããã®çµæãããã¹ããäžé£ã®ããŒã¯ã³ã«åå²ãããŸãã éåžžãã¬ã¯ãµãŒã¯ãã³ã³ããã¹ãã«äŸåããªãæ£èŠè¡šçŸã䜿çšããŠããŒã¯ã³ãå²ãåœãŠãŸãã ãã®ãããèšèªã§ã¯
- ã¬ã¯ãµãŒãããŒã¯ãŒããšèå¥åãåºå¥ã§ããããã«ãèå¥åã§äœ¿çšã§ããªãäºçŽèªããããŸãã
- ããã¹ããªãã©ã«ã¯åŒçšç¬Šã§å²ãŸããŠãããããã¬ã¯ãµãŒã¯ããããäºçŽèªãŸãã¯èå¥åãšåºå¥ã§ããŸãã
- èå¥åãéå§ããããæ°åã ãã§æ§æãããããããšã¯ã§ããŸãããããããªããšãã¬ã¯ãµãŒããã®èå¥åãŸãã¯æ°å€ãªãã©ã«ãç解ããããšã¯å°é£ã§ãã
ã€ãŸã ç°ãªãçš®é¡ã®ããŒã¯ã³ã®æ£èŠè¡šçŸã¯ãå¯èœãªéãéè€ããªãããã«ããŠãã ããã æ®å¿µãªãããæã ãããã¯ãŸã 亀差ããŸãã æã ããã¯åé¡ã§ã¯ãããŸããã ãŸããããã«ããèšèªã®ææ³ãè€éã«ãªãå ŽåããããŸãããã®ç¶æ³ã¯ãSQLããŒãµãŒã«é¢ãã次ã®èšäºã§èª¬æããŸãã
解æ
次ã«ãããŒã¯ã³ã·ãŒã±ã³ã¹ã®è§£æãå®è¡ãããŸãã ããŒãµãŒã¯ãèšèªã®ææ³ã調ã¹ãŠãããŒã¯ã³ãç¹å®ã®æ§æããªãŒã«ç·šæããŸãã æ§é äžããã®ããªãŒã¯èšèªã®EBNFææ³ãšåäžã§ãã
- æåã®éçµç«¯èšå·ã«å¯ŸããŠãããªãŒã®ã«ãŒãããŒããæ§ç¯ãããŸãã
- ä»ã®éçµç«¯èšå·ã«ã€ããŠã¯ãããªãŒã®å éšããŒããæ§ç¯ããã
- çµç«¯èšå·ïŒããŒã¯ã³ãããŒã¯ã³ïŒã®å ŽåãããªãŒã®èããŒããæ§ç¯ãããŸãã
ç¹å®ã®æ§æããªãŒã®ç°¡çŽ å
éåžžãç¹å®ã®æ§æããªãŒã§äœæ¥ããããšã¯éåžžã«äžäŸ¿ã§ããéåžžã«åçŽãªèšèªã§ãã£ãŠããéåžžã«æ·±ãããšãããããŸãã
次ã®èšäºã®ããããã§ãç®è¡åŒã®èšèªãæ€èšããå¯èœæ§ããããŸãã ãã®ãããªèšèªã®ç¹å®ã®æ§æããªãŒã¯ãããµã®æå¡ã«äŒŒãŠããããšãããããŸãã
åçŽãªèšèªã®å Žåã¯ãã¿ã¯ãŒã®äœåãªäžééãåé€ããã ãã§ãã ããè€éãªèšèªã§ã¯ãããè€éãªåçŽåãå¿ èŠã§ãã ãã®çµæãæœè±¡æ§æããªãŒãååŸããŸãã
ç§ãã¡ã®ãã¹ãŠã®ããªãŒããŒãã¯ãç¹å®ã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã«ãªããŸãã äžè¬ã«ãããã¯å¿ èŠã§ã¯ãããŸããããããšãã°XMLããã¥ã¡ã³ããšããŠããªãŒãæ瀺ããããšã«ãããã¯ã©ã¹ãšãªããžã§ã¯ããªãã§å®è¡ã§ããŸãã ãããããªããžã§ã¯ãã®ç§»åå ã®MOFã®ããããªããžã§ã¯ãã¢ãã«ãå¿ èŠã§ãã MOF以å€ã®ã¢ããªã³ã°ã¹ããŒã¹ãžã®ããªããžãæ§ç¯ããå Žåãããã°ã©ã ãªããžã§ã¯ãã¢ãã«ã§ã¯ãªããä»ã®ã¢ãã«ãå¿ èŠã«ãªããŸãã
ã»ãã³ãã£ãã¯åæ
æããã«ãæ¯èŒçè€éãªèšèªã§æžãããããã°ã©ã ã¯ããªãŒãšããŠè¡šãããšã¯ã§ããŸããã ããšãã°ããã®èšèªã§å€æ°ãã¯ã©ã¹ãåãé¢æ°ã宣èšããããããåç §ã§ããå Žåããã®ãããªããã¹ããªã³ã¯ã解決ãããšãæœè±¡çãªã»ãã³ãã£ãã¯ã°ã©ããååŸãããŸãã
ã³ãŒãçæ
ã³ãŒãçæã¯ãããã°ã©ã ã®ããã¹ãè¡šçŸãããã°ã©ã ã®äœããã®æœè±¡è¡šçŸãã圢æãããå ŽåïŒããšãã°ãæœè±¡ã»ãã³ãã£ãã¯ã°ã©ããšããŠïŒã解æã®éã®ããã»ã¹ã§ãã
ã³ãŒãçæã«ã¯ããã³ãã¬ãŒããšãŠãããŒãµã«ã³ãŒããžã§ãã¬ãŒã¿ãŒã®2ã€ã®ã¢ãããŒãããããŸãã
ãã³ãã¬ãŒãã䜿çšããå Žåãå°æ¥ã®ããã°ã©ã ã®ããããã®ããã¹ããæžã蟌ãŸããŸãã ããšãã°ããã®ããã¹ãå ã®ã¯ã©ã¹ãå€æ°ãé¢æ°ã®ååã¯ãå®éã®ååã代ããã«çœ®ãæãããã代ããã«ãç¹æ®ãªæåã·ãŒã±ã³ã¹ã«çœ®ãæããããŸãã æããã«ããã³ãã¬ãŒãã䜿çšããŠä»»æã®ã³ãŒããçæããããšã¯ã§ããŸããã
ãŠãããŒãµã«ã³ãŒããžã§ãã¬ãŒã¿ãŒã¯ãããã°ã©ã ã¢ãã«ãå ¥åïŒããšãã°ãæœè±¡ã»ãã³ãã£ãã¯ã°ã©ãïŒãšããŠåãåãã察å¿ãããœãŒã¹ã³ãŒããåºåããŸãã ãããã£ãŠãä»»æã®ã³ãŒããçæã§ããŸãã ãã ãããŠãããŒãµã«ã³ãŒããžã§ãã¬ãŒã¿ãŒãå®è£ ããããšã¯ããã³ãã¬ãŒããããã¯ããã«è€éã§ãã çµæã®ã³ãŒãããã©ãŒãããããããšãé£ããå ŽåããããŸãã ã¢ãã«ã«ã¯ãã¹ããŒã¹ãæ¹è¡ãªã©ã«é¢ããæ å ±ãå«ãè¿œå ã®æ³šéãå¿ èŠã§ãã ãŸãã¯ãã³ãŒããã©ãŒããã¿ãå¿ èŠã§ããã³ãŒããã©ãŒããã¿ã¯ãã©ããã§èšè¿°ãŸãã¯ååŸããå¿ èŠããããŸãã ãã³ãã¬ãŒãä»ãã®ããŒãžã§ã³ã§ã¯ãããã¯å¿ èŠãããŸããããã³ãã¬ãŒãå ã®ãã¹ãŠãå¿ èŠã«å¿ããŠçŽæ¥ãã©ãŒãããããŸãã
幞ããªããšã«ãEMFTextã¯æãåçŽãªã³ãŒããã©ãŒãããæ©èœãåããã³ãŒããžã§ãã¬ãŒã¿ãŒãèªåçã«çæããŸãã
ã«ã¹ã¿ãã€ãº
éåžžã©ããã Eclipse Modeling Toolsãå¿ èŠã«ãªããŸã ã ããhttp://emftext.org/update_trunkããEMFTextã®ææ°ããŒãžã§ã³ãã€ã³ã¹ããŒã«ããŸãã
ãããžã§ã¯ãäœæ
以åã®èšäºãšã¯ç°ãªããå®æãããããžã§ã¯ãã¯ãããŸããã ã¯ããå¿ èŠãããŸãããããã©ã«ãã§äœæããããããžã§ã¯ãã䜿çšããŸãïŒãã¡ã€ã«->æ°èŠ->ãã®ä»...-> EMFTextãããžã§ã¯ãïŒã

ã¡ã¿ã¢ãã«ãã©ã«ããŒã«ã¯ãèšèªã¡ã¿ã¢ãã«ïŒmyDSL.ecoreïŒãšãã®ææ³ïŒmyDSL.csïŒã®ç©ºçœã衚瀺ãããŸãã ãããã®2ã€ã®ãã¡ã€ã«ã¯ãèšèªãå®å šã«èšè¿°ããŠããŸãã ä»ã®ã»ãšãã©ãã¹ãŠã¯ãããããçæãããŸãã

ãã®èšäºã§ã¯ããã®åçŽãªãã¢DSLã«éå®ããŸãã
èšèªã¡ã¿ã¢ãã«
ã¡ã¿ã¢ãã«ãšã¯ãèšèªã®ããšã§ãã ããšãã°ãJavaã¡ã¿ã¢ãã«ã«ã¯ãã¯ã©ã¹ãã¡ãœãããå€æ°ãåŒãªã©ã®ã¡ã¿ã¯ã©ã¹ãå«ãŸããŸãã ã¡ã¿ã¢ãã«ã«ãªããã®ãèšèªã§èšè¿°ããããšã¯ã§ããŸããã ããšãã°ãJava 7ã¡ã¿ã¢ãã«ã«ã¯ã©ã ãåŒã¯ãããŸããã ãããã£ãŠãJava 7ã§äœæãããã³ãŒãã§ã¯äœ¿çšã§ããŸããã
次ã®å³ã¯ãEMFTextãçæãããã¡ã€ã³åºæèšèªã®ãã¢ã®ã¡ã¿ã¢ãã«ã瀺ããŠããŸãã

ã泚æ
å³ã«ç€ºãããŠããå 容ãããããªãå Žåã¯ãEclipse Modeling Frameworkã«é¢ããèšäºãèªãããšãã§ããŸãã
ãµããžã§ã¯ãæåèšèªã䜿çšãããšããšã³ãã£ãã£ã¢ãã«ïŒEntityModelïŒãèšè¿°ããããšãã§ããŸããããã¯ããšã³ãã£ãã£ïŒEntityïŒãšããŒã¿ã¿ã€ãïŒDataTypeïŒã®2ã€ã®ã¿ã€ãïŒTypeïŒã§æ§æãããŸãã ãšã³ãã£ãã£ã¯æœè±¡åã§ããŸãã ãšã³ãã£ãã£ã«ã¯ãæ©èœïŒå±æ§ïŒããªã³ã¯ïŒåç §ïŒãã³ã³ããŒãã³ãããŒãïŒå å«ïŒã®3ã€ã®ããããã£ïŒæ©èœïŒããããŸãã ããããã£ã¯éåžžã«ã·ã³ãã«ã§ãè€æ°ã®ããããã£ããããŸããã
çè«çã«ã¯ãå±æ§ã¯ããŒã¿åã®ã¿ãåç §ããå¿ èŠããããŸãã ãŸãããªã³ã¯ãšã³ã³ããŒãã³ãã¯ãšã³ãã£ãã£ã®ã¿ãåç §ããå¿ èŠããããŸãã ããããæ§é ã¬ãã«ã®ãã®ã¡ã¿ã¢ãã«ã§ã¯ãããã¯æ±ºããŠå¶éãããŸããã ããŒã¿åãäžéšã®ãšã³ãã£ãã£ã®äžå¯æ¬ ãªéšåã«ããããšããããŒã¿åã®ä»£ããã«ãšã³ãã£ãã£ãå±æ§åãšããŠæå®ããããšãã§ããŸãã ããã¯ããããããŸãæ£ãããããŸããã ãããä¿®æ£ããæ¹æ³ã¯2ã€ãããŸãã1ïŒæ§é ã¬ãã«ã§ããŸãã¯2ïŒè¿œå ã®å¶éã䜿çšããŸãã
æåã®ã±ãŒã¹ã§ã¯ãããããã£ã®ã¿ã€ãããšã«åå¥ã®ã¡ã¿ã¯ã©ã¹ãäœæãããŸãïŒãããEcoreã¡ã¿ã¡ã¿ã¢ãã«èªäœã®å®è£ æ¹æ³ã§ãïŒã ã€ãŸã FeatureKindåæãåé€ããåã®é¢é£ä»ããåé€ããã¡ã¿ã¯ã©ã¹Featureãæœè±¡åãããããã3ã€ã®ã¡ã¿ã¯ã©ã¹ãAttributeãReferenceãããã³Containmentãç¶æ¿ããŸãã æåã«ãDataTypeãžã®ãªã³ã¯ãè¿œå ãã2çªç®ãš3çªç®-Entityã«è¿œå ããŸãã
2çªç®ã®æ¹æ³ã¯ãOCLã«é¢ããèšäºã§èª¬æãããŠããŸã ã
ãã®æ¬ é¥ã¯ä¿®æ£ããŸããã ããã«ããªã³ã¯è§£æ±ºã¡ã«ããºã ã®ç解ã«åœ¹ç«ã¡ãŸãã
èšèªãšãã£ã¿ãŒã®èµ·å
ãã®ãããEMFTextãçæãããã¢ãã¡ã€ã³åºæèšèªã®ã¡ã¿ã¢ãã«ãå€ããå°ãªããæ±ããŸããã ãã®èšèªã®æ§æã®èª¬æã«é²ãåã«ããœãŒã¹ã³ãŒãã®äŸãèŠãŠã¿ãŸãããã
ãããè¡ãã«ã¯ãEclipseã®2çªç®ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠå®è¡ããŸãïŒå®è¡->æ§æã®å®è¡...ïŒïŒ

2çªç®ã®Eclipseã€ã³ã¹ã¿ã³ã¹ã§ãæ°ããmyDSLãããžã§ã¯ããäœæããŸãïŒãã¡ã€ã«->æ°èŠ->ãã®ä»...-> EMFText myDSLãããžã§ã¯ãïŒïŒ

次ã®å³ã«ãmyDSLã§èšè¿°ãããã³ãŒãã®äŸã瀺ããŸãã ã芧ã®ãšããããµããžã§ã¯ãæåèšèªã«ããããšã³ãã£ãã£ãããããã£ãããŒã¿åãå®éã«èšè¿°ããããšãã§ããŸãã
å·Šäžã¯ãèšèªã¡ã¿ã¢ãã«ã«å¯Ÿå¿ããæ§æããªãŒã§ãã ã¡ã¿ã¢ãã«ã«å¯Ÿå¿ããããªãŒããŒãã®1ã€ã®å³äžã®ããããã£ã ä»ã®æ§æããªãŒãååŸããïŒæ°ããã¿ã€ãã®ããŒããæ°ããããŒãã®ããããã£ãè¿œå ããïŒå Žåã¯ãèšèªã¡ã¿ã¢ãã«ãå€æŽããå¿ èŠããããŸãã

ãšãã£ã¿ãŒã«æ§æã®åŒ·èª¿è¡šç€ºãããããšãããããŸãã åŸã§æ¹åããŸãã
ãŸããCtrl +ã¹ããŒã¹ãä»ããŠããªãŒãã³ã³ããªãŒããåŒã³åºãããŸãããããã¯ããã©ã«ãã§ã¯åžæã©ããã«æ©èœããŸããã å±æ§ã¯ããšã³ãã£ãã£ã§ã¯ãªãããŒã¿åã®ã¿ãæäŸããå¿ èŠããããŸãã åŸã§ä¿®æ£ããŸãã

ç¹å®ã®æ§æã®èª¬æ
ãã¹ãDSLã®ãµã³ãã«ã³ãŒããèŠãã®ã§ãmyDSL.csãã¡ã€ã«ã®æ§æã®èª¬æã«æ»ããŸãããã

1è¡ç®ã¯ãDSLã§èšè¿°ããããã¡ã€ã«æ¡åŒµåã瀺ããŠããŸãã
2è¡ç®ã¯ãèšè¿°ãããDSLã®ã¡ã¿ã¢ãã«åå空éã瀺ããŠããŸãã
3è¡ç®ã¯ãææ³ã®æåã®éçµç«¯èšå·ã瀺ããåæã«æ§ææšã®ã«ãŒãã¡ã¿ã¯ã©ã¹ã瀺ããŸãã
è¡6ã¯ãEMFTextãã©ã¡ãŒã¿ãŒã®1ã€ã瀺ããŠããŸãã ãã®ãããªãã©ã¡ãŒã¿ãŒã¯äœçŸãããã ããã¥ã¢ã«ã§åå¥ã«ç¥ãããšãã§ããŸã ã
次ã¯ãèšèªã®ææ³èŠåã§ãã ã«ãŒã«èšè¿°èšèªã¯EBNFã«éåžžã«äŒŒãŠããããšãããããŸãã ãã ããã«ãŒã«ã®å·ŠåŽã®éçµç«¯æåã®ååã¯ãèšèªã¡ã¿ã¢ãã«ã®äžéšã®ã¡ã¿ã¯ã©ã¹ã®ååãšäžèŽããå¿ èŠããããŸãã ãŸããã«ãŒã«ã®å³åŽã®ïŒéïŒçµç«¯æåã®ååã¯ããã®ã¡ã¿ã¯ã©ã¹ã®äžéšã®ããããã£ã®ååãšäžèŽããå¿ èŠããããŸãã
ã«ãŒã«ã®å³åŽã«ããæåã®å€æ§æ§ã¯ãã¡ã¿ã¢ãã«ã®å¯Ÿå¿ããããããã£ã®å€æ§æ§ã«å¯Ÿå¿ããå¿ èŠããããŸãã
ã«ãŒã«ãããã«è©³ããåæããŸãããã
10è¡ç®ã§ã¯ãDSLã®ã³ãŒãã¯ããŒã¯ãŒããmodelãã§å§ãŸãããã®åŸã«ããã€ãã®ã¿ã€ãã®èª¬æãç¶ãã¹ãã ãšäž»åŒµããŠããŸãã ããã«ãèŠããŠããå¿ èŠãããããã«ãã¡ã¿ã¢ãã«ã«ã¯ããšã³ãã£ãã£ïŒEntityïŒãšããŒã¿åïŒDataTypeïŒã®2çš®é¡ã®ã¿ã€ãããããŸãã
è¡11ã¯ããšã³ãã£ãã£ã®æ§æã説æããŠããŸãã ãšã³ãã£ãã£ã®èª¬æã¯ãããŒã¯ãŒããabstractãã§å§ãŸãå ŽåããããŸãããã®å Žåãæ§æããªãŒå ã®åãååã®ããããã£ãtrueã«èšå®ãããŸãã 次ã«ãããšã³ãã£ãã£ããšããããŒã¯ãŒããç¶ããŸãã
次ã«ããšã³ãã£ãã£ã®ååãç¶ããŸããããã¯ãnameããããã£ã«æ ŒçŽãããŸãã ååã®ããŒã¯ã³ã®ã¿ã€ãã¯è§æ¬åŒ§ã§ç€ºãå¿ èŠããããŸãã ãã®å Žåãæå®ãããŠããªããããããŒãµãŒã¯ããã©ã«ãã®ããŒã¯ã³-TEXTãäºæããŸãã å°ãåŸã§ããŒã¯ã³ã«æ»ããŸãã
次ã«ãäžæ¬åŒ§ã§ãšã³ãã£ãã£ã®æ©èœããªã¹ãããå¿ èŠããããŸãã ããã¯éçµç«¯èšå·ã§ããããããã£ã®ææ³ã«ã¯ç¬èªã®ã«ãŒã«ãããïŒ13è¡ç®ïŒãã¡ã¿ã¢ãã«ã«ã¯å¥ã®ã¡ã¿ã¯ã©ã¹ããããŸãã ãããã£ãŠãè§æ¬åŒ§ã¯ãªããããŒã¯ã³ã®ã¿ã€ããæå®ããæ¹æ³ã¯ãããŸããã
è¡12ã¯ãããŒã¿åã®æ§æã説æããŠããŸãã ããŒã¿åã®èª¬æã¯ãããŒã¯ãŒããdatatypeãã§å§ãŸãããã®åŸã«ååãšã»ãã³ãã³ãç¶ãå¿ èŠããããŸãã
è¡13ã¯ããšã³ãã£ãã£ããããã£ã®æ§æã説æããŠããŸãã ããããã£ã®èª¬æã¯ã3ã€ã®ããŒããããã£ïŒãattãããrefãããŸãã¯ãcontãïŒã®ããããã§éå§ã§ããŸãã æ§æããªãŒã§ã¯ãæå®ãããããŒã¯ãŒãã«å¿ããŠãããŒãã®kindããããã£ã¯FeatureKindåæã®å€ã®ãããããåããŸãã
ãã®åŸã«ãããããã£ã®ã¿ã€ããããããã£ã®ååãã»ãã³ãã³ãç¶ããŸãã ããã«ãã³ãŒãå ã®ããããã£ã®ã¿ã€ãã¯æååãšããŠç€ºãããŸãããæ§æããªãŒã§ã¯ãååã«ãããªã³ã¯ã¯å¯Ÿå¿ããã¿ã€ããžã®ç©çãªã³ã¯ã«å€ãããŸãã ãããã£ãŠãæ§æ解æãããšãããªãŒã§ã¯ãªãã°ã©ããåŸãããŸãã åŸã§ãªã³ã¯è§£æ±ºã«æ»ããŸãã
äžè¬ã«ã解ææã«æ£ç¢ºã«åŸããããã®ã¯ãããããªåé¡ã§ã¯ãããŸããã äžæ¹ã§ãçµæãšããŠçããæ§é ã¯ãèšèªã®ææ³ãã»ãŒå®å šã«è€è£œããå ·äœçãªæ§æããªãŒã®ããã§ãã äžæ¹ãEMFTextã¯ã·ã³ããªãã¯ãªã³ã¯ã解決ããç¹å®ã®æ§æããªãŒãæœè±¡çãªã»ãã³ãã£ãã¯ã°ã©ãã«å€æããŸãã ãŸãããã¹ãããã»ããµãããŒãµãŒã«ãã蟌ãããšãã§ããŸããããã«ãããã¢ãã«ãç°¡çŽ åã§ããŸãã
èšãæããã°ãããŒãµãŒã¯ç¹å®ã®æ§æããªãŒãšæœè±¡çãªã»ãã³ãã£ãã¯ã°ã©ãã®ããçš®ã®ãã€ããªããã®åºåãçæããŸãã ãã®ãããªåçŽãªèšèªã§ã¯ãããã¯ããã»ã©éèŠã§ã¯ãããŸããã ãããã次ã®èšäºã§ã¯ãSQLã®ã¡ã¿ã¢ãã«ãéçºãããšãã«ããã©ã®ãããªã¡ã¿ã¢ãã«ãå®è¡ããŠããã®ããå ·äœçãŸãã¯æœè±¡çãïŒããšãã質åã«åã³æ»ãå¿ èŠããããŸãã
æ°ããã¿ã€ãã®ããŒã¯ã³ãè¿œå ãã
次ã«ãDSLãå°ãæ¹åããŸãã myDSL.csã§ã¯ãäžéšã®ç«¯æ«æåïŒååãšã¿ã€ãïŒã®åŸã«ç©ºã®è§æ¬åŒ§ãç¶ããŸãã ãã®ãããªæåã«ã¯ããã¿ãŒã³ä»ãã®ããã©ã«ãã®TEXTããŒã¯ã³ã䜿çšãããŸãã
('A'..'Z'|'a'..'z'|'0'..'9'|'_'|'-')+
ããã¯ããšã³ãã£ãã£åãå®å šã«10é²æ°åã§æ§æãããŠãããããã€ãã¹èšå·ã§å§ãŸãããšãæå³ããŸãããããã¯ããããããŸãæ£ãããããŸããã
ã泚æ
ãŸãããšã³ãã£ãã£ã®ååã«éã©ãã³æåãå«ããããšã¯ã§ããŸãããããããããŠãã³ãŒãã®ãµããŒãã«ãã£ãŠèšèªãæãªãããããšã¯ãããŸããã
EMFTextã¯ãUnicodeããµããŒããããæåã¯ã©ã¹ããµããŒãããªãANTLRæ£èŠè¡šçŸã䜿çšããŸãã ãããã£ãŠãæå¹ãªæåã®ç¯å²ãæ瀺çã«ãªã¹ãããå¿ èŠããããŸãã ããã«ã€ããŠã¯æ°ã«ããŸãããã
ãããã£ãŠãã¿ã€ãåã¯ã©ãã³ã¢ã«ãã¡ãããã®å€§æåã§ã®ã¿éå§ããä»ã®æåã§éå§ããããšã¯ã§ããŸããã ãããŠããããã£å-ã©ãã³ã¢ã«ãã¡ãããã®å°æåã®ã¿ã
æ°ããã¿ã€ãã®ããŒã¯ã³ã説æããããã«ãTOKENSã»ã¯ã·ã§ã³ãäœæããŸãïŒ9ã16è¡ç®ïŒã

è¡10ã12ã¯ãããŒã¯ã³ãã©ã°ã¡ã³ããå®çŸ©ããŸãã
14è¡ç®ãš15è¡ç®ã¯ãããããã¿ã€ãåãšããããã£åã®ããŒã¯ã³ãå®çŸ©ããŠããŸãã
è§æ¬åŒ§å ã®è¡20ã22ã¯ãããŒãµãŒãäºæããããŒã¯ã³ã瀺ããŠããŸãã
ãã ããåé¡ããããŸãã æ°ããããŒã¯ã³ã®æ£èŠè¡šçŸã¯ãèŠåãããŠããããã©ã«ãã®ããŒã¯ã³TEXTãšäº€å·®ããŸãïŒäžã®å³ãåç §ïŒã ããã¯äœã«ã€ãªãããŸããïŒ
ããšãã°ããšã³ãã£ãã£ãšã³ãã£ãã£ãCarãã¯ãœãŒã¹ã³ãŒãã§å®çŸ©ãããŠããŸãã ãã®ãšã³ãã£ãã£ã®ååã¯ãTEXTãšTYPE_NAMEã®äž¡æ¹ã®æ£èŠè¡šçŸãšäžèŽããŸãã ã¬ã¯ãµãŒããè»ããTYPE_NAMEã§ãããšå€æããå Žåããã¹ãŠåé¡ãããŸããã ãããã圌ããããTEXTã§ãããšå€æããå ŽåããœãŒã¹ã³ãŒãã解æãã次ã®æ®µéã§ãããŒãµãŒã¯æ¬¡ã®ãããªãšã©ãŒãçæããŸãããããŒã¯ãŒãã®åŸããšã³ãã£ã㣠"
ã泚æ
åã®æ®µèœã®æå³ãç解ã§ããªãå Žåã¯ãäžèšã®ãçè«ã®äžéšãã»ã¯ã·ã§ã³ã®å³ãèŠãŠãåå¥è§£æããã³æ§æ解æã®ãµãã»ã¯ã·ã§ã³ãèªãã§ãã ããã
ãã®äžç¢ºå®æ§ã解決ããæ¹æ³ã¯ããã€ããããŸãã
- ããå ·äœçãªããŒã¯ã³ã®EMFTextãããã©ã«ãã§ããé«ãåªå 床ãå²ãåœãŠããšããäºå®ã«äŸåããŠããŸãã ã€ãŸã ã¬ã¯ãµãŒã¯æåã«TYPE_NAMEãšFEATURE_NAMEãæ€çŽ¢ãã次ã«TEXTãæ€çŽ¢ããŸãã
- ããŒã¯ã³ã®åªå 床ãæåã§èšå®ããŸãã
- äœåãªããŒã¯ã³ãåé€ããŸãã
- ææ³ãè€éã«ããŸãã ããšãã°ããname [TYPE_NAME]ãã®ä»£ããã«ãname [TYPE_NAME] | åå[TEXT]ã "
ãã®å ŽåãTEXTããŒã¯ã³ã¯äžèŠãªã®ã§ãåé€ããã ãã§ãã ãããè¡ãã«ã¯ã7è¡ç®ã§ãäºåå®çŸ©ãããããŒã¯ã³TEXTãLINEBREAKãWHITESPACEãç¡å¹ã«ããŸãã ãã ããæåŸã®2ã€ã®ããŒã¯ã³ãå¿ èŠãªã®ã§ã18è¡ç®ãš19è¡ç®ã§æ瀺çã«å®çŸ©ããŸãã

次ã«ãå·ŠåŽã®ããªãŒã§ãããžã§ã¯ããå³ã¯ãªãã¯ãã衚瀺ãããã³ã³ããã¹ãã¡ãã¥ãŒã§[ãã¹ãŠçæïŒEMFTextïŒ]ãéžæããŸãã ãœãŒã¹ã³ãŒããåçæããåŸãEclipseã®2çªç®ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããŸãã
ãšã³ãã£ãã£åãå°æåã§èšè¿°ãããšãã¬ã¯ãµãŒã¯ãããããããã£ã®ååïŒFEATURE_NAMEïŒãšããŠè§£éããããŒãµãŒã¯TYPE_NAMEããŒã¯ã³ãäºæãããŠãããšãããšã©ãŒãè¿ããŸãã
ã¢ã³ããŒã¹ã³ã¢ã_ãã§å±æ§åãéå§ãããšãã¬ã¯ãµãŒã¯ããŒã¯ã³ãäœã§ããããç解ããŸããã

æ§æã®åŒ·èª¿è¡šç€º
ããã©ã«ãã§ã¯ãEMFTextã¯ãã¹ãŠã®ããŒã¯ãŒãã玫è²ã«è²ä»ãããŸãã ããå°ãè²ãè¿œå ããŸãããããè¡ãã«ã¯ãTOKENSTYLESã»ã¯ã·ã§ã³ãäœæããŸãïŒ22ã27è¡ç®ïŒã

ããã¹ãŠçæïŒEMFTextïŒããœãŒã¹ã³ãŒããåçæããEclipseã®2çªç®ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããŸãã
ããã¯æ°å³ãæªãããã«èŠããŸãããããªãã¯èããåŸã:)ãè»ãããã³ã¯ã§ã¯ãªããéã§å¡ããããšããäºå®ã«æ³šæãæã£ãŠãã ããã ããã¯ãã¬ã¯ãµãŒãã³ã³ããã¹ãã«äŸåããªãæ£èŠè¡šçŸã䜿çšããŠããŒã¯ã³ãå²ãåœãŠãããã§ãã 圌ã¯ãããããã£åã§ã¯ãªããšã³ãã£ãã£åãå¿ èŠã§ããããšãç¥ããŸããã

ãªã³ã¯è§£æ±º
å ã»ã©ããšã³ãã£ãã£ã®ããããã£ã®å®çŸ©ã«ãããååã®èªåè£å®ãããŸãæ©èœããªããšããäºå®ã«æ³šæãåèµ·ããŸããã å±æ§ïŒattïŒã«ã¯ããŒã¿åã®ã¿ãæäŸãããªã³ã¯ïŒrefïŒããã³ã³ã³ããŒãã³ãããŒãïŒcontïŒã«ã¯ãšã³ãã£ãã£ã®ã¿ãæäŸããå¿ èŠããããŸãã
ãããžã§ã¯ãorg.emftext.language.myDSL.resource.myDSLã§ãèªåè£å®ãšãªã³ã¯è§£æ±ºãæ åœããFeatureTypeReferenceResolverã¯ã©ã¹ãèŠã€ããŸãã
resolveã¡ãœããã¯ãååã§äžèŽããã¿ã€ããæ¢ãå¿ èŠããããŸãã resolveFuzzyãã©ã¡ãŒã¿ãŒã®å€ãtrueã®å Žåãã¡ãœããã¯æå®ãããæååã«ã»ãŒé©åããã¿ã€ããæ€çŽ¢ããå¿ èŠããããŸãïŒããã¯ãã¿ã€ãåããªãŒãã³ã³ããªãŒãããããšãã«çºçããŸãïŒã ãã以å€ã®å Žåãã¡ãœããã¯æå®ãããååãšãŸã£ããåãã¿ã€ããæ¢ãå¿ èŠããããŸãã
deResolveã¡ãœããã¯ãæœè±¡ã»ãã³ãã£ãã¯ã°ã©ãã§ã®åç §ã®ããã«ããœãŒã¹ã³ãŒãã§ãã®ããã¹ãè¡šçŸãè¿ãå¿ èŠããããŸãã
ååç §ã解決ããå®è£ ã®1ã€ã次ã«ç€ºããŸãã
package org.emftext.language.myDSL.resource.myDSL.analysis; import java.util.Map; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.stream.Stream; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.util.EcoreUtil; import org.emftext.language.myDSL.DataType; import org.emftext.language.myDSL.Entity; import org.emftext.language.myDSL.EntityModel; import org.emftext.language.myDSL.Feature; import org.emftext.language.myDSL.FeatureKind; import org.emftext.language.myDSL.Type; import org.emftext.language.myDSL.resource.myDSL.IMyDSLReferenceResolveResult; import org.emftext.language.myDSL.resource.myDSL.IMyDSLReferenceResolver; public class FeatureTypeReferenceResolver implements IMyDSLReferenceResolver<Feature, Type> { // , identifier public void resolve(String identifier, Feature container, EReference reference, int position, boolean resolveFuzzy, final IMyDSLReferenceResolveResult<Type> result) { // . // containment- owner, // container.getOwner().getOwner() EntityModel model = (EntityModel) EcoreUtil.getRootContainer(container); // , , // Predicate<Type> isRelevant = container.getKind() == FeatureKind.ATTRIBUTE ? type -> type instanceof DataType : type -> type instanceof Entity; Stream<Type> types = model.getTypes().stream().filter(isRelevant); // Consumer<Type> addMapping = type -> result.addMapping(type.getName().toString(), type); // , , // if (resolveFuzzy) { types.filter(type -> type.getName().toUpperCase().startsWith(identifier.toUpperCase())) .forEach(addMapping); } // ( ), else { types.filter(type -> type.getName().equals(identifier)) .findFirst() .ifPresent(addMapping); } } // ( ) public String deResolve(Type element, Feature container, EReference reference) { return element.getName(); } public void setOptions(Map<?, ?> options) { } }
ã³ãŒãçæ
ããŒãµãŒãšãšãã£ã¿ãŒã䜿çšããŠãæåã®è¿äŒŒå€ãèšç®ããŸããã æ®ãã®ã¯ã³ãŒãçæã ãã§ãã
å·Šäžé ã®æ§æããªãŒã¯è¡šç€ºå°çšã§ãã ç·šéããã«ã¯ããã¡ã€ã«ãxmi圢åŒã§ä¿åããŸãïŒ[ãã¡ã€ã«]-> [ååãä»ããŠä¿å...]ïŒã
ãã®å ŽåãMyDSLEditorã䜿çšããŠãã¡ã€ã«ãéãããšãã§ããªããšãããšã©ãŒãçºçããå Žåããããç¡èŠããŠxmi-fileãå床éããŸãã åãæ§æããªãŒã衚瀺ãããŸãããç·šéã§ããããã«ãªããŸããã

ãšã³ãã£ãã£ã®ååããCarããããVehicleãã«å€æŽãããAbstractãããããã£ã®çã®å€ãèšå®ããŸãã
xmiãã¡ã€ã«ãæ¡åŒµåmyDSLã§ä¿åããŸãã éããŠå床éããŸãã

ã芧ã®ãšãããæ§æããªãŒã®å€æŽãèæ ®ãããŠããŸãïŒ ã€ãŸã ã¢ãã«ã®ããã¹ããžã®å€æïŒã³ãŒãçæïŒã¯æ©èœããŸãã
確ãã«ãä¿åãããšãæ¹è¡ãšäžéšã®ã¹ããŒã¹ãæ¶ããŸããã
çæãããã³ãŒãã®éåžžã®ãã©ãŒããããå®çŸããã«ã¯ã次ã®3ã€ã®æ¹æ³ããããŸãã
- ã¡ã¿ã¢ãã«www.emftext.org/commons/layoutããã®ã¡ã¿ã¯ã©ã¹LayoutInformationãžã®ãªã³ã¯ãæã€åã¡ã¿ã¯ã©ã¹ãè¿œå ããŠãã¡ã¿ã¢ãã«ãå€æŽããŸãã ç§ã¯å人çã«ãããããŸããã§ããããã®å Žåãå¿ èŠãªã¹ããŒã¹ã®æ°ãæ°ããããããã¹ãã®ãªãã»ãããèšç®ãããããå¿ èŠããããšæããŠããŸãã -éåžžã«è€éã«èŠããŸãã
- å¥ã®ã³ãŒããã©ãŒããã¿ã䜿çšããŸãã ããã¯ãããããJavaã³ãŒããªã©ãçæãããšãã«æé©ãªãªãã·ã§ã³ã§ããããã§ã«æºåãæŽã£ãŠãããã©ãŒããã¿ãŒããããŸãã
- èšèªã®ææ³ã«ããã€ãã®æ³šéãè¿œå ããŠãããã©ã«ãã®ã³ãŒããžã§ãã¬ãŒã¿ãŒãã³ãŒãã®ãã©ãŒããããå°ãæ¹åããŸãã ãããæãç°¡åãªãªãã·ã§ã³ã§ããããããã£ãŠã¿ãŸãããã
泚éãïŒ0ãããïŒ1ããããã³ãïŒ1ããè¡30ããã³31ã«è¿œå ãããŸãã ãããã®æ³šéã¯ããŒãµãŒã«ãã£ãŠç¡èŠãããã³ãŒããžã§ãã¬ãŒã¿ãŒã察象ãšããŠããŸãã 泚éã#Nãã¯ããã®æç¹ã§Nåã®ã¹ããŒã¹ãæ¿å ¥ããå¿ èŠãããããšãã³ãŒããžã§ãã¬ãŒã¿ãŒã«äŒããŸãã ãŸãã泚éãïŒNãã¯ãæ¹è¡ãšNåã®ã¿ããè¡šããŸãã

ããã¹ãŠçæïŒEMFTextïŒããœãŒã¹ã³ãŒããåçæããEclipseã®2çªç®ã®ã€ã³ã¹ã¿ã³ã¹ãåèµ·åããŸãã ã¢ãã«ãããã¹ã圢åŒã§å床ä¿åããã³ãŒããããé©åã«ãã©ãŒããããããŠããããšã確èªããŠãã ããã
ãããã«
ãã®èšäºãèªãã åŸã¯ãã¢ãã«ã®ããªãºã ãšã¢ãã«å€æãéããŠããœãããŠã§ã¢éçºãå確èªããå¿ èŠããããŸãã
ã¢ãã«ã¯ããŸããŸãªè¡šèšæ³ã§è¡šãããšãã§ããŸãïŒ å³ ã è¡š ãããã¹ãã®åœ¢åŒïŒã ã¢ãã«é§ååéçºã®èŠ³ç¹ããèŠããšããµããžã§ã¯ãæåèšèªã¯ã¡ã¿ã¢ãã«ã®è¡šèšæ³ã®1ã€ã«ãããŸããã
äžæ¹ããµããžã§ã¯ãæåèšèªã®ææ³ã¯ãEBNF ã¢ããªã³ã°ç©ºéã®ã¡ã¿ã¢ãã«ã§ãã ãããŠããœãŒã¹ã³ãŒãã¯ãã®ã¢ããªã³ã°ç©ºéã®ã¢ãã«ã§ãã
ããŒãµãŒãšã¯ãEBNFã·ãã¥ã¬ãŒã·ã§ã³ã¹ããŒã¹ããMOFã·ãã¥ã¬ãŒã·ã§ã³ã¹ããŒã¹ãªã©ã®ã¢ãã«ã«ã¢ãã«ãå€æããããšã§ãã
ã³ãŒããžã§ãã¬ãŒã¿ãŒã¯ãã»ãã³ãã£ãã¯æåã®ã¢ããªã³ã°ã¹ããŒã¹ïŒMOFãªã©ïŒããEBNFã¢ããªã³ã°ã¹ããŒã¹ãžã®ã¢ãã«ã®éå€æã§ãã
ãŸããããã°ã©ãã³ã°èšèªãéçºããããã®ããŒã«ã®1ã€ã§ããEMFTextã«ãåºäŒããŸããã