README.md 1.41 KB
Newer Older
Johannes Mey's avatar
Johannes Mey committed
1
# RelAST Preprocessor Version 0.2.4
Niklas Fors's avatar
Niklas Fors committed
2

René Schöne's avatar
René Schöne committed
3
![RelAST process](relast-process.png)
Niklas Fors's avatar
Niklas Fors committed
4

René Schöne's avatar
René Schöne committed
5
6
The RelAST preprocessor takes a `.relast` file as input comprising AST rules and relations. It produces files that afterwards are processed by JastAdd to generated Java code.
To use it in your project, build the JAR file running
Niklas Fors's avatar
Niklas Fors committed
7

René Schöne's avatar
René Schöne committed
8
9
10
```
./gradlew jar
```
Niklas Fors's avatar
Niklas Fors committed
11

René Schöne's avatar
René Schöne committed
12
This will produce `build/libs/relast.jar`. Copy it to your project and extend your build config (preferably Gradle) with the following:
Niklas Fors's avatar
Niklas Fors committed
13

René Schöne's avatar
René Schöne committed
14
15
16
17
18
19
20
21
22
23
24
```
task preprocess(type: JavaExec) {
    group = 'Build'
    main = "-jar"
    args = [
            "libs/relast.jar",
            "./src/main/jastadd/main.relast",
            "--listClass=RefList",
            "--jastAddList=JastAddList",
            "--file"
    ]
Niklas Fors's avatar
Niklas Fors committed
25

René Schöne's avatar
René Schöne committed
26
27
28
29
30
31
32
33
34
35
36
37
38
    inputs.files file("./src/main/jastadd/main.relast")
    outputs.files file("./src/main/jastadd/mainGen.ast"), file("./src/main/jastadd/mainGen.jadd")
}
```

Note that you may have to change

- the directory of `relast.jar`
- the `.relast` file(s) both as argument(s) and input file(s)
- the output files
- parameters of RelAST (in this case, the list classes were renamed)

## Supported relations
Niklas Fors's avatar
Niklas Fors committed
39
40
41
42
43

	// Directed relations
	A.b    -> B;
	A.b?   -> B;
	A.bs*  -> B;
René Schöne's avatar
René Schöne committed
44
45
46
	B      <- A.b  ;
	B      <- A.b? ;
	B      <- A.bs*;
Niklas Fors's avatar
Niklas Fors committed
47
48
49
50
51
52
53
54
55
56
57

	// Bidirectional relations
	A.b   <-> B.a;
	A.b   <-> B.a?;
	A.b   <-> B.as*;
	A.b?  <-> B.a;
	A.b?  <-> B.a?;
	A.b?  <-> B.as*;
	A.bs* <-> B.a;
	A.bs* <-> B.a?;
	A.bs* <-> B.as*;