Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

扩展DSL开发 #207

Open
YanGuam opened this issue Nov 12, 2014 · 7 comments
Open

扩展DSL开发 #207

YanGuam opened this issue Nov 12, 2014 · 7 comments

Comments

@YanGuam
Copy link
Member

YanGuam commented Nov 12, 2014

开发一种合乎技能描述逻辑的基于汉语的神杀扩展语言。
降低diy难度,弱化使用者对底层实现了解程度的硬性要求。
比如,Room属于完全不必要让使用者知道其存在的对象(技能描述里摸牌就是摸牌,不会提到房间。可以用类似 上家.摸牌() 这种更易于理解的方式直观反映描述)。

例:奸雄 {
当 受到伤害时 //syntax:当+时机
你 可以 获得(伤害.牌) // 底层根据不同状况做出“可以”的具体实现,如parser解析到这里只有一处“可以”的描述,所以询问是否发动技能。由于声明主语“你”,所以之后的操作都对之前声明的主语所指对象进行。获得是过程函数,隐藏了Room对象的存在,因为使用者不必意识到它的存在。伤害代指DamageStruct,“受到伤害时”这一时机被声明后,parser负责赋予“伤害”描述DamageStruct的含义。“牌”指DamageStruct::card.
}

关于语言的具体设计,大家可以在回复中讨论。

@YanGuam
Copy link
Member Author

YanGuam commented Nov 12, 2014

上例去掉注释后即为
例:奸雄 {
当 受到伤害时 你 可以 获得(伤害.牌)
}

十分贴近于人类的描述

@YanGuam
Copy link
Member Author

YanGuam commented Nov 12, 2014

更好的做法是采用双层架构,核心基于一套英语的语法,上层加一层汉语的包装,兼容多种汉语表达,然后将这样多样的汉语表达编译成底层的基于英语的 DSL。
就像 TeX 系统一样,底层有一套 TeX 原语,然后上层可以包装下比如 LaTeX。
好处:
1.上层架构的开发者不必了解底层的实现,比如把上层交给官方的规则维护者,底层我们来做,这样语法就更能贴近官方描述了(即上层开发者掌握dsl,并维护表达,底层交由程序员来维护实现和dsl)
2. 提升一部分有能力玩家的开发参与感
3. 未来可以加入英语表达、法语表达、日语表达、阿拉伯语表达、希伯来语、毛利语表达、文言文表达等高大上表达(不同表达均编译成相同的dsl)
核心DSL 语言的特色是简洁和稳定 上层语言可以更加贴近人类理解

@YanGuam
Copy link
Member Author

YanGuam commented Nov 12, 2014

dsl示例:on damaged do
ask -> self.get(damaged.card)
end (奸雄)

qianxun = disallow target(".shunshouqianyang, .lebusishu" ) 牌的种类表达式可沿用成熟的exppattern

@Fsu0413
Copy link
Contributor

Fsu0413 commented Nov 12, 2014

我感觉现在就制定语法规范为时过早…………等开始开发dsl的时候再制定语法规范我感觉时间也足够了,而且要考虑的完全一些,毕竟有些技能不像想像当中那么容易

@ubun
Copy link
Contributor

ubun commented Nov 13, 2014

高大上啊

@BeginnerSlob
Copy link
Member

@hypercross 大概就是他之前搞的。。

@hypercross
Copy link
Contributor

唔 其实语法挺不重要的 重要的是语义
直接读入json甚至rson是个简单得多的方案
又不是不能用中文

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants