On 13-04-25 08:37 AM, John Clements wrote:

FWIW, I'm (mildly) concerned too.  In particular, I'm disappointed to discover 
that in its present form (and using my present caveman-like invocation style), 
ANTLR parses source files so slowly that it's impossible to use directly as a 
validation tool; I would very much like to directly validate the grammar used 
for documentation purposes against the existing sources.  I haven't yet asked 
for help from the ANTLR folks, because I don't yet feel like I've finished due 
diligence on RTFMing ANTLR, which I would prefer to do before dumping the 
problem in their lap.

I'm sorry for the confusion; I don't think patrick's work here represents a divergence from yours so much as a continuation of it, in a direction that answers a question I've asked repeatedly while you were working on your grammar: "can we actually find an LL(1) factoring?". Also "can any other non-antlr tools consume this grammar?"

Since you chose antlr4 rather than antlr3, the LL(1) question in particular was obscured under the "antlr4 will parse anything!" sales pitch[1]. Which is fine as far as getting the grammar roughed out and running -- I'm not criticizing that decision, it was yours to make, as was the choice of antlr in the first place. But it _did_ dodge a question I've been quite persistent about asking; one which I wanted to have an answer for before considering the grammar "done".

Longer term, I would like whatever grammar we wind up denoting as canonical / documented / spec'ed to be as (re)target-able as possible. I've been relatively insistent on LL(1) since it is a nice intersection-of-inputs, practically guaranteed to parse under any framework we retarget it to. IOW I do _not_ want to force anyone working with rust grammars in the future to use antlr (3, 4, or anything else). That's too tool-specific[2]. A grammar that is trivally translatable between antlr4, antlr3, yapp2, llgen, llnextgen, coco, javacc, parsec, spirit, "some rust parser-generator", and so forth is my "eventual" goal here.

-Graydon

[1]: "We parse any grammar" is unfortunately common in parser-generator sales pitches these days, with a profusion GLR and LL(*) things. As a downstream consumer of parser-generator technology, let me point out that while I appreciate broad guarantees by tool-makers, I very much _dislike_ a tool that offers broad guarantees at the expense of being able to make promises about efficiency, grammar class and algorithmic complexity. IOW I actually prefer tools that can tell me what I need to leave out (or change) in my grammar in order to arrive at an efficient parser in a given complexity class. "Don't worry about it" is the wrong answer here. I want to worry about it.

[2]: we also seem to be most-invested in python for in-tree "maintainer-mode" tools associated with rust development; it seems like a lot to ask to install a JDK in order to verify the grammar. If the grammar-check _can_ be done in a python module, I'm happy to shift over to using it. Unless antlr-ness is an important part of the grammar in some way I'm not perceiving; do you have a strong preference for keeping the java + antlr dependency?
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to