我设计了一种非常简单的领域特定语言 (DSL) 来指定和执行设备上的全屏交互行为。它是基于事件的动作语言,以 XML 作为载体语法。它的例子在这里:
<state no="15000" >
<timeout>30</timeout>
<backgroundactions>
<as3function name="hideImages">
</as3function>
</backgroundactions>
<screen>
<components>
<textfield x="50" y="120" width="924" textsize="50" background="1" border="1">
<text say="1">
<part type="text">Who would you like to call?</part>
</text>
</textfield>
<button label="MENU" width="80" height="30" x="920" y="10" textsize="14" icon="none" adjtext="-5">
<event name="clicked">
<action preconditions="no" name="transition">
<parameter>
<type>state</type>
<name>n</name>
<value>800</value>
</parameter>
</action>
</event>
</button>
<button label="My contacts" width="250" height="200" x="212" y="500" textsize="40" icon="iconRight2.png" iconx="65" icony="20" adjtext="35">
<event name="clicked">
<action preconditions="no" name="transition">
<parameter>
<type>state</type>
<name>n</name>
<value>15007</value>
</parameter>
</action>
</event>
</button>
<button label="Other" width="250" height="200" x="562" y="500" textsize="40" icon="iconWrong2.png" iconx="65" icony="20" adjtext="35">
<event name="clicked">
<action preconditions="no" name="transition">
<parameter>
<type>state</type>
<name>n</name>
<value>15100</value>
</parameter>
</action>
</event>
</button>
</components>
</screen>
</state>
它在语义上意味着以下内容:
它是一种状态转换语言,程序员在其中以声明方式描述 UI 布局和程序应响应的事件以及流向事件的操作。DSL 是为可读性而设计的。以下是节点的简短描述:
- timeout:执行每个状态时状态计时器的持续时间
- 背景动作:这些代表进入状态时执行的动作
- 状态屏幕:屏幕组件和与之关联的事件
- expectedevents:当前状态预期的事件。这些是异步事件
有没有办法以更正式的描述将这种特定语言表示为语法或元模型(我不熟悉语言建模技术)。我的想法是为此 DSL 编写语言规范,以便我团队中的其他程序员可以根据该规范生成他们选择的其他语言的脚本,例如 python 或 lua。甚至可能代码生成这个 XML?代表这一点的最佳方式是什么?我一直在使用许多语言工具和 dsl 工具,但我不知道什么对这种语言最有效?有专业知识的人可以帮助我朝着正确的方向前进,并在需要完成的步骤上抢先一步。