[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