Package org.drools.drl.parser.lang
Class DRL6Parser
java.lang.Object
org.drools.drl.parser.lang.AbstractDRLParser
org.drools.drl.parser.lang.DRL6Parser
- All Implemented Interfaces:
DRLParser
-
Field Summary
Fields inherited from class org.drools.drl.parser.lang.AbstractDRLParser
helper, input, state -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionattribute(AttributeSupportBuilder<?> as) attribute := salience | enabled | ( NO-LOOP | AUTO-FOCUS | LOCK-ON-ACTIVE | REFRACT | DIRECT ) BOOLEAN? | ( AGENDA-GROUP | ACTIVATION-GROUP | RULEFLOW-GROUP | DATE-EFFECTIVE | DATE-EXPIRES | DIALECT ) STRING | CALENDARS STRING (COMMA STRING)* | TIMER ( DECIMAL | chunk_(_) ) | DURATION ( DECIMAL | chunk_(_) ) The above syntax is not quite how this is parsed, because the soft keyword is determined by look-ahead and passed on to one of the x-Attribute methods (booleanAttribute, stringAttribute, stringListAttribute, intOrChunkAttribute) which will actually gobble the tokens.chunk(int leftDelimiter, int rightDelimiter, int location) Matches a chunk started by the leftDelimiter and ended by the rightDelimiter.protected final PackageDescrMatches a conditional expressionMatches a conditional || expressiondeclare := DECLARE | (ENTRY-POINT) => entryPointDeclaration | (WINDOW) => windowDeclaration | (TRAIT) => typeDeclaration (trait) | (ENUM) => enumDeclaration | typeDeclaration (class) ENDvoiddefaultConsequence := THEN chunkentryPointDeclaration := ENTRY-POINT stringId annotation* ENDfunction := FUNCTION type? ID parameters(typed) chunk_{_}protected StringgetConsequenceCode(int first) protected LanguageLevelOptionglobalStatement := GLOBAL type IDimportStatement := IMPORT ((FUNCTION|STATIC)? qualifiedIdentifier ((DOT STAR)? |(ACC|ACCUMULATE) qualifiedIdentifier ID)protected BaseDescrlhsExists(CEDescrBuilder<?, ?> ce, boolean allowOr) lhsExists := EXISTS ( (LEFT_PAREN (or_key|and_key))=> lhsOr // prevents '((' for prefixed and/or | LEFT_PAREN lhsOr RIGHT_PAREN | lhsPatternBind )protected BaseDescrlhsForall(CEDescrBuilder<?, ?> ce) lhsForall := FORALL LEFT_PAREN lhsPatternBind+ RIGHT_PARENprotected BaseDescrlhsNot(CEDescrBuilder<?, ?> ce, boolean allowOr) lhsNot := NOT ( (LEFT_PAREN (or_key|and_key))=> lhsOr // prevents '((' for prefixed and/or | LEFT_PAREN lhsOr RIGHT_PAREN | lhsPatternBind )booleanmismatchIsMissingToken(org.antlr.runtime.TokenStream input, int[] follow) booleanmismatchIsUnwantedToken(org.antlr.runtime.TokenStream input, int ttype, String text) voidnamedConsequence := THEN LEFT_SQUARE ID RIGHT_SQUARE chunkParses a package statement and returns the name of the package or null if none is defined.Matches a qualified identifier qualifiedIdentifier := ID ( DOT ID )*query(PackageDescrBuilder pkg) query := QUERY stringId parameters? annotation* lhsExpression ENDprotected org.antlr.runtime.TokenrecoverFromMismatchedToken(org.antlr.runtime.TokenStream input, int ttype, String text, int[] follow) Attempt to recover from a single missing or extra token.rule(PackageDescrBuilder pkg) rule := RULE stringId (EXTENDS stringId)? annotation* attributes? lhs? rhs ENDstatement := importStatement | globalStatement | declare | rule | ruleAttribute | function | query ;type()Matches a type name type := ID typeArguments? ( DOT ID typeArguments? )* (LEFT_SQUARE RIGHT_SQUARE)*Matches a type argument typeArguments := QUESTION (( EXTENDS | SUPER ) type )? | type ;Matches type arguments typeArguments := LESS typeArgument (COMMA typeArgument)* GREATERtypeDeclaration(DeclareDescrBuilder ddb, boolean isTrait) typeDeclaration := [TYPE] qualifiedIdentifier (EXTENDS qualifiedIdentifier)? annotation* field* ENDunitStatement := UNIT qualifiedIdentifier SEMICOLON?windowDeclaration := WINDOW ID annotation* lhsPatternBind ENDMethods inherited from class org.drools.drl.parser.lang.AbstractDRLParser
compilationUnit, compilationUnit, disableEditorInterface, enableEditorInterface, getEditorInterface, getErrorMessages, getErrors, getHelper, hasErrors, reportError, reportErrorMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.drools.drl.parser.lang.DRLParser
compilationUnit, compilationUnit, disableEditorInterface, enableEditorInterface, getEditorInterface, getErrorMessages, getErrors, hasErrors, reportError, reportError
-
Constructor Details
-
DRL6Parser
public DRL6Parser(org.antlr.runtime.TokenStream input)
-
-
Method Details
-
getLanguageLevel
- Specified by:
getLanguageLevelin classAbstractDRLParser
-
compilationUnit
protected final PackageDescr compilationUnit(PackageDescrBuilder pkg) throws org.antlr.runtime.RecognitionException - Specified by:
compilationUnitin classAbstractDRLParser- Throws:
org.antlr.runtime.RecognitionException
-
packageStatement
public String packageStatement(PackageDescrBuilder pkg) throws org.antlr.runtime.RecognitionException Parses a package statement and returns the name of the package or null if none is defined. packageStatement := PACKAGE qualifiedIdentifier SEMICOLON?- Returns:
- the name of the package or null if none is defined
- Throws:
org.antlr.runtime.RecognitionException
-
unitStatement
public UnitDescr unitStatement(PackageDescrBuilder pkg) throws org.antlr.runtime.RecognitionException unitStatement := UNIT qualifiedIdentifier SEMICOLON?- Throws:
org.antlr.runtime.RecognitionException
-
statement
statement := importStatement | globalStatement | declare | rule | ruleAttribute | function | query ;- Throws:
org.antlr.runtime.RecognitionException
-
importStatement
public ImportDescr importStatement(PackageDescrBuilder pkg) throws org.antlr.runtime.RecognitionException importStatement := IMPORT ((FUNCTION|STATIC)? qualifiedIdentifier ((DOT STAR)? |(ACC|ACCUMULATE) qualifiedIdentifier ID)- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
globalStatement
public GlobalDescr globalStatement(PackageDescrBuilder pkg) throws org.antlr.runtime.RecognitionException globalStatement := GLOBAL type ID- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
declare
declare := DECLARE | (ENTRY-POINT) => entryPointDeclaration | (WINDOW) => windowDeclaration | (TRAIT) => typeDeclaration (trait) | (ENUM) => enumDeclaration | typeDeclaration (class) END- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
entryPointDeclaration
public EntryPointDeclarationDescr entryPointDeclaration(DeclareDescrBuilder ddb) throws org.antlr.runtime.RecognitionException entryPointDeclaration := ENTRY-POINT stringId annotation* END- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
windowDeclaration
public WindowDeclarationDescr windowDeclaration(DeclareDescrBuilder ddb) throws org.antlr.runtime.RecognitionException windowDeclaration := WINDOW ID annotation* lhsPatternBind END- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
enumDeclaration
public EnumDeclarationDescr enumDeclaration(DeclareDescrBuilder ddb) throws org.antlr.runtime.RecognitionException - Throws:
org.antlr.runtime.RecognitionException
-
typeDeclaration
public TypeDeclarationDescr typeDeclaration(DeclareDescrBuilder ddb, boolean isTrait) throws org.antlr.runtime.RecognitionException typeDeclaration := [TYPE] qualifiedIdentifier (EXTENDS qualifiedIdentifier)? annotation* field* END- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
function
public FunctionDescr function(PackageDescrBuilder pkg) throws org.antlr.runtime.RecognitionException function := FUNCTION type? ID parameters(typed) chunk_{_}- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
query
query := QUERY stringId parameters? annotation* lhsExpression END- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
rule
rule := RULE stringId (EXTENDS stringId)? annotation* attributes? lhs? rhs END- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
attribute
attribute := salience | enabled | ( NO-LOOP | AUTO-FOCUS | LOCK-ON-ACTIVE | REFRACT | DIRECT ) BOOLEAN? | ( AGENDA-GROUP | ACTIVATION-GROUP | RULEFLOW-GROUP | DATE-EFFECTIVE | DATE-EXPIRES | DIALECT ) STRING | CALENDARS STRING (COMMA STRING)* | TIMER ( DECIMAL | chunk_(_) ) | DURATION ( DECIMAL | chunk_(_) ) The above syntax is not quite how this is parsed, because the soft keyword is determined by look-ahead and passed on to one of the x-Attribute methods (booleanAttribute, stringAttribute, stringListAttribute, intOrChunkAttribute) which will actually gobble the tokens.- Returns:
-
lhsExists
protected BaseDescr lhsExists(CEDescrBuilder<?, ?> ce, boolean allowOr) throws org.antlr.runtime.RecognitionExceptionlhsExists := EXISTS ( (LEFT_PAREN (or_key|and_key))=> lhsOr // prevents '((' for prefixed and/or | LEFT_PAREN lhsOr RIGHT_PAREN | lhsPatternBind )- Parameters:
ce-- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
lhsNot
protected BaseDescr lhsNot(CEDescrBuilder<?, ?> ce, boolean allowOr) throws org.antlr.runtime.RecognitionExceptionlhsNot := NOT ( (LEFT_PAREN (or_key|and_key))=> lhsOr // prevents '((' for prefixed and/or | LEFT_PAREN lhsOr RIGHT_PAREN | lhsPatternBind )- Parameters:
ce-- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
lhsForall
lhsForall := FORALL LEFT_PAREN lhsPatternBind+ RIGHT_PAREN- Parameters:
ce-- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
defaultConsequence
defaultConsequence := THEN chunk- Parameters:
rule-
-
namedConsequence
namedConsequence := THEN LEFT_SQUARE ID RIGHT_SQUARE chunk- Parameters:
rule-
-
getConsequenceCode
-
type
Matches a type name type := ID typeArguments? ( DOT ID typeArguments? )* (LEFT_SQUARE RIGHT_SQUARE)*- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
typeArguments
Matches type arguments typeArguments := LESS typeArgument (COMMA typeArgument)* GREATER- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
typeArgument
Matches a type argument typeArguments := QUESTION (( EXTENDS | SUPER ) type )? | type ;- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
qualifiedIdentifier
Matches a qualified identifier qualifiedIdentifier := ID ( DOT ID )*- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
conditionalExpression
Matches a conditional expression- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
conditionalOrExpression
Matches a conditional || expression- Returns:
- Throws:
org.antlr.runtime.RecognitionException
-
chunk
Matches a chunk started by the leftDelimiter and ended by the rightDelimiter. -
recoverFromMismatchedToken
protected org.antlr.runtime.Token recoverFromMismatchedToken(org.antlr.runtime.TokenStream input, int ttype, String text, int[] follow) throws org.antlr.runtime.RecognitionException Attempt to recover from a single missing or extra token. EXTRA TOKEN LA(1) is not what we are looking for. If LA(2) has the right token, however, then assume LA(1) is some extra spurious token. Delete it and LA(2) as if we were doing a normal match(), which advances the input. MISSING TOKEN If current token is consistent with what could come after ttype then it is ok to "insert" the missing token, else throw exception For example, Input "i=(3;" is clearly missing the ')'. When the parser returns from the nested call to expr, it will have call chain: stat -> expr -> atom and it will be trying to match the ')' at this point in the derivation: => ID '=' '(' INT ')' ('+' atom)* ';' ^ match() will see that ';' doesn't match ')' and report a mismatched token error. To recover, it sees that LA(1)==';' is in the set of tokens that can follow the ')' token reference in rule atom. It can assume that you forgot the ')'.- Throws:
org.antlr.runtime.RecognitionException
-
mismatchIsUnwantedToken
-
mismatchIsMissingToken
public boolean mismatchIsMissingToken(org.antlr.runtime.TokenStream input, int[] follow)
-