emoflon-neo/examples/bin/bin/rules/tgg/SokobanImportExport_BWD.msl
2021-05-29 22:05:23 +02:00

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 {
}
}