[antlr-interest] Non-LL(*) conflict distinguishing integer and double
Terence Parr
parrt at cs.usfca.edu
Thu Jun 21 10:25:35 PDT 2012
Have you tried using AW's ambiguity viewer? it shows the ambiguous paths through the syntax diagram.
T
On Jun 21, 2012, at 9:49 AM, Brad Cox wrote:
> Could someone help me find the conflict here? I'm pretty sure its complaining about NNNN vs NNNN.NNNN but danged if I can see it.
>
> A pruned-down fragment of the real grammar:
>
> grammar Frag;
>
> options
> {
> // backtrack=true;
> // memoize = true;
> output=AST;
> }
> tokens
> {
> ABS_TOK='abs';
> ACTION_TOK='action';
> ALLOF_TOK='allOf';
> ALLOFALL_TOK='allOfAll';
> ALLOFANY_TOK='allOfAny';
> ANYOF_TOK='anyOf';
> ANYOFALL_TOK='anyOfAll';
> ANYOFANY_TOK='anyOfAny' ;
> ANYURI_TOK= 'anyUriExpr';
> ATLEASTONEMENBEROF_TOK='atLeastOneMemberOf';
> BAG_TOK='bag';
> BASE64_TOK= 'base64Expr';
> BOOL_TOK= 'boolean';
> CONCATENATE_TOK='concatenate';
> DATE_TOK= 'dateExpr';
> DATETIME_TOK= 'dateTimeExpr';
> DAYTIMEDURATION_TOK= 'dayTimeDurationExpr';
> DECIMAL_TOK='decimal';
> DENY_TOK = 'deny';
> DEREF_TOK='deref';
> DOUBLE_TOK= 'double';
> ENVIRONMENT_TOK='environment';
> FALSE_TOK='false';
> FLR_TOK='flr';
> HEXBINARY_TOK= 'hexBinaryExpr';
> INTEGER_TOK= 'integerExpr';
> INTERSECTION_TOK='intersection';
> ISIN_TOK= 'isIn';
> MAP_TOK='map';
> MOD_TOK='mod';
> NODECOUNT_TOK='nodeCount';
> NODEEQUAL_TOK='nodeEqual';
> NODEMATCH_TOK='nodeMatch';
> NOF_TOK='nof';
> NORMALIZESPACE_TOK='normalizeSpace' ;
> NORMALIZETOLOWERCASE_TOK='normalizeToLowerCase' ;
> NOT_TOK='not';
> ONEANDONLY_TOK='oneAndOnly';
> PERMIT_TOK='permit';
> RANGEOP_TOK='rangeOp';
> REGEXMATCH_TOK='regexpMatch';
> RESOURCE_TOK='resource';
> RFC822NAME_TOK= 'rfc822NameExpr';
> RND_TOK='rnd';
> SETEQUALS_TOK='setEquals';
> SIZE_TOK='size';
> STRING_TOK= 'stringExpr';
> SUBJECT_TOK='subject';
> SUBSET_TOK='subset';
> TIME_TOK= 'timeExpr';
> TRUE_TOK='true';
> UNION_TOK='union';
> X500NAME_TOK= 'x500NameExpr';
> YEARMONTHDURATION_TOK= 'yearMonthDurationExpr';
> IF_TOK='if';
> }
>
> boolExpr
> : TRUE_TOK
> | FALSE_TOK
> | BOOL_TOK '(' ATTRIBUTE ')'
> | '(' ( integerExpr | doubleExpr) ( '==' | '>=' | '>' | '<' | '<=' ) ( integerExpr | doubleExpr) ')'
> ;
>
> integerExpr
> : INTEGER_CONSTANT
> | INTEGER_TOK '(' stringExpr ')'
> // | '(' integerExpr ( '+' | '-' | '*' | '/' ) integerExpr ')'
> | (MOD_TOK | ABS_TOK ) '(' integerExpr ')'
> | SIZE_TOK '(' anyBag ')'
> | NODECOUNT_TOK '(' stringExpr ')'
> ;
>
> integerBag
> : INTEGER_TOK STRING_LIST
> | BAG_TOK '(' integerExpr ( ',' integerExpr)+ ')'
> | INTERSECTION_TOK '(' integerBag ',' integerBag ')'
> | UNION_TOK '(' integerBag ',' integerBag ')'
> ;
>
> doubleExpr
> : DOUBLE_CONSTANT
> | DOUBLE_TOK '(' stringExpr ')'
> // | '(' doubleExpr ( '+' | '-' | '*' | '/') doubleExpr ')'
> | ( MOD_TOK | ABS_TOK | RND_TOK | FLR_TOK ) '(' doubleExpr ')'
> ;
>
> doubleBag
> : DOUBLE_TOK STRING_LIST
> | BAG_TOK '(' doubleExpr ( ',' doubleExpr)+ ')'
> /*
> | INTERSECTION_TOK '(' dayTimeDurationBag ',' dayTimeDurationBag ')'
> | UNION_TOK '(' dayTimeDurationBag ',' dayTimeDurationBag ')'
> */
> ;
> stringExpr
> : STRING_CONSTANT
> | ATTRIBUTE
> | (NORMALIZESPACE_TOK | NORMALIZETOLOWERCASE_TOK) '(' stringExpr ')'
> | CONCATENATE_TOK '(' stringExpr ',' stringExpr ')'
> ;
>
> anyBag
> : ( doubleBag | integerBag )
> ;
>
> COMMENT
> : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
> | '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
> ;
> WHITESPACE
> : ( ' ' | '\t' | '\r' | '\n' )+ {$channel=HIDDEN;}
> | COMMENT
> ;
>
> fragment ATTRIBUTE
> : ( SUBJECT_TOK | RESOURCE_TOK | ACTION_TOK | ENVIRONMENT_TOK) ('.' IDENTIFIER )+
> ;
>
> fragment IDENTIFIER
> : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
> ;
>
> fragment STRING_LIST
> : '(' STRING_CONSTANT ( ',' STRING_CONSTANT )* ')'
> ;
>
> fragment STRING_CONSTANT
> : '"' ( ESC_SEQ | ~('\\'|'"') )* '"'
> ;
>
> fragment INTEGER_CONSTANT
> : (DIGIT)+
> ;
>
> fragment DOUBLE_CONSTANT
> : INTEGER_CONSTANT? '.' INTEGER_CONSTANT? EXPONENT
> // | INTEGER_CONSTANT EXPONENT
> ;
>
> fragment DIGIT
> : '0'..'9'
> ;
> fragment EXPONENT
> : ('e'|'E') ('+'|'-')? ('0'..'9')+
> ;
>
> fragment ESC_SEQ
> : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
> // | UNICODE_ESC
> | OCTAL_ESC
> ;
>
> fragment OCTAL_ESC
> : '\\' ('0'..'3') ('0'..'7') ('0'..'7')
> | '\\' ('0'..'7') ('0'..'7')
> | '\\' ('0'..'7')
> ;
> /*
> fragment UNICODE_ESC
> : '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
> ;
> */
> fragment SIGN
> : ('+'|'-')
> ;
>
> fragment CHAR
> : '\'' ( ESC_SEQ | ~('\''|'\\') ) '\''
> ;
>
More information about the antlr-interest
mailing list