[antlr-interest] Multiple lexer tokens per rule
Junkman
j at junkwallah.org
Tue Jun 8 10:49:31 PDT 2010
In case anyone reads this thread again, Antlr wiki has a better example
for emitting multiple tokens:
http://www.antlr.org/wiki/pages/viewpage.action?pageId=3604497
Cheers.
Junkman wrote:
> Ken Williams wrote:
>>
>> On 6/4/10 4:16 PM, "Junkman" <j at junkwallah.org> wrote:
>>> The way nextToken() is overriden, it first returns the token matched by
>>> the rule, and subsequently any additional queued token before matching a
>>> new token in the input stream.
>> Maybe I'm being dense here, but I don't think that's what it's doing:
>>
>> public Token nextToken() {
>> return tokenQueue.isEmpty() ? super.nextToken() : tokenQueue.poll();
>> }
>>
>> If tokenQueue() is non-empty, it always uses it. On the *next* invocation,
>> when it's empty, it will call super.nextToken().
>>
>>
>
> Think of tokens generated by a single rule invocation as a set. The set
> is generated in/under "super.nextToken()", AFTER the queue has been
> tested to be empty. Among the tokens in the set, the "matching" token
> is returned first, because that's what Lexer.nextToken()
> ("super.nextToken()") returns.
>
> If that's still not clear, I suggest you put the generated lexer under a
> debugger (like Jim suggested in another thread ;-) and trace it from
> nextToken() - will give you better explanation than my verbiage.
>
> Best regards.
>
More information about the antlr-interest
mailing list