저는 장치에서 전체 화면 대화 형 동작을 지정하고 실행하기 위해 매우 간단한 도메인 특정 언어 (DSL)를 설계했습니다. XML을 캐리어 구문으로 사용하는 이벤트 기반 액션 언어입니다. 그것의 실시 예는 여기 : 내 도메인 특정 언어 표현
그것은 프로그래머 선언적 UI 레이아웃 및 프로그램에 대응되어야하는 이벤트 및 설명 상태 천이 언어이다 :
<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>
그것은 의미 이하의 수단 이벤트를 흐르는 동작. DSL은 가독성을 위해 설계되었습니다.
- 초과 : 상태 타이머의 지속 기간 각각의 상태를
- backgroundactions 실행 중 : 여기 노드에 대한 짧은 설명은 화면 구성 요소와 이러한 온 - 입력 상태
- 상태 화면 실행되는 동작을 나타내는
- 예상 이벤트 : 현재 상태에서 예상되는 이벤트입니다. 이러한 비동기 이벤트
문법 또는 메타 모델 (내가 언어 모델링 기술에 익숙하지 않은 오전)와 같은 형식적인 설명이 특정 언어를 표현하는 방법이 있나요 있습니다. 내 생각은이 DSL에 대한 언어 사양을 작성하여 팀의 다른 프로그래머가 Python 또는이 사양의 루아와 같이 원하는 다른 언어로 스크립트를 생성 할 수 있도록하는 것입니다. 아마이 XML을 코드 생성 할 수도있을 것입니다. 이것을 대표하는 가장 좋은 방법은 무엇입니까? 나는 많은 언어 도구와 DSL 도구를 사용 해왔다. 그러나이 언어에 가장 효율적인 것이 무엇인지 알 수 없다. 전문 지식을 가진 사람이 올바른 방향으로 나를 도울 수 있고 수행해야 할 단계를 시작하실 수 있습니다.
[MPS] (http://www.jetbrains.com/mps/)를 참조하십시오. – dasblinkenlight