Skip to content
Snippets Groups Projects
Commit bfa8febc authored by Johannes Mey's avatar Johannes Mey
Browse files

add ecore2relast tool and generate relast grammar from ecore model

parent 404e5c0b
No related branches found
No related tags found
No related merge requests found
File added
...@@ -84,30 +84,44 @@ task runDrAST(type: JavaExec, dependsOn:jar) { ...@@ -84,30 +84,44 @@ task runDrAST(type: JavaExec, dependsOn:jar) {
main = 'de.tudresden.inf.st.statemachine.DrAstRunner' main = 'de.tudresden.inf.st.statemachine.DrAstRunner'
} }
def relastFiles = fileTree('src/main/jastadd/') { def relastFiles = fileTree('src/main/jastadd/') { include '**/*.relast' } +
include '**/*.relast' }.toList().toArray() fileTree('src/gen/jastadd/') { include '**/*.relast' }
String[] relastArguments = [ String[] relastArguments = [
"../libs/relast.jar", "../libs/relast.jar",
"--grammarName=./src/gen/jastadd/StatemachineGen", "--grammarName=./src/gen/jastadd/StateMachine",
"--useJastAddNames", "--useJastAddNames",
"--listClass=ArrayList", "--listClass=ArrayList",
"--jastAddList=JastAddList", "--jastAddList=JastAddList",
"--resolverHelper", "--resolverHelper",
"--file" "--file"
] ]
task preprocess(type: JavaExec) { def ecoreFile = "./src/main/resources/StateMachine.ecore"
def relastFile = "./src/gen/jastadd/StateMachine.relast"
task ecoreToRelast(type: JavaExec) {
group = 'Build' group = 'Build'
main = "-jar" main = "-jar"
doFirst { doFirst {
delete "src/gen/jastadd" delete "src/gen/jastadd"
mkdir "src/gen/jastadd" mkdir "src/gen/jastadd"
} }
args "../libs/ecore2relast-0.1.jar", ecoreFile, relastFile
inputs.files file(ecoreFile)
outputs.files file(relastFile)
}
task preprocess(type: JavaExec) {
group = 'Build'
main = "-jar"
args relastArguments + relastFiles args relastArguments + relastFiles
inputs.files relastFiles inputs.files relastFiles
outputs.files file("./src/main/jastadd/StatemachineGen.ast"), file("./src/main/jastadd/StatemachineGen.jadd") outputs.files file("./src/gen/jastadd/StateMachine.ast"), file("./src/gen/jastadd/StateMachine.jadd")
} }
jastadd { jastadd {
...@@ -181,9 +195,8 @@ task copyRagdoc(type: Copy, dependsOn: cleanRagdoc) { ...@@ -181,9 +195,8 @@ task copyRagdoc(type: Copy, dependsOn: cleanRagdoc) {
eachFile { println it.file } eachFile { println it.file }
} }
preprocess.dependsOn ecoreToRelast
generateAst.dependsOn preprocess generateAst.dependsOn preprocess
//generateAst.inputs.files file("./src/main/jastadd/StatemachineGen.ast"), file("./src/main/jastadd/StatemachineGen.jadd")
//compileJava.dependsOn jastadd
//
//// always run jastadd //// always run jastadd
//jastadd.outputs.upToDateWhen {false} //jastadd.outputs.upToDateWhen {false}
StateMachine ::= Element*;
abstract Element ::= <Label:String>;
State : Element;
Transition : Element;
rel Transition.From <-> State.Outgoing*;
rel Transition.To <-> State.Incoming*;
rel StateMachine.Initial -> State;
rel StateMachine.Final* -> State;
package de.tudresden.inf.st.statemachine; package de.tudresden.inf.st.statemachine;
import beaver.Parser; import beaver.Parser;
import de.tudresden.inf.st.statemachine.jastadd.model.DotGraph;
import de.tudresden.inf.st.statemachine.jastadd.model.State; import de.tudresden.inf.st.statemachine.jastadd.model.State;
import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine; import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine;
import de.tudresden.inf.st.statemachine.jastadd.model.Transition; import de.tudresden.inf.st.statemachine.jastadd.model.Transition;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Set;
public class Main { public class Main {
......
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="statemachine" nsURI="http://www.example.org/statemachine" nsPrefix="statemachine">
<eClassifiers xsi:type="ecore:EClass" name="StateMachine">
<eStructuralFeatures xsi:type="ecore:EReference" name="element" upperBound="-1"
eType="#//Element" containment="true"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="initial" lowerBound="1"
eType="#//State"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="final" upperBound="-1"
eType="#//State"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Element" abstract="true">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="label" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//Element">
<eStructuralFeatures xsi:type="ecore:EReference" name="outgoing" upperBound="-1"
eType="#//Transition" eOpposite="#//Transition/from"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="incoming" upperBound="-1"
eType="#//Transition" eOpposite="#//Transition/to"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Transition" eSuperTypes="#//Element">
<eStructuralFeatures xsi:type="ecore:EReference" name="from" lowerBound="1" eType="#//State"
eOpposite="#//State/outgoing"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="to" lowerBound="1" eType="#//State"
eOpposite="#//State/incoming"/>
</eClassifiers>
</ecore:EPackage>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment