use of org.drools.drl.parser.DroolsParserException in project drools by kiegroup.
the class QueryElementBuilder method processBinding.
private void processBinding(RuleBuildContext context, BaseDescr descr, Declaration[] params, QueryArgument[] arguments, List<Declaration> requiredDeclarations, InternalReadAccessor arrayReader, Pattern pattern, BindingDescr bind) {
Declaration declr = context.getDeclarationResolver().getDeclaration(bind.getVariable());
if (declr != null) {
// check right maps to a slot, otherwise we can't reverse this and should error
int pos = getPos(bind.getExpression(), params);
if (pos >= 0) {
// slot exist, reverse and continue
String slot = bind.getExpression();
String var = bind.getVariable();
bind.setVariable(slot);
bind.setExpression(var);
} else {
// else error, we cannot find the slot to unify against
}
}
// left does not already exist, is it a slot?
int pos = getPos(bind.getVariable(), params);
if (pos >= 0) {
// it's an input on a slot, is the input using bindings?
declr = context.getDeclarationResolver().getDeclaration(bind.getExpression());
if (declr != null) {
requiredDeclarations.add(declr);
arguments[pos] = new QueryArgument.Declr(declr);
} else {
// it must be a literal/expression
// it's an expression and thus an input
DrlExprParser parser = new DrlExprParser(context.getConfiguration().getLanguageLevel());
ConstraintConnectiveDescr bresult = parser.parse(bind.getExpression());
if (parser.hasErrors()) {
for (DroolsParserException error : parser.getErrors()) {
context.addError(new DescrBuildError(context.getParentDescr(), descr, null, "Unable to parser pattern expression:\n" + error.getMessage()));
}
return;
}
arguments[pos] = getLiteralQueryArgument(context, descr, bresult);
}
} else {
// this is creating a new output binding
// we know it doesn't exist, as we already checked for left == var
pos = getPos(bind.getExpression(), params);
if (pos < 0) {
// error this must be a binding on a slot
context.addError(new DescrBuildError(context.getParentDescr(), descr, null, "named argument does not exist:\n" + bind.getExpression()));
return;
}
arguments[pos] = getVariableQueryArgument(arrayReader, params, pos, pattern, bind.getVariable());
}
}
use of org.drools.drl.parser.DroolsParserException in project drools by kiegroup.
the class PatternBuilder method parseExpression.
protected ConstraintConnectiveDescr parseExpression(final RuleBuildContext context, final PatternDescr patternDescr, final BaseDescr original, final String expression) {
DrlExprParser parser = new DrlExprParser(context.getConfiguration().getLanguageLevel());
ConstraintConnectiveDescr result = parser.parse(expression);
result.setResource(patternDescr.getResource());
result.copyLocation(original);
if (parser.hasErrors()) {
for (DroolsParserException error : parser.getErrors()) {
registerDescrBuildError(context, patternDescr, "Unable to parse pattern expression:\n" + error.getMessage());
}
return null;
}
return result;
}
Aggregations