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);