diff --git a/monticore-generator/src/main/java/de/monticore/dstlgen/grammartransformation/DSL2TransformationLanguageVisitor.java b/monticore-generator/src/main/java/de/monticore/dstlgen/grammartransformation/DSL2TransformationLanguageVisitor.java
index 78c7baa78f..4650f83745 100644
--- a/monticore-generator/src/main/java/de/monticore/dstlgen/grammartransformation/DSL2TransformationLanguageVisitor.java
+++ b/monticore-generator/src/main/java/de/monticore/dstlgen/grammartransformation/DSL2TransformationLanguageVisitor.java
@@ -337,6 +337,24 @@ public void visit(ASTConcept srcNode) {
map(srcNode, targetNode);
}
+ @Override
+ public void visit(ASTSplitRule srcNode) {
+ Log.debug("Visiting " + srcNode.toString(), LOG);
+ tfLang.addSplitRule(srcNode.deepClone());
+ }
+
+ @Override
+ public void visit(ASTKeywordRule srcNode) {
+ Log.debug("Visiting " + srcNode.toString(), LOG);
+ tfLang.addKeywordRule(srcNode.deepClone());
+ }
+
+ @Override
+ public void visit(ASTReplaceRule srcNode) {
+ Log.debug("Visiting " + srcNode.toString(), LOG);
+ tfLang.addReplaceRule(srcNode.deepClone());
+ }
+
public ASTMCGrammar getTfLang() {
return tfLang;
}
diff --git a/monticore-test/montitrans/test-dstl-gen/src/main/grammars/mc/testcases/ExpressionDSL.mc4 b/monticore-test/montitrans/test-dstl-gen/src/main/grammars/mc/testcases/ExpressionDSL.mc4
index 87d5fadfc7..4fd183693f 100644
--- a/monticore-test/montitrans/test-dstl-gen/src/main/grammars/mc/testcases/ExpressionDSL.mc4
+++ b/monticore-test/montitrans/test-dstl-gen/src/main/grammars/mc/testcases/ExpressionDSL.mc4
@@ -13,4 +13,9 @@ grammar ExpressionDSL extends
Foo = "expr" Expression;
CDAttribute = Modifier MCType Name ("=" initial:Expression)? ";";
+
+ // a production introducing a keyword
+ MyFancyKeywordP = "MyFancyKeyword";
+ // which is then turned into no keyword
+ nokeyword "MyFancyKeyword";
}
diff --git a/monticore-test/montitrans/test-dstl-gen/src/test/java/mc/testcases/expressiondsl/ExpressionDSLTRParseTest.java b/monticore-test/montitrans/test-dstl-gen/src/test/java/mc/testcases/expressiondsl/ExpressionDSLTRParseTest.java
index 872938f453..88e2ac1e02 100644
--- a/monticore-test/montitrans/test-dstl-gen/src/test/java/mc/testcases/expressiondsl/ExpressionDSLTRParseTest.java
+++ b/monticore-test/montitrans/test-dstl-gen/src/test/java/mc/testcases/expressiondsl/ExpressionDSLTRParseTest.java
@@ -69,6 +69,15 @@ public void testAssigns() throws IOException {
Assert.assertEquals("string", ((ASTStringLiteral)((ASTLiteralExpression)((ASTPlusExpression)ast.getValue()).getRight()).getLiteral()).getValue());
}
+ @Test
+ public void testNoKeyword() throws IOException {
+ // Test if (no)keywords rules apply
+ test("MyFancyKeyword", ExpressionDSLTRParser::parse_StringITFMyFancyKeywordP);
+ test("MyFancyKeyword", ExpressionDSLTRParser::parse_StringITFNameExpression);
+ test("42<=42", ExpressionDSLTRParser::parse_StringITFExpression);
+ test("42 <42", ExpressionDSLTRParser::parse_StringITFExpression);
+ }
+
protected A test(String exp, ParserFunction parserFunction) throws IOException {
ExpressionDSLTRParser parser = ExpressionDSLTRMill.parser();
Optional typeOptional = parserFunction.parse(parser, exp);