use of org.drools.drl.ast.dsl.DescrBuilder in project drools by kiegroup.
the class DRL6Parser method intOrChunkAttribute.
/**
* intOrChunkAttribute := attributeKey ( DECIMAL | chunk_(_) )
* @param key
* @throws org.antlr.runtime.RecognitionException
*/
private AttributeDescr intOrChunkAttribute(AttributeSupportBuilder<?> as, String[] key) throws RecognitionException {
AttributeDescrBuilder<?> attribute = null;
try {
StringBuilder builder = new StringBuilder();
for (String k : key) {
if ("-".equals(k)) {
match(input, DRL6Lexer.MINUS, k, null, // part of the keyword
DroolsEditorType.KEYWORD);
if (state.failed)
return null;
} else {
match(input, DRL6Lexer.ID, k, null, DroolsEditorType.KEYWORD);
if (state.failed)
return null;
}
builder.append(k);
}
if (state.backtracking == 0) {
attribute = helper.start((DescrBuilder<?, ?>) as, AttributeDescrBuilder.class, builder.toString());
}
if (input.LA(1) == DRL6Lexer.LEFT_PAREN) {
String value = chunk(DRL6Lexer.LEFT_PAREN, DRL6Lexer.RIGHT_PAREN, -1);
if (state.failed)
return null;
if (state.backtracking == 0) {
if (attribute != null) {
attribute.value(safeStripDelimiters(value, "(", ")"));
attribute.type(AttributeDescr.Type.EXPRESSION);
}
}
} else {
String value = "";
if (input.LA(1) == DRL6Lexer.PLUS) {
Token sign = match(input, DRL6Lexer.PLUS, null, null, DroolsEditorType.NUMERIC_CONST);
if (state.failed)
return null;
value += sign.getText();
} else if (input.LA(1) == DRL6Lexer.MINUS) {
Token sign = match(input, DRL6Lexer.MINUS, null, null, DroolsEditorType.NUMERIC_CONST);
if (state.failed)
return null;
value += sign.getText();
}
Token nbr = match(input, DRL6Lexer.DECIMAL, null, null, DroolsEditorType.NUMERIC_CONST);
if (state.failed)
return null;
value += nbr.getText();
if (state.backtracking == 0) {
if (attribute != null) {
attribute.value(value);
attribute.type(AttributeDescr.Type.NUMBER);
}
}
}
} finally {
if (attribute != null) {
helper.end(AttributeDescrBuilder.class, attribute);
}
}
return attribute != null ? attribute.getDescr() : null;
}
use of org.drools.drl.ast.dsl.DescrBuilder in project drools by kiegroup.
the class DRL6Parser method booleanAttribute.
/**
* booleanAttribute := attributeKey (BOOLEAN)?
* @param key
* @throws org.antlr.runtime.RecognitionException
*/
private AttributeDescr booleanAttribute(AttributeSupportBuilder<?> as, String[] key) throws RecognitionException {
AttributeDescrBuilder<?> attribute = null;
try {
StringBuilder builder = new StringBuilder();
for (String k : key) {
if ("-".equals(k)) {
match(input, DRL6Lexer.MINUS, k, null, // part of the keyword
DroolsEditorType.KEYWORD);
if (state.failed)
return null;
} else {
match(input, DRL6Lexer.ID, k, null, DroolsEditorType.KEYWORD);
if (state.failed)
return null;
}
builder.append(k);
}
if (state.backtracking == 0) {
attribute = helper.start((DescrBuilder<?, ?>) as, AttributeDescrBuilder.class, builder.toString());
}
String value = "true";
if (input.LA(1) == DRL6Lexer.BOOL) {
Token bool = match(input, DRL6Lexer.BOOL, null, null, DroolsEditorType.KEYWORD);
if (state.failed)
return null;
value = bool.getText();
}
if (state.backtracking == 0) {
if (attribute != null) {
attribute.value(value);
attribute.type(AttributeDescr.Type.BOOLEAN);
}
}
} finally {
if (attribute != null) {
helper.end(AttributeDescrBuilder.class, attribute);
}
}
return attribute != null ? attribute.getDescr() : null;
}
use of org.drools.drl.ast.dsl.DescrBuilder in project drools by kiegroup.
the class DRL5Parser method lhsPatternBind.
/**
* lhsPatternBind := label?
* ( LEFT_PAREN lhsPattern (OR lhsPattern)* RIGHT_PAREN
* | lhsPattern )
*
* @param ce
* @return
* @throws RecognitionException
*/
@SuppressWarnings("unchecked")
private BaseDescr lhsPatternBind(PatternContainerDescrBuilder<?, ?> ce, final boolean allowOr) throws RecognitionException {
PatternDescrBuilder<?> pattern = null;
CEDescrBuilder<?, OrDescr> or = null;
BaseDescr result = null;
Token first = input.LT(1);
pattern = helper.start((DescrBuilder<?, ?>) ce, PatternDescrBuilder.class, null);
if (pattern != null) {
result = pattern.getDescr();
}
String label = null;
boolean isUnification = false;
if (input.LA(1) == DRL5Lexer.ID && input.LA(2) == DRL5Lexer.COLON && !helper.validateCEKeyword(1)) {
label = label(DroolsEditorType.IDENTIFIER_PATTERN);
if (state.failed)
return null;
} else if (input.LA(1) == DRL5Lexer.ID && input.LA(2) == DRL5Lexer.UNIFY && !helper.validateCEKeyword(1)) {
label = unif(DroolsEditorType.IDENTIFIER_PATTERN);
if (state.failed)
return null;
isUnification = true;
}
if (input.LA(1) == DRL5Lexer.LEFT_PAREN) {
try {
match(input, DRL5Lexer.LEFT_PAREN, null, null, DroolsEditorType.SYMBOL);
if (state.failed)
return null;
if (helper.validateCEKeyword(1)) {
failMismatchedTokenException();
// in case it is backtracking
return null;
}
lhsPattern(pattern, label, isUnification);
if (state.failed)
return null;
if (allowOr && helper.validateIdentifierKey(DroolsSoftKeywords.OR) && ce instanceof CEDescrBuilder) {
if (state.backtracking == 0) {
// this is necessary because of the crappy bind with multi-pattern OR syntax
or = ((CEDescrBuilder<DescrBuilder<?, ?>, OrDescr>) ce).or();
result = or.getDescr();
helper.end(PatternDescrBuilder.class, pattern);
helper.start(or, CEDescrBuilder.class, null);
// adjust real or starting token:
helper.setStart(or, first);
// remove original pattern from the parent CE child list:
((ConditionalElementDescr) ce.getDescr()).getDescrs().remove(pattern.getDescr());
// add pattern to the OR instead
or.getDescr().addDescr(pattern.getDescr());
}
while (helper.validateIdentifierKey(DroolsSoftKeywords.OR)) {
match(input, DRL5Lexer.ID, DroolsSoftKeywords.OR, null, DroolsEditorType.KEYWORD);
if (state.failed)
return null;
pattern = helper.start(or, PatternDescrBuilder.class, null);
// new pattern, same binding
lhsPattern(pattern, label, isUnification);
if (state.failed)
return null;
helper.end(PatternDescrBuilder.class, pattern);
}
}
match(input, DRL5Lexer.RIGHT_PAREN, null, null, DroolsEditorType.SYMBOL);
if (state.failed)
return null;
} finally {
if (or != null) {
helper.end(CEDescrBuilder.class, or);
} else {
helper.end(PatternDescrBuilder.class, pattern);
}
}
} else {
try {
lhsPattern(pattern, label, isUnification);
if (state.failed)
return null;
} finally {
helper.end(PatternDescrBuilder.class, pattern);
}
}
return result;
}
use of org.drools.drl.ast.dsl.DescrBuilder in project drools by kiegroup.
the class DRL6StrictParser method namedConsequence.
/**
* namedConsequence := DO LEFT_SQUARE ID RIGHT_SQUARE BREAK?
*/
private BaseDescr namedConsequence(CEDescrBuilder<?, ?> ce, NamedConsequenceDescrBuilder<?> namedConsequence) throws RecognitionException {
if (namedConsequence == null) {
namedConsequence = helper.start((DescrBuilder<?, ?>) ce, NamedConsequenceDescrBuilder.class, null);
}
try {
match(input, DRL6Lexer.ID, DroolsSoftKeywords.DO, null, DroolsEditorType.KEYWORD);
if (state.failed)
return null;
match(input, DRL6Lexer.LEFT_SQUARE, null, null, DroolsEditorType.SYMBOL);
if (state.failed)
return null;
Token label = match(input, DRL6Lexer.ID, null, null, DroolsEditorType.SYMBOL);
if (state.failed)
return null;
namedConsequence.name(label.getText());
match(input, DRL6Lexer.RIGHT_SQUARE, null, null, DroolsEditorType.SYMBOL);
if (state.failed)
return null;
} finally {
helper.end(NamedConsequenceDescrBuilder.class, namedConsequence);
}
return namedConsequence.getDescr();
}
use of org.drools.drl.ast.dsl.DescrBuilder in project drools by kiegroup.
the class DRL6StrictParser method intOrChunkAttribute.
/**
* intOrChunkAttribute := attributeKey ( DECIMAL | chunk_(_) )
* @param key
* @throws org.antlr.runtime.RecognitionException
*/
private AttributeDescr intOrChunkAttribute(AttributeSupportBuilder<?> as, String[] key) throws RecognitionException {
AttributeDescrBuilder<?> attribute = null;
try {
StringBuilder builder = new StringBuilder();
for (String k : key) {
if ("-".equals(k)) {
match(input, DRL6Lexer.MINUS, k, null, // part of the keyword
DroolsEditorType.KEYWORD);
if (state.failed)
return null;
} else {
match(input, DRL6Lexer.ID, k, null, DroolsEditorType.KEYWORD);
if (state.failed)
return null;
}
builder.append(k);
}
if (state.backtracking == 0) {
attribute = helper.start((DescrBuilder<?, ?>) as, AttributeDescrBuilder.class, builder.toString());
}
if (input.LA(1) == DRL6Lexer.LEFT_PAREN) {
String value = chunk(DRL6Lexer.LEFT_PAREN, DRL6Lexer.RIGHT_PAREN, -1);
if (state.failed)
return null;
if (state.backtracking == 0) {
if (attribute != null) {
attribute.value(safeStripDelimiters(value, "(", ")"));
attribute.type(AttributeDescr.Type.EXPRESSION);
}
}
} else {
String value = "";
if (input.LA(1) == DRL6Lexer.PLUS) {
Token sign = match(input, DRL6Lexer.PLUS, null, null, DroolsEditorType.NUMERIC_CONST);
if (state.failed)
return null;
value += sign.getText();
} else if (input.LA(1) == DRL6Lexer.MINUS) {
Token sign = match(input, DRL6Lexer.MINUS, null, null, DroolsEditorType.NUMERIC_CONST);
if (state.failed)
return null;
value += sign.getText();
}
Token nbr = match(input, DRL6Lexer.DECIMAL, null, null, DroolsEditorType.NUMERIC_CONST);
if (state.failed)
return null;
value += nbr.getText();
if (state.backtracking == 0) {
if (attribute != null) {
attribute.value(value);
attribute.type(AttributeDescr.Type.NUMBER);
}
}
}
} finally {
if (attribute != null) {
helper.end(AttributeDescrBuilder.class, attribute);
}
}
return attribute != null ? attribute.getDescr() : null;
}
Aggregations