bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Do not allow identifiers that start with a negative number.


From: Paul Eggert
Subject: Re: [PATCH] Do not allow identifiers that start with a negative number.
Date: Sat, 08 Jan 2011 12:20:55 -0800
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101208 Thunderbird/3.1.7

On 01/08/2011 11:59 AM, Joel E. Denny wrote:
> On Sat, 8 Jan 2011, Paul Eggert wrote:
> 
>> On 01/08/2011 10:29 AM, Joel E. Denny wrote:
>>> id       -|({letter}|-({letter}|-))({letter}|[-0-9])*
>>
>> Sorry, I guess I don't understand the point of this.
>> Why should "---39---" be an identifier?
> 
> I thought we were adding the simple rule that an identifier cannot begin 
> with a negative integer.  "---39---" does not begin with a negative 
> integer.

That depends on how it is parsed.  If we are mentally parsing
it using the rules of C, "---39---" starts with a "--" token,
and then we have the same problem as before.

>> And if so,
>> why should "--39--" *not* be an identifier?
> 
> Who says it shouldn't?

The rule you proposed above says it shouldn't.

>> Can someone remind me why we're doing this?
> 
> It's consistent with other identifiers in Bison.

Sorry, now I'm lost.  The rule for "id" *is* the rule for
identifiers in Bison, surely.

What I'm asking is, why did we change the rule to allow "-"
in identifiers, and to embed these identifiers into C and
Java code, when this causes obvious problems?
The issue that started this thread is one example of
such a problem: the problem of the above suggestion (which
apparently is buggy) is another.

Perhaps we can take a step back here.  Why is it important
that we allow the syntax $B in C code, where B is a Bison
identifier?  If Bison identifiers are not the same as C
identifiers, the resulting code will be hard to explain
and to read.  Wouldn't it be better to require an escape
syntax for these identifiers? Something like ${B}, or $"B",
or $[B], or $(B), or etc.?  That will make it more obvious
to the reader where the Bison identifier stops and the C code
starts up again.

For example, when suppose we have the following code
in a Bison + C parser:

    $x--;

Most programmers would expect this to subtract one from $x,
not to compute the value of the identifier "x--" and then
discard it.  If a programmer really wants to name their
identifier "x--" they should write "${x--}" or something
like that.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]