[antlr-interest] Problems parsing numbers

Jim Idle jimi at temporal-wave.com
Wed Oct 24 09:18:04 PDT 2007


The interpreter mode may be masking lexing errors that are thrown out. Try
the debug mode and check the output tab for any runtime errors. Lexer
recovery involves just consuming the character and seeing if the next one
makes any sense - there is not much else you can do really. If you don't
look for (and intercept if you are expecting the lexer to throw errors) the
errors, you may be just missing them :-). Debug mode is your friend here.

Jim


> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Bolek Vrany
> Sent: Wednesday, October 24, 2007 5:31 AM
> To: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Problems parsing numbers
> 
> I simplified the grammer to
> 
> grammar SquareD;
> 
> rule	:	expr+;
> 
> expr	:	litExpr | valExpr | padExpr;
> 
> litExpr	:	LITERAL ;
> valExpr	:	VALFEATID;
> padExpr	:	PAD;
> 
> fragment	// Any character allowed in identifiers
> IDCHAR	:	('a'..'z'|'A'..'Z'|'_'|'0'..'9');
> 
> VALFEATID	:	// Value or short form feature id. It can be either
a
> number
> or an alphanumeric sequence
> 			IDCHAR+;
> 
> fragment
> DIGIT	: 	'0'..'9';
> 
> LITERAL	: 	// This is the numerical literal
> 		'$' DIGIT+ '$'
> 	|	'$' DIGIT+ '.' DIGIT+ '$'
> 	;
> 
> PAD	:	'{PAD}';
> 
> // Newline and whitespace
> NEWLINE	:	'\r'? '\n' ;
> WS  	:	(' '|'\t'|'\n'|'\r')+ {skip();} ;
> 
> and tried to interpret in ANTLRWorks the following
> $12345.567890$ - I get the correct tree here (a signle litExpr)
> 1c234 - I get the correct tree here (a single valExpr)
> $1c2345.567890$ - I expect to get a single error but instead I got two
> nodes, having valExpr $1c2345 and .567890. Neither of them is a valid
> valExpr
> 1c2345.567890 - the same behaviour as for $1c2345.567890$ is expected
> and the same problem is observed.
> 
> Austin Hastings wrote:
> > You are saying $c...$, but the LITERAL is supposed to be DIGIT+ which
> > doesn't include 'c'. What do you expect to happen for that input?
> >
> > =Austin
> >
> > Bolek Vrany wrote:
> >> Hello,
> >>
> >> I'm using ANTLR for just a few days. I need to parse a language that
> has
> >> numerical literals enclosed in $$ like $3.14$. It also allows
> >> identifiers to start with a digit, so 017 is a valid identifier. I
> >> started with creating the grammar
> >>
> >> grammar Test;
> >>
> >> rule    :    expr+;
> >>
> >> expr    :    LITERAL
> >>     |     VALFEATID
> >>     |     PAD
> >>     ;
> >>
> >> //condition    :    // A single condition
> >> //            (VALFEATID | LONGFEATID) ('=' | '>' | '>=' | '<' |
> '<='
> >> | '<>')
> >> (VALFEATID | LONGFEATID | LITERAL | PAD);
> >>
> >> fragment    // Any character allowed in identifiers
> >> IDCHAR    :    ('a'..'z'|'A'..'Z'|'_'|'0'..'9');
> >>
> >> VALFEATID    :    // Value or short form feature id. It can be
> either
> >> a number
> >> or an alphanumeric sequence
> >>             IDCHAR+ ;
> >>        //LONGFEATID  :    // Long form of feature reference, type
> >> 01[A].C3G
> >> //        IDCHAR IDCHAR '[' ('A' | 'P' | 'B' | 'E' | 'C' | 'I' | 'L'
> |
> >> 'S')
> >> '].' VALFEATID ;
> >>
> >> fragment       DIGIT    :     '0'..'9';
> >>
> >> LITERAL    :     // This is the numerical literal
> >>         '$' DIGIT+ '$'
> >>     |    '$' DIGIT+ '.' DIGIT+ '$'
> >>     ;
> >>     PAD    :    '{PAD}';       // Newline and whitespace   NEWLINE
> >> :    '\r'? '\n' ;
> >> WS      :    (' '|'\t'|'\n'|'\r')+ {skip();} ;
> >>     but I got into problems. When I try to parse $c12345.67890" and
> >> try to
> >> interpret it inside ANTLRWorks, I end up with a rule having two
> >> expressions, the first being $c12345 and the other one .67890 I
> don't
> >> know why.
> >>
> >> I also tried to copy the first example in The definitive ANTLR
> reference
> >> book and it behaved much like this but somehow miraculously stopped
> to
> >> at once. Don't know if it is an installation issue.
> >>
> >> I use ANTLR 3.0.1, ANTRLWorks 1.1.3, StringTemplate 3.1b1, XJLibrary
> 2.0
> >> and Java 1.6.0_03.
> >>
> >> Thanks for your help in advance
> >>
> >>
> >>
> >
> >
> >
> 
> 
> 




More information about the antlr-interest mailing list