Обсуждение: RE: [HACKERS] Postgres' lexer

Поиск
Список
Период
Сортировка

RE: [HACKERS] Postgres' lexer

От
"Ansley, Michael"
Дата:
>> "Ansley, Michael" <Michael.Ansley@intec.co.za> writes:
>> > I have a bit of a problem with reading this: a > -2 correctly,
>> > while not reading this: a>-2 correctly, because that implies that you
are
>> > using the space as a precedence operator.  This should be done by
braces.
>> 
>> Not at all: this is a strictly lexical issue (where do we divide the
>> input into tokens) and whitespace has been considered a reasonable
>> lexical separator for years.  Furthermore, SQL already depends on
>> whitespace to separate tokens that are made of letters and digits.
>> You can't spell "SELECT" as "SEL ECT", nor "SELECT f1" as "SELECTf1",
>> nor does "SELECT 1 2;" mean "SELECT 12;".  So it seems perfectly
>> reasonable to me to use whitespace to separate operator names when
>> there would otherwise be ambiguity about what's meant.
Point taken.  So, if the spaces are used, then a>-2 is not the same as a>-
2.  The latter should then generate an error, right?

<snip>

>> I think it would be a really bad idea for the lexical 
>> analysis to depend on whether or not particular operator names 
>> are defined, for the same reasons that lexical analysis of word 
>> tokens doesn't depend on whether
>> there are keywords/table names/field names that match those tokens.
>> You get into circularity problems very quickly if you do that.
>> Language designers learned not to do that in the sixties...
Yes.  Another point taken.

MikeA


Re: [HACKERS] Postgres' lexer

От
Tom Lane
Дата:
> Point taken.  So, if the spaces are used, then a>-2 is not the same as a>-
> 2.  The latter should then generate an error, right?

It wasn't real clear where you intended to insert whitespace in this
example... but in any case, it might or might not generate an error
depending on what operators have been defined.  Both "a >- 2" (three
tokens) and "a > - 2" (four tokens) might be legal expressions.
If they are not, it's not the lexer's job to figure that out.
        regards, tom lane