Skip to content
Snippets Groups Projects
Commit 5429e9a9 authored by René Schöne's avatar René Schöne
Browse files

working on concise grammar

- rename intermediate grammar and aspect files
- updated documentation
parent 70506fc3
No related branches found
No related tags found
2 merge requests!22Resolve "Feature: Add context-free connect",!21Resolve "Make grammar(s) more concise"
Pipeline #12052 failed
...@@ -4,12 +4,18 @@ Please see [API documentation](ragdoc/index.html) for more details. ...@@ -4,12 +4,18 @@ Please see [API documentation](ragdoc/index.html) for more details.
![ros2rag-process](img/ros2rag-process.png) ![ros2rag-process](img/ros2rag-process.png)
`RagConnect` uses the [relast-preprocessor](https://git-st.inf.tu-dresden.de/jastadd/relast-preprocessor) to parse `.relast` grammar files. This results in an ASTNode of type `Program`. `RagConnect` uses the [relast-preprocessor](https://git-st.inf.tu-dresden.de/jastadd/relast-preprocessor) to parse `.relast` grammar files.
It further uses a dedicated parser for `.connect` files containing endpoint-, mapping-, and dependency-definitions. This results in an ASTNode of type `RagConnect`. This results in an ASTNode of type `Program`.
It further uses a dedicated parser for `.connect` files containing endpoint-, mapping-, and dependency-definitions.
This results in an ASTNode of type `RagConnect`.
The goal is to generate an aspect file containing setters and getters of tokens referred to by endpoint-definitions The goal is to generate an aspect file containing setters and getters of tokens referred to by endpoint-definitions
We use [mustache](https://mustache.github.io/) (currently its [Java version](https://github.com/spullara/mustache.java)) making use of partials resulting in a set of `.mustache` files located in `ragconnect.base/src/main/resources`. We use [mustache](https://mustache.github.io/) (currently its [Java version](https://github.com/spullara/mustache.java)) making use of partials to separate concerns.
The generation process uses an intermediate NTA of type `MRagConnect` defined in `MustacheNodes.relast` to separate this generation concern from the content of the DSL The `.mustache` files are located in `ragconnect.base/src/main/resources`.
The generation process uses intermediates NTAs (whose types are defined in `Intermediate.relast`) to ease the definition of two main generation "problems".
Those problems are differentiation on both kinds of an endpoint (send/receive and type/token/list), and attributes depending on position in n-ary relations.
There are aspect files for `Navigation` (mainly isX/asX attributes), `Analysis` (lookup attributes), `Printing`, `backend/Mappings` (default mappings) There are aspect files for `Navigation` (mainly isX/asX attributes), `Analysis` (static analysis attributes), `Printing`, `Mappings` (default mappings).
One of the main aspects is `backend/Generation` containing attributes to construct the `MRagConnect` NTA and all necessary attributes used within the mustache templates One of the main aspects is `Intermediate` containing all attributes consumed by `mustache` and other attributes the former depend on.
The other main aspect (which is currently not really used) is `backend/MustacheNodesToYAML.jrag` containing the transformation from a `MRagConnect` subtree to a `Document` subtree defined by `YAML.relast`. This is used to generate a YAML file containing the data used by mustache. It can be used by the default mustache implementation together with the templates. The other main aspect (which is currently not really used) is `IntermediateToYAML` containing the transformation from a `RagConnect` subtree to a `Document` subtree defined by `Mustache.relast` (located in `relast-preprocessor` submodule).
This is used to generate a YAML file containing the data used by mustache.
It can be used by the default mustache implementation together with the templates.
...@@ -86,7 +86,7 @@ jar { ...@@ -86,7 +86,7 @@ jar {
File preprocessorGrammar = file('../relast-preprocessor/src/main/jastadd/RelAst.relast') File preprocessorGrammar = file('../relast-preprocessor/src/main/jastadd/RelAst.relast')
File ragConnectGrammar = file('./src/main/jastadd/RagConnect.relast') File ragConnectGrammar = file('./src/main/jastadd/RagConnect.relast')
File intermediateGrammar = file('./src/main/jastadd/intermediate/MustacheNodes.relast') File intermediateGrammar = file('./src/main/jastadd/Intermediate.relast')
File mustacheGrammar = file('../relast-preprocessor/src/main/jastadd/mustache/Mustache.relast') File mustacheGrammar = file('../relast-preprocessor/src/main/jastadd/mustache/Mustache.relast')
task relast(type: JavaExec) { task relast(type: JavaExec) {
group = 'Build' group = 'Build'
......
aspect MustacheNodesToYAML { aspect IntermediateToYAML {
syn Document RagConnect.toYAML() { syn Document RagConnect.toYAML() {
Document doc = new Document(); Document doc = new Document();
MappingElement root = new MappingElement(); MappingElement root = new MappingElement();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment