[hibernate-dev] Query handling : Antlr 3 versus Antlr 4
Steve Ebersole
steve at hibernate.org
Tue Jun 9 16:11:04 EDT 2015
So today I spent some time cleaning up the basic HQL parser. Personally I
think it would be best if our 2 proof-of-concepts could share that first
grammar. IMO that would make the differences between the 2 approaches more
apparent. I will push those changes soon.
It is not complete yet. But it covers most cases.
On Tue, Jun 9, 2015 at 10:47 AM Steve Ebersole <steve at hibernate.org> wrote:
> On Tue, Jun 9, 2015 at 10:14 AM Gunnar Morling <gunnar at hibernate.org>
> wrote:
>
> Yes, indeed I cheated here a bit. Probably it should be the following
>> instead:
>>
>> [DOT] ---> AttributeReference("<gen:1>", "code")
>> [DOT]
>> [DOT]
>> [IDENT, "c"]
>> [IDENT, "headquarters"]
>> [IDENT, "state"]
>> [IDENT, "code"]
>>
>
> How do you identify one DOT as referring to something else versus any of
> the other DOTs?
>
>
> Or maybe something like:
>>
>> [SELECTION_PARTICLE] ---> AttributeReference("<gen:1>", "code")
>> [DOT]
>> [DOT]
>> [DOT]
>> [IDENT, "c"]
>> [IDENT, "headquarters"]
>> [IDENT, "state"]
>> [IDENT, "code"]
>>
>> Where SELECTION_PARTICLE would be an abstract representation of anything
>> that can be selected (attribute ref, Java literal ref etc.) and the
>> decorator element added in a later pass would specify its actual semantics
>> based on the alias definitions etc. discovered before.
>>
>> Bottom line being, that decorators providing semantics are attached to
>> the nodes of the parse tree based on information gathered in previous
>> passes.
>>
>
> And what does that look like in real, practical terms? That's what
> concerns me :) I don't know, and you are just speaking in generalities.
> So what does that look like in practice?
>
>
> Not into the tree itself, but we can encode that semantic resolution into
>> decorators (node attachments).
>>
>
> Again, what do these "node attachments" look like in practice? I have
> zero clue and based on my discussions with Antlr folks its not pretty.
> Maybe I misunderstand. But if you are proposing this approach, I would
> think you should have an idea of how it would look practically-speaking :)
> Maybe this is the way to go, I just need to see what this looks like.
>
>
> Yes, they would deal with [[DOT][IDENT]] nodes but would benefit from
>> semantic decorators attached previously. During rendering I would expect
>> mainly those attachments to be of importance for the query creation.
>>
>> Admittedly, that's all quite "high level", but so far it seems doable to
>> me in principle. It doesn't answer of course actual tree transformations
>> such as (x + 0) -> x. I am not sure whether there are cases like this.
>>
>
> Yes it is all extremely high-level. That is my concern. Principle and
> practice are often 2 very different things.
>
> I plan on spending some time taking my hibernate-antlr4-poc project and
> expanding it specifically to try the "second grammar" approach and see what
> practical difficulties that shakes out. Would you be willing to do the
> same for this decorated approach? Then we'd have concrete stuff to compare
> and base a decision on.
>
> Also, `(x + 0) -> x` is actually a quite simple case. Ours is much more
> complicated. In analyzing `c.headquarters.state.code` in the SELECT clause
> we need a few things to happen in a few different parts of the tree. We
> need:
> 1) `c.headquarters.state` to be transformed into 2 "implicit joins" in
> the FROM clause
> 2) we need to replace `c.headquarters.state.code` as
> `{implicit-alias}.code` in the SELECT
> 3) register `c.headquarters` and `c.headquarters.state` as implicit join
> paths (additional implicit joins using these paths should re-use the same
> joins).
>
More information about the hibernate-dev
mailing list