mirror of
https://github.com/eMoflon/emoflon-neo.git
synced 2024-06-03 10:31:42 +00:00
531 lines
6.7 KiB
Plaintext
531 lines
6.7 KiB
Plaintext
import "platform:/resource/SokobanLanguage/src/metamodels/SokobanLanguage.msl"
|
|
|
|
grammar SokobanImportExport_BWD {
|
|
BoardEndEntryRule
|
|
BoardNormalEntryRule
|
|
FirstColAllRowsEnd
|
|
FirstColAllRowsNormal
|
|
FirstRowAllColsEnd
|
|
FirstRowAllColsNormal
|
|
AllOtherFieldsEnd
|
|
AllOtherFieldsNormal
|
|
}
|
|
|
|
rule BoardEndEntryRule {
|
|
++sokBoard:sokobanExchangeFormat.Board {
|
|
.enamespace := <__srcModelName>
|
|
++-firstRow->row
|
|
++-corr->board
|
|
{
|
|
._type_ := "BoardToBoard"
|
|
}
|
|
}
|
|
|
|
++ne:End {
|
|
.enamespace := <__srcModelName>
|
|
++-corr->nf
|
|
{
|
|
._type_ := "EntryToField"
|
|
}
|
|
}
|
|
|
|
++row:Row {
|
|
.enamespace := <__srcModelName>
|
|
++-firstEntry->ne
|
|
}
|
|
|
|
nf:Field {
|
|
.enamespace : <__trgModelName>
|
|
.endPos : true
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
board:SokobanLanguage.Board {
|
|
.enamespace : <__trgModelName>
|
|
-fields->nf
|
|
{
|
|
.col : 0
|
|
.row : 0
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
attributeConstraints {
|
|
}
|
|
}
|
|
|
|
|
|
rule BoardNormalEntryRule {
|
|
++sokBoard:sokobanExchangeFormat.Board {
|
|
.enamespace := <__srcModelName>
|
|
++-firstRow->row
|
|
++-corr->board
|
|
{
|
|
._type_ := "BoardToBoard"
|
|
}
|
|
}
|
|
|
|
++ne:Normal {
|
|
.enamespace := <__srcModelName>
|
|
++-corr->nf
|
|
{
|
|
._type_ := "EntryToField"
|
|
}
|
|
}
|
|
|
|
++row:Row {
|
|
.enamespace := <__srcModelName>
|
|
++-firstEntry->ne
|
|
}
|
|
|
|
nf:Field {
|
|
.enamespace : <__trgModelName>
|
|
.endPos : false
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
board:SokobanLanguage.Board {
|
|
.enamespace : <__trgModelName>
|
|
-fields->nf
|
|
{
|
|
.col : 0
|
|
.row : 0
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
attributeConstraints {
|
|
}
|
|
}
|
|
|
|
|
|
rule FirstColAllRowsEnd {
|
|
r:Row {
|
|
.enamespace : <__srcModelName>
|
|
++-next->nr
|
|
-firstEntry->e
|
|
}
|
|
|
|
++nr:Row {
|
|
.enamespace := <__srcModelName>
|
|
++-firstEntry->ne
|
|
}
|
|
|
|
e:Entry {
|
|
.enamespace : <__srcModelName>
|
|
-corr->f
|
|
{
|
|
._type_ : "EntryToField"
|
|
}
|
|
}
|
|
|
|
++ne:End {
|
|
.enamespace := <__srcModelName>
|
|
++-corr->nf
|
|
{
|
|
._type_ := "EntryToField"
|
|
}
|
|
}
|
|
|
|
b:SokobanLanguage.Board {
|
|
.enamespace : <__trgModelName>
|
|
-fields->f
|
|
{
|
|
.col : 0
|
|
~_tr_ : true
|
|
}
|
|
-fields->nf
|
|
{
|
|
.row : b::-fields->f::row+1
|
|
.col : 0
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
f:Field {
|
|
.enamespace : <__trgModelName>
|
|
-bottom->nf
|
|
{
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
nf:Field {
|
|
.enamespace : <__trgModelName>
|
|
.endPos : true
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
attributeConstraints {
|
|
}
|
|
}
|
|
|
|
|
|
rule FirstColAllRowsNormal {
|
|
r:Row {
|
|
.enamespace : <__srcModelName>
|
|
++-next->nr
|
|
-firstEntry->e
|
|
}
|
|
|
|
++nr:Row {
|
|
.enamespace := <__srcModelName>
|
|
++-firstEntry->ne
|
|
}
|
|
|
|
e:Entry {
|
|
.enamespace : <__srcModelName>
|
|
-corr->f
|
|
{
|
|
._type_ : "EntryToField"
|
|
}
|
|
}
|
|
|
|
++ne:Normal {
|
|
.enamespace := <__srcModelName>
|
|
++-corr->nf
|
|
{
|
|
._type_ := "EntryToField"
|
|
}
|
|
}
|
|
|
|
b:SokobanLanguage.Board {
|
|
.enamespace : <__trgModelName>
|
|
-fields->f
|
|
{
|
|
.col : 0
|
|
~_tr_ : true
|
|
}
|
|
-fields->nf
|
|
{
|
|
.col : 0
|
|
.row : b::-fields->f::row+1
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
f:Field {
|
|
.enamespace : <__trgModelName>
|
|
-bottom->nf
|
|
{
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
nf:Field {
|
|
.enamespace : <__trgModelName>
|
|
.endPos : false
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
attributeConstraints {
|
|
}
|
|
}
|
|
|
|
|
|
rule FirstRowAllColsEnd {
|
|
e:Entry {
|
|
.enamespace : <__srcModelName>
|
|
++-next->ne
|
|
-corr->f
|
|
{
|
|
._type_ : "EntryToField"
|
|
}
|
|
}
|
|
|
|
++ne:End {
|
|
.enamespace := <__srcModelName>
|
|
++-corr->nf
|
|
{
|
|
._type_ := "EntryToField"
|
|
}
|
|
}
|
|
|
|
b:SokobanLanguage.Board {
|
|
.enamespace : <__trgModelName>
|
|
-fields->f
|
|
{
|
|
.row : 0
|
|
~_tr_ : true
|
|
}
|
|
-fields->nf
|
|
{
|
|
.row : 0
|
|
.col : b::-fields->f::col+1
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
f:Field {
|
|
.enamespace : <__trgModelName>
|
|
-right->nf
|
|
{
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
nf:Field {
|
|
.enamespace : <__trgModelName>
|
|
.endPos : true
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
attributeConstraints {
|
|
}
|
|
}
|
|
|
|
|
|
rule FirstRowAllColsNormal {
|
|
e:Entry {
|
|
.enamespace : <__srcModelName>
|
|
++-next->ne
|
|
-corr->f
|
|
{
|
|
._type_ : "EntryToField"
|
|
}
|
|
}
|
|
|
|
++ne:Normal {
|
|
.enamespace := <__srcModelName>
|
|
++-corr->nf
|
|
{
|
|
._type_ := "EntryToField"
|
|
}
|
|
}
|
|
|
|
b:SokobanLanguage.Board {
|
|
.enamespace : <__trgModelName>
|
|
-fields->f
|
|
{
|
|
.row : 0
|
|
~_tr_ : true
|
|
}
|
|
-fields->nf
|
|
{
|
|
.col : b::-fields->f::col+1
|
|
.row : 0
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
f:Field {
|
|
.enamespace : <__trgModelName>
|
|
-right->nf
|
|
{
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
nf:Field {
|
|
.enamespace : <__trgModelName>
|
|
.endPos : false
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
attributeConstraints {
|
|
}
|
|
}
|
|
|
|
|
|
rule AllOtherFieldsEnd {
|
|
++ne:End {
|
|
.enamespace := <__srcModelName>
|
|
++-corr->nf
|
|
{
|
|
._type_ := "EntryToField"
|
|
}
|
|
}
|
|
|
|
ble:Entry {
|
|
.enamespace : <__srcModelName>
|
|
++-next->ne
|
|
-corr->bl
|
|
{
|
|
._type_ : "EntryToField"
|
|
}
|
|
}
|
|
|
|
b:SokobanLanguage.Board {
|
|
.enamespace : <__trgModelName>
|
|
-fields->ul
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
-fields->nf
|
|
{
|
|
.col : b::-fields->ur::col
|
|
.row : b::-fields->bl::row
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
-fields->bl
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
-fields->ur
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
ul:Field {
|
|
.enamespace : <__trgModelName>
|
|
-bottom->bl
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
-right->ur
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
nf:Field {
|
|
.enamespace : <__trgModelName>
|
|
.endPos : true
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
bl:Field {
|
|
.enamespace : <__trgModelName>
|
|
-right->nf
|
|
{
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
ur:Field {
|
|
.enamespace : <__trgModelName>
|
|
-bottom->nf
|
|
{
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
attributeConstraints {
|
|
}
|
|
}
|
|
|
|
|
|
rule AllOtherFieldsNormal {
|
|
++ne:Normal {
|
|
.enamespace := <__srcModelName>
|
|
++-corr->nf
|
|
{
|
|
._type_ := "EntryToField"
|
|
}
|
|
}
|
|
|
|
ble:Entry {
|
|
.enamespace : <__srcModelName>
|
|
++-next->ne
|
|
-corr->bl
|
|
{
|
|
._type_ : "EntryToField"
|
|
}
|
|
}
|
|
|
|
b:SokobanLanguage.Board {
|
|
.enamespace : <__trgModelName>
|
|
-fields->ul
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
-fields->nf
|
|
{
|
|
.row : b::-fields->bl::row
|
|
.col : b::-fields->ur::col
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
-fields->bl
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
-fields->ur
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
ul:Field {
|
|
.enamespace : <__trgModelName>
|
|
-bottom->bl
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
-right->ur
|
|
{
|
|
~_tr_ : true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
nf:Field {
|
|
.enamespace : <__trgModelName>
|
|
.endPos : false
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
|
|
bl:Field {
|
|
.enamespace : <__trgModelName>
|
|
-right->nf
|
|
{
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
ur:Field {
|
|
.enamespace : <__trgModelName>
|
|
-bottom->nf
|
|
{
|
|
~_tr_ : false
|
|
~_tr_ := true
|
|
}
|
|
~_tr_ : true
|
|
}
|
|
|
|
attributeConstraints {
|
|
}
|
|
}
|
|
|