C. Derx
C. Derx

Reputation: 326

ANTLR4: parse number as identifier instead as numeric literal

I have this situation, of having to treat integer as identifier.
Underlying language syntax (unfortunately) allows this.

grammar excerpt:

grammar Alang;

...

NLITERAL   : [0-9]+ ;
...
IDENTIFIER : [a-zA-Z0-9_]+ ;

Example code, that has to be dealt with:

/** declaration block **/

Method 465;
...

In above code example, because NLITERAL has to be placed before IDENTIFIER, parser picks 465 as NLITERAL.

What is a good way to deal with such a situations?
(Ideally, avoiding application code within grammar, to keep it runtime agnostic)

I found similar questions on SO, not exactly helpful though.

Upvotes: 0

Views: 168

Answers (1)

sepp2k
sepp2k

Reputation: 370357

There's no good way to make 465 produce either an NLITERAL token or an IDENTIFIER token depending on context (you might be able to use lexer modes, but that's probably not a good fit for your needs).

What you can do rather easily though, is to allow NLITERALs in addition to IDENTIFIERS in certain places. So you could define a parser rule

methodName: IDENTIFIER | NLITERAL;

and then use that rule instead of IDENTIFIER where appropriate.

Upvotes: 3

Related Questions