[fpc-pascal] fpc-passrc expression parser (issue #16914)
Michael Van Canneyt
michael at freepascal.org
Wed Jul 14 08:35:50 CEST 2010
On Wed, 14 Jul 2010, Paul Nicholls wrote:
> ----- Original Message ----- From: "Michael Van Canneyt"
> <michael at freepascal.org>
> To: "FPC-Pascal users discussions" <fpc-pascal at lists.freepascal.org>
> Sent: Tuesday, July 13, 2010 6:42 PM
> Subject: Re: [fpc-pascal] fpc-passrc expression parser (issue #16914)
>
>
>>
>>
>> On Tue, 13 Jul 2010, dmitry boyarintsev wrote:
>>
>>> Hello, Michael Van Canneyt,
>>>
>>> Sorry, I can't write to the resolved issue (without re-opening) it.
>>>
>>>> - better class tree (split out binary/unary/primitive operators in
>>>> subclasses)
>>>> These may break backwards compatiblity; if you prefer to do them
>>>> yourself, I can say what I have in mind.
>>>
>>> That's how it was originally written. However, I personally prefer to
>>> keep less subclasses.
>>
>> I prefer more, with less fields, it saves memory on big expressions :-)
>>
>>> I would like to hear your ideas.
>>
>> Well, at least I would have expected 4 subclasses:
>> TPasExpr
>> +-- TUnaryExpr (field operand)
>> +-- TBinaryExpr (fields left, right)
>> +-- TPrimitiveExpr (field 'value')
>> +-- TFunctionCallExpr (fields value/params)
>>
>> I must say that I am not familiar with the parsing style you used. I wrote
>> 2 expression parsers meanwhile, and both used a different style. (see
>> fcl-base/fpexprpars.pp; the other one is in fcl-js. A third will follow in
>> the sql parser I'm about to commit)
>>
>>> thanks,
>>> dmitry
>>>
>>> P.S.. the expression parser still doesn't resolve ranges (i.e. in
>>> sets), neither simple nor complex, like:
>>>
>>> Char(6) in [Char(sizeof(Integer))..Char(SizeOf(int64))]
>>
>> That should be relatively easy to add, no ?
>>
>> Michael.
>
> Hi all,
> I am interested in expression parsers myself :)
>
> Where can I find the code for "fpexprpars.pp" and other fpc parsing code like
> that?
it is in fcl-base/src ?
the JavaScript scanner/parser is in fcl-js/src
the Pascal scanner/parser is in fcl-passrc/src
The SQL one will be in fcl-db/src/sql
You need trunk for this.
Michael.
More information about the fpc-pascal
mailing list