[antlr-interest] To match or not to match

Raphael Reitzig r_reitzi at cs.uni-kl.de
Thu Jun 26 12:20:33 PDT 2008


Hi!

I got it.

ANTLRWorks' Interpreter is not able to backtrack. In Debugging mode, it
works completely satisfying.

Now I know what to look for, it was a matter of minutes to google that
piece of information. Doh.

Regards

Raphael

On Tue, 24 Jun 2008 11:26:30 +0200, Raphael Reitzig <r_reitzi at cs.uni-kl.de>
wrote:
> Hello again!
> 
> I think I got a couple of steps farther. However, some behaviour of ANTLR
> is hazarding me.
> 
> Please consider the (updated) grammer at
> http://raphael.frhk.de/files/property.g . Note that for rule property,
the
> first symbols of all alternatives are pairwise different. The grammar
> works
> nice without any additional stuff, i.e. reading the following inputs
> 
> (1) : (5*(x+2))=0
> (2) : [x=5 | [y=3 U z=5]]
> 
> Now try uncommenting line 3, turning backtracking on. I would expect
> nothing to change, for backtracking wasn't necessary at all.
> However, neither input is recognized using backtracking. To be more
> precise, ANTLR failes in evaluating the (implicit) syntactic predicates.
> This is unsettling, because it proved seconds earlier that there is
> exactly
> one alternativ of rule property matching each input!
> 
> Is this, now, a bug in ANTLR or am I, still, too unskilled? ?(
> 
> Sunny German greetings
> 
> Raphael
> 
> On Fri, 20 Jun 2008 17:19:33 +0200, Raphael Reitzig
> <r_reitzi at cs.uni-kl.de>
> wrote:
>> Apparantly, attachments won't work. Sorry for that.
>>
>> You can find the grammar file here:
>> http://raphael.frhk.de/files/property.g
>>
>> For those afraid of viruses or such:
>>
>> *****
>>
>> grammar property;
>>
>> start
>> 	:	property EOF;
>>
>> property //options { backtrack=true; memoize=true; }
>> 	:	NOT '(' property ')'
>> 	|	( ALL | GLOB | SOME | FIN | NEXT)+ '(' property ')'
>> 	|	'(' property ( (AND | OR) property )+ ')'
>> 	|	('(' atom ')')  => '(' atom ')'
>> 	|	( atom ) => atom;
>>
>> atom
>> 	:	term (EQ | NEQ | LES | GRT | LEQ | GEQ) term;
>>
>> term
>> 	:	'(' term (PLUS | MINUS | MULT| DIV | MOD) term ')'
>> 	|	(MIN | MAX) '(' term ',' term ')'
>> 	|	(MINUS)? INT
>> 	|	(MINUS)? VAR
>> 	|	MINUS '(' term ')';
>>
>> INT 	:	('0'..'9')+;
>> VAR 	:	('a'..'z') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*;
>>
>> ALL	:	'A';
>> SOME 	:	'E';
>> GLOB	:	'G';
>> FIN 	:	'F';
>> NEXT		:	'X';
>>
>> UNTIL 	:	'U';
>> IMPL 	:	'->';
>> AND 	:	'&';
>> OR 	:	'|';
>> NOT 	:	'!';
>>
>> PLUS 	:	'+';
>> MINUS 	:	'-';
>> MULT 	:	'*';
>> DIV 	:	'/';
>> MOD 	:	'%';
>>
>> MIN 	:	'Min';
>> MAX 	:	'Max';
>>
>> EQ 	:	'=';
>> NEQ 	:	'!=';
>> LES 	:	'<';
>> GRT 	:	'>';
>> LEQ 	:	 '<=';
>> GEQ 	:	 '>=';
>>
>> WS 	:	(' ' | '\t' | '\n' | '\r')+ { skip(); };
>>
>> *****
>>
>> On Fri, 20 Jun 2008 14:52:52 +0200, Raphael Reitzig
>> <r_reitzi at cs.uni-kl.de>
>> wrote:
>>> Hello!
>>>
>>> I am quite a novice to ANTLR as well as language parsing at all, so
>>> perhaps
>>> I dug in a bit to quickly (got The Book the day before yesterday).
>> Anyway,
>>> I try to build a grammar I need for a job at university and get some
>>> strange results I do not understand. I hope file appendings work on the
>>> list.
>>>
>>> Using ANTLRWorks' Interpreter, I try to match the following sentence
>>> against rule 'atom':
>>>
>>> Min(4,3)=x
>>>
>>> It works perfectly. It should match rule 'property' as well (last
>>> alternative: 'property : ( atom ) => atom;'), but trying that yields
>>> FailedPredicateException. (I (think I) need the predicates to help
> LL(*)
>>> along with multiple '('s in a row.) Exactly why does the predicate
>> become
>>> false _if_ the checked sequence _is_ an atom?
>>>
>>> Matching Min(4,3) alone against 'term' I expect to work, for it did,
>>> matching the statement given above against 'atom'. However, it fails
>>> without exception, aparently not recognizing ',' correctly.
>>>
>>> I would not be surprised I if made a (simple?) systematic error. Can
> you
>>> help me?
>>>
>>> Greetings from Germany
>>>
>>> Raphael Reitzig



More information about the antlr-interest mailing list