use of org.drools.drl.parser.lang.dsl.DefaultExpander in project drools by kiegroup.
the class KnowledgeBuilderImpl method dslrReaderToPackageDescr.
private PackageDescr dslrReaderToPackageDescr(Resource resource, Reader dslrReader) throws DroolsParserException {
boolean hasErrors;
PackageDescr pkg;
DrlParser parser = new DrlParser(configuration.getLanguageLevel());
DefaultExpander expander = getDslExpander();
try {
try {
if (expander == null) {
expander = new DefaultExpander();
}
String str = expander.expand(dslrReader);
if (expander.hasErrors()) {
for (ExpanderException error : expander.getErrors()) {
error.setResource(resource);
addBuilderResult(error);
}
}
pkg = parser.parse(resource, str);
this.results.addAll(parser.getErrors());
hasErrors = parser.hasErrors();
} finally {
if (dslrReader != null) {
dslrReader.close();
}
}
} catch (IOException ex) {
throw new UncheckedIOException(ex);
}
return hasErrors ? null : pkg;
}
use of org.drools.drl.parser.lang.dsl.DefaultExpander in project drools by kiegroup.
the class DrlParserTest method testExpandDRLUsingInjectedExpander.
@Test
public void testExpandDRLUsingInjectedExpander() throws Exception {
String dsl = "[condition]Something=Something()" + NL + "[then]another=another();";
String drl = "rule 'foo' " + NL + " when " + NL + " Something " + NL + " then " + NL + " another " + NL + "end";
DefaultExpanderResolver resolver = new DefaultExpanderResolver(new StringReader(dsl));
final DSLMappingFile file = new DSLTokenizedMappingFile();
if (file.parseAndLoad(new StringReader(dsl))) {
final Expander expander = new DefaultExpander();
expander.addDSLMapping(file.getMapping());
resolver.addExpander("*", expander);
} else {
throw new RuntimeException("Error parsing and loading DSL file." + file.getErrors());
}
DrlParser parser = new DrlParser(LanguageLevelOption.DRL5);
String result = parser.getExpandedDRL(drl, resolver);
Assertions.assertThat("rule 'foo' " + NL + " when " + NL + " Something() " + NL + " then " + NL + " another(); " + NL + "end").isEqualToIgnoringWhitespace(result);
}
use of org.drools.drl.parser.lang.dsl.DefaultExpander in project drools by kiegroup.
the class ANTLRDSLTest method testMe.
@Test
public void testMe() throws Exception {
DSLTokenizedMappingFile tokenizedFile = null;
final String filename = "test_antlr.dsl";
final Reader reader = new InputStreamReader(this.getClass().getResourceAsStream(filename));
tokenizedFile = new DSLTokenizedMappingFile();
tokenizedFile.parseAndLoad(reader);
reader.close();
for (Iterator it = tokenizedFile.getMapping().getEntries().iterator(); it.hasNext(); ) {
DSLMappingEntry entry = (DSLMappingEntry) it.next();
// System.out.println("ENTRY: " + entry.getKeyPattern() + " ::::: " + entry.getValuePattern());
}
DefaultExpander ex = new DefaultExpander();
ex.addDSLMapping(tokenizedFile.getMapping());
System.err.println(ex.expand("rule 'x' \n when \n address is present where name is \"foo\" and age is \"32\" \n then \n end"));
}
use of org.drools.drl.parser.lang.dsl.DefaultExpander in project drools by kiegroup.
the class DSLMappingFileTest method testNoRHS.
/**
* Right now this test fails because there is no RHS for the rule. It connects the "then" and "end" to "thenend".
*/
@Test
public void testNoRHS() {
String file = "[then]TEST=System.out.println(\"DO_SOMETHING\");" + NL + "" + "[when]code {code1} occurs and sum of all digit not equal \\( {code2} \\+ {code3} \\)=AAAA( cd1 == {code1}, cd2 != ( {code2} + {code3} ))" + NL + "" + "[when]code {code1} occurs=BBBB" + NL + "";
try {
final Reader reader = new StringReader(file);
this.file = new DSLTokenizedMappingFile();
final boolean parsingResult = this.file.parseAndLoad(reader);
reader.close();
assertTrue(this.file.getErrors().toString(), parsingResult);
assertTrue(this.file.getErrors().isEmpty());
final String LHS = "code 1041 occurs and sum of all digit not equal ( 1034 + 1035 )";
final String rule = "rule \"x\"" + NL + "when" + NL + "" + LHS + "" + NL + "then" + NL + "end";
DefaultExpander de = new DefaultExpander();
de.addDSLMapping(this.file.getMapping());
final String ruleAfterExpansion = de.expand(rule);
final String expected = "rule \"x\"" + NL + "when" + NL + "AAAA( cd1 == 1041, cd2 != ( 1034 + 1035 ))" + NL + "then" + NL + "end";
assertEquals(expected, ruleAfterExpansion);
} catch (final IOException e) {
e.printStackTrace();
fail("Should not raise exception ");
}
}
use of org.drools.drl.parser.lang.dsl.DefaultExpander in project drools by kiegroup.
the class DSLMappingFileTest method testParseFileWithEscapes.
@Test
public void testParseFileWithEscapes() {
String file = "[then]TEST=System.out.println(\"DO_SOMETHING\");" + NL + "" + "[when]code {code1} occurs and sum of all digit not equal \\( {code2} \\+ {code3} \\)=AAAA( cd1 == {code1}, cd2 != ( {code2} + {code3} ))" + NL + "" + "[when]code {code1} occurs=BBBB" + NL + "";
try {
final Reader reader = new StringReader(file);
this.file = new DSLTokenizedMappingFile();
final boolean parsingResult = this.file.parseAndLoad(reader);
reader.close();
assertTrue(this.file.getErrors().toString(), parsingResult);
assertTrue(this.file.getErrors().isEmpty());
final String LHS = "code 1041 occurs and sum of all digit not equal ( 1034 + 1035 )";
final String rule = "rule \"x\"" + NL + "when" + NL + "" + LHS + "" + NL + "then" + NL + "TEST" + NL + "end";
DefaultExpander de = new DefaultExpander();
de.addDSLMapping(this.file.getMapping());
final String ruleAfterExpansion = de.expand(rule);
final String expected = "rule \"x\"" + NL + "when" + NL + "AAAA( cd1 == 1041, cd2 != ( 1034 + 1035 ))" + NL + "then" + NL + "System.out.println(\"DO_SOMETHING\");" + NL + "end";
assertEquals(expected, ruleAfterExpansion);
} catch (final IOException e) {
e.printStackTrace();
fail("Should not raise exception ");
}
}
Aggregations