Done: https://blogs.apache.org/netbeans/entry/why-does-apache-netbeans-need

Gj

On Tue, Aug 6, 2019 at 11:13 AM Jaroslav Tulach <jaroslav.tul...@gmail.com>
wrote:

> Nice, philosophical post, Tim. I agree with Geertjan to publish it at
> https://blogs.apache.org/netbeans/ - that's the kind of overview that
> shouldn't be lost in the email conversation.
> -jt
>
>
> po 5. 8. 2019 v 20:24 odesílatel Tim Boudreau <niftin...@gmail.com>
> napsal:
>
> > >
> > > I was just curious about the theoretical aspect of parsing. Isn't
> there a
> > > unified parsing API, using ANTLR/lex/yacc which can parse any language
> > > given a grammar for it? Why do we use a different parsing
> implementation
> > > (like graal js parser in this instance) when a unified approach will
> help
> > > us support lots of languages easily?
> > >
> >
> > First, in an IDE, you are *never *just "parsing".  You are doing *a lot*
> > with the results of the parse.  An IDE doesn't have to just parse one
> > file;  it must also understand the context of the project that file lives
> > in;  how it relates to other files and those files interdependencies;
> > multiple versions of languages;  and the fact that the results of a parse
> > do not map cleanly to a bunch of stuff an IDE would show you that would
> be
> > useful.  For example, say the caret is in a java method, and you want to
> > find all other methods that call the one you're in and show the user a
> list
> > of them.  The amount of work that has to happen to answer that question
> is
> > very, very large.  To do that quickly enough to be useful, you need to do
> > it ahead of time and have a bunch of indexing and caching software behind
> > the scenes (all of which must be adapted to whatever the parser provides)
> > so you can look it up when you need it.  In short, a parser is kind of
> like
> > a toilet seat by itself.  You don't want to use it without a whole lot of
> > plumbing attached to it.
> >
> > Second, while there are tools like ANTLR (version 4 of which is awesome,
> by
> > the way), there is still a lot of code you have to write to interact with
> > the results of a parse to do something useful beyond syntax coloring in
> an
> > IDE.  One of my side projects is tooling for NetBeans that *do* let you
> > take an ANTLR grammar and auto generate a lot of the features a language
> > plugin should have.  Even with that almost completely declarative, you
> wind
> > up needing a lot of code.  One of the languages I'm testing it with is a
> > simple language called YASL which lets you define javascript-like schemas
> > with validation constraints (e.g., this field is a string, but it must be
> > at least 7 characters and match this pattern;  this is an integer number
> > but it must be > 1 and less than 1000 - that sort of thing).  All the
> > parsing goodness in the world won't write hints that notice that, say,
> the
> > maximum is less than the minimum in an integer constraint and offer to
> swap
> > them.  Someone has to write that by hand.
> >
> > Third, in an IDE with a 20 year history, a lot of parser generating
> > technologies have come and gone - javacc, javacup, ANTLR, and good old
> > hand-written lexers and parsers.  Unifying them all would be an enormous
> > amount of work, would break a lot of code that works just fine, and the
> end
> > result would be - stuff we've already got, that already works, just with
> > one-parser-generator-to-rule-them-all underneath.  Other than
> prettiness, I
> > don't know what problem that solves.
> >
> > So, all of this is to say:  We use different parsing implementations
> > because parsing is just a tiny piece of supporting a language, so it
> > wouldn't make the hard parts easier enough to be worth it.  And there
> will
> > be new cool parser-generating technologies that come along, and it's good
> > to be able to use them, rather than be married to
> > one-parser-generator-to-rule-them-all and have this conversation again,
> > when they come along.
> >
> > -Tim
> >
>

Reply via email to