Still waiting for some info on this if anyone has any.
Thanks
Jeff
On Jan 27, 2010, at 1:22 PM, Jeff Wilcox wrote:
> Yes, I agree with you, and in general this is how my parsers have worked.
> But there are a couple cases where disabling lexer rules is useful and/or
> necessary. Disable keywords that exist only in newer versions of the
> language which could be identifiers in older versions for example; there are
> other semi tedious ways around that with predicates but it should not be
> necessary.
>
> This case though involves a table section of characters, symbols and numbers.
> So a N column row of N discrete symbols could otherwise be a single number,
> a single identifier, a number plus an identifier, etc. So without special
> casing the lexer, the easiest thing was to accept possible candidates, suck
> it all into a string a re-parse in the semantic analyzer. But that feels
> like the wrong solution.
>
> In general though, it seems like there is a bug in ANLTR's treatment of gated
> semantic predicates in the lexer. It does not work unless there are other
> alternatives in the rule.
>
> Is there any other way to completely turn off a rule in the lexer (without
> throwing a FPE)?
>
> Thanks,
> Jeff
>
>
> On Jan 26, 2010, at 8:58 PM, William B. Clodius wrote:
>> Generally don't try to be too restrictive with your lexer and parser. This
>> sort of context dependence is more naturally handled in the semantic
>> analysis. In particular error reporting is much better if you accept things
>> that are ultimately illegal in the lexer and parser and determine whether
>> they are they are illegal in the semantic analysis. Instead of a minimal
>> message such as "Illegal token" you can report "Illegal token for the table
>> structure see constraint # in the language definition", or "Token is not one
>> of the set of ..."
>>
>> On Jan 26, 2010, at 7:52 AM, Jeff Wilcox wrote:
>>
>>> Hi,
>>>
>>> I have a special area in this language that has symbols within a table
>>> structure that are normally used in other tokens in other areas of the
>>> language (like a couple digits, a couple letters and a couple symbols). So
>>> I am trying to setup the lexer to accept these table tokens only when in a
>>> table. Based on what I have been able to dig up, I believe gated semantic
>>> predicates are a valid way to disable rules in the lexer. However, I am
>>> seeing issues with this with ANTLR 3.2 and the java language target.
>>>
>>> So I expected a lexer rules like this to do the trick:
>>>
>>> Level0 : {inTable}?=> '0';
>>>
>>> But that actually creates a very strange loop when inTable is false. I
>>> basically throws a FailedPredicateException (which I would not have
>>> expected for a gated predicate) and then retries the same token with the
>>> same rule, obviously resulting in an infinite loop.
>>>
>>> Can someone clarify whether this is allowed and if so whether there is some
>>> trick to using it? I am stumped.
>>>
>>> Thanks
>>> Jeff
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--
You received this message because you are subscribed to the Google Groups
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en.