As a starting point for the discussion, I've started writing an ANTLR
grammar and I attached it to FELIX-1521:
  https://issues.apache.org/jira/secure/attachment/12417521/gogo.g

On Mon, Aug 24, 2009 at 15:55, David Savage <dave.sav...@paremus.com> wrote:

> Hi Peter,
>
> I absolutely agree with you about parser size, but I wonder if this
> might be an optimization? The concern is that in the urge to optimize
> early we miss some subtle parts of the language specification.
>
> In theory, the existence of the language - verified via a grammar tool
> such as ANTLR, Yacc, etc is a test that the language is logically self
> consistent. Whether or not we then use the actual auto generated
> parsers in the "real" implementation is another thing. But having it
> available as a sanity check to confirm if an optimized version is
> behaving as per the language spec is potentially very useful.
>
> However I also know there are problems associated with ambiguities in
> these sorts of grammars, i.e. if certain input can be matched by two
> or more different rule invocations. This /could/ be the case when
> mixing IO and OO semantics, so potentially argues against this route.
> I guess I just wanted to flag the fact that we may be getting into
> deep water...
>
> Either way I do think it would be worth while defining some commands
> we agree on their base level semantics, i.e. the IO vs OO options for
> echo.
>
> Regards,
>
> Dave
>
> On Mon, Aug 24, 2009 at 1:37 PM, Peter Kriens<peter.kri...@aqute.biz>
> wrote:
> > One of the key reasons for the grammar is that the parser could be
> trivial.
> > You basically only need a token and string parser and recursively parse
> > blocks enclosed by [<({[], etc. A trivial grammar that is very similar to
> > TCL. Though it is a nice exercise to turn it into an ANTLR grammar, the
> > increased size would void one of my primary design goals. That is, if you
> > look at beanshell it is around 130k, and that is largely the zillion
> parse
> > classes.
> >
> > I think keeping this simplicity has some value ...
> >
> > Kind regards,
> >
> >        Peter Kriens
> >
> >
> >
> >
> > On 21 aug 2009, at 21:34, David Savage wrote:
> >
> >> On Fri, Aug 21, 2009 at 4:50 PM, Guillaume Nodet<gno...@gmail.com>
> wrote:
> >>>
> >>> Right, I think it makes sense to define the grammar.
> >>> But the grammar just defines ... well, the syntax, not the semantics.
> >>> I think most of the discussion is about what semantic to apply on the
> >>> grammar.
> >>
> >> Hmmm but having agreed on a syntax doesn't that mean we then have a
> >> set of tokens to which we can apply semantics? At the risk of
> >> reopening the a,b,c debate...
> >>
> >> ab
> >> a b
> >> a ; b
> >> a = b
> >> a | b
> >> a {b}
> >> a <b>
> >> "a b"
> >> a = $b
> >> a = {b}
> >> a = <b>
> >> $ab
> >> $a b
> >>
> >> Generate a variety of different tokens and it is the tokens to which
> >> we apply semantics? Also the expected result of each of these varies
> >> depending on whether a or b is assigned to be a command or an object
> >> and also whether it does IO, is a value or returns a value.
> >>
> >> I think if we focus on one part of the problem and tweek the parsing
> >> code to fix this we are highly likely to generate some other
> >> unexpected behaviour. Where as if we define a parser that can generate
> >> a set of tokens via a grammar the runtime only has to define the
> >> actions it applies to the tokens?
> >>
> >> Though it still remains to be seen if a grammar is possible so perhaps
> >> this is a moot point till one is available - hopefully the above
> >> illustrates the concern though?
> >>
> >>>
> >>> For commands, imnsho, I think we should discuss and encourage the use
> of
> >>> what I committed in
> >>>
> >>>
> >>>
> https://svn.apache.org/repos/asf/felix/trunk/gogo/commands/src/main/java/org/apache/felix/gogo/commands/
> >>>
> >>> Those are much more powerfull than a simple method on an object,
> because
> >>> they allow:
> >>>  * help on the command
> >>>  * automatic parsing / conversion of arguments
> >>>  * variable number of arguments
> >>>  * command line switches
> >>>
> >>
> >> Certainly I think those classes look very useful and wrapper classes
> >> and utilities are great in real world scenarios to avoid code
> >> duplication. But I don't think we should ignore the OO case. Being
> >> able to call things like String.indexOf and startsWith type methods in
> >> a shell without having to generate minutae wrapper commands to achieve
> >> things the vm already provides us with helps in the DRY aspect of
> >> software engineering.
> >>
> >>> We have a bunch of commands defined in Karaf that are not specific to
> >>> Karaf,
> >>> so it would make sense to move them in a command ground.
> >>> You can find some of them at:
> >>>
> >>>
> >>>
> https://svn.apache.org/repos/asf/felix/trunk/karaf/gshell/gshell-osgi/src/main/java/org/apache/felix/karaf/gshell/osgi/
> >>> The only problem is that those are slightly tied to blueprint atm.
> >>
> >> In terms of this level of the debate I'm not sure we need "real"
> >> commands only to agree on a set of representative commands - so we
> >> know exactly what echo does, for example. If those representative
> >> commands are also useful that's obviously a bonus, but at least if
> >> we're agreed on what the various types of commands and tokens are,
> >> then we should be able to agree (or not) how to treat them in a shell
> >> environment - avoids the potential for circular debates. Finally we
> >> should certainly implement these representative commands, to allow us
> >> to create meaningful tests.
> >>
> >> Again just some thoughts...
> >>
> >> Regards,
> >>
> >> Dave
> >>
> >>>
> >>> On Fri, Aug 21, 2009 at 16:54, David Savage <dave.sav...@paremus.com>
> >>> wrote:
> >>>>
> >>>> Hi there,
> >>>>
> >>>> Seems like a good time to wade into the discussion ;) it seems like it
> >>>> could be beneficial to start looking at the TSL syntax from the point
> >>>> of view of a formal grammar specification such as ANTLR? Currently
> >>>> most of the tests are via unit tests and the parsing is done by custom
> >>>> java code. The danger is that without a formal grammar specification
> >>>> we may "fix" one part of the parser to handle one use case only to
> >>>> expose a secondary problem. Unit tests are certainly one way to catch
> >>>> this but they can only be as good as the number of tests we define,
> >>>> where as I believe a logically consistent grammar is a test in itself?
> >>>>
> >>>> Of course this may also be a fools errand (firstly as I have no
> >>>> experience with antlr grammars) and looking at this link (which I came
> >>>> at by searching for "bash antlr grammar" in google) it may not even be
> >>>> possible - though the post is very old:
> >>>>
> >>>> http://www.antlr.org/pipermail/antlr-interest/2006-May/016235.html
> >>>>
> >>>> Wondering if there are any language experts following this list who
> can
> >>>> comment?
> >>>>
> >>>> I'm also wondering if it may make sense to extract the shell that
> >>>> interprets the commands and the runtime that provides the commands. I
> >>>> really like the TSL impl but in the end it's just one possible way of
> >>>> running commands? One of the really nice things about RFC 132 is it
> >>>> provides a common way for developers to add commands in osgi, but how
> >>>> we refer to those commands is a secondary issue, here thinking of the
> >>>> sh,csh,bash type debate...
> >>>>
> >>>> Finally though the echo echo type debate is good for simplifying the
> >>>> problem down in unit tests in email it does depend on how we think
> >>>> echo is defined. Does echo return a value or does it write the result
> >>>> to the stream or both (?!). It seems like it would be useful to define
> >>>> a set of commands for debate that are unambiguous? I guess these could
> >>>> be abstract commands which could go on a wiki or some such? Some
> >>>> examples:
> >>>>
> >>>> nsc -> no such command
> >>>> void -> command that does nothing and returns nothing
> >>>> echo -s hello -> echo "hello" to stream
> >>>> echo -v -> echo "hello" to value
> >>>> echo -sv hello -> echo "hello" to stream and value
> >>>> array a b c -> returns [a,b,c] as an array
> >>>>
> >>>> Others?
> >>>>
> >>>> Just my 2 pence anyway...
> >>>>
> >>>> Regards,
> >>>>
> >>>> Dave
> >>>>
> >>>> On Thu, Aug 20, 2009 at 5:45 PM, Guillaume Nodet<gno...@gmail.com>
> >>>> wrote:
> >>>>>
> >>>>> On Thu, Aug 20, 2009 at 15:40, Derek Baum <derek.b...@paremus.com>
> >>>>> wrote:
> >>>>>
> >>>>>>
> >>>>>>> I disagree with having eval as a command.  The reason is that is
> has
> >>>>>>> two
> >>>>>>
> >>>>>> sides effects:
> >>>>>>>
> >>>>>>>  * all parameters are evaluated once more, so that $xxx expansion
> >>>>>>> will be
> >>>>>>> done once again, and it could lead to unwanted results
> >>>>>>
> >>>>>> this is offset by not implicitly evaluating the args - re-evaluation
> >>>>>> only occurs when explicitly invoking eval.
> >>>>>>
> >>>>>>>  * all parameters are converted to strings, which i think is not
> what
> >>>>>>> is
> >>>>>>
> >>>>>> expected.
> >>>>>>
> >>>>>> I'm not sure this is a problem. The 3.patch eval is like eval in
> bash,
> >>>>>> and can be used to re-evaluate a string as a script.
> >>>>>>
> >>>>>> Derek
> >>>>>>
> >>>>>
> >>>>>
> >>>>> Well, I think this really lead to undesirable effects:
> >>>>>>
> >>>>>> x = <bundle 0>
> >>>>>
> >>>>> ...
> >>>>>>
> >>>>>> $x toString
> >>>>>
> >>>>> org.apache.felix.framework [0]
> >>>>>>
> >>>>>> eval $x toString
> >>>>>
> >>>>>  Command not found *:org.apache.felix.framework
> >>>>>
> >>>>> I think both should be identical.
> >>>>> If you want to evaluate the arguments as a fully new command line,
> you
> >>>>> could
> >>>>> use quoting
> >>>>>>
> >>>>>> eval "$x toString"
> >>>>>
> >>>>> But the opposite can't be done.
> >>>>> So I still think we should come back to my earlier proposal about
> >>>>> making
> >>>>> it
> >>>>> a real keyword instead of a command.
> >>>>>
> >>>>> I think this is independant of wether arguments are re-parsed, though
> >>>>> they
> >>>>> are related.
> >>>>>
> >>>>> I've also spotted another problem, but this looks like a different
> >>>>> problem:
> >>>>>>
> >>>>>> echo "$x"
> >>>>>
> >>>>> java.lang.Exception: Unable to convert from
> [org.apache.felix.framework
> >>>>> [0]]
> >>>>> to java.util.List<java.lang.String>(error converting collection
> entry)
> >>>>>
> >>>>> I would have thought it would behave the same as
> >>>>>>
> >>>>>> echo <$x toString>
> >>>>>
> >>>>>
> >>>>> --
> >>>>> Cheers,
> >>>>> Guillaume Nodet
> >>>>> ------------------------
> >>>>> Blog: http://gnodet.blogspot.com/
> >>>>> ------------------------
> >>>>> Open Source SOA
> >>>>> http://fusesource.com
> >>>>>
> >>>
> >>>
> >>>
> >>> --
> >>> Cheers,
> >>> Guillaume Nodet
> >>> ------------------------
> >>> Blog: http://gnodet.blogspot.com/
> >>> ------------------------
> >>> Open Source SOA
> >>> http://fusesource.com
> >>>
> >>>
> >>>
> >
> >
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Reply via email to