[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Getting involved in Bison

From: Akim Demaille
Subject: Re: Getting involved in Bison
Date: Thu, 17 Oct 2019 08:33:03 +0200

Hi Victor,

> Le 17 oct. 2019 à 07:38, Morales Cayuela, Victor (NSB - CN/Hangzhou) 
> <address@hidden> a écrit :
> Hello!
> No, I don't know D... It's incredible how many languages still keep emerging.

Well, D has been here for a while (2001).  Way before Rust (2010) or Go (2009) 
for instance.  As a reaction to C++: D is C++ "fixed".

> One thing that I have always encountered funny in Bison is the way to 
> describe lists. For example, if you expect comma-separated list called 
> my_list, you would write:
>    my_list: element | my_list ',' element;
> I believe there could be some more elegant syntax to avoid that kind of 
> loops. I don't know how much we can make up, but creating a simplified 
> expression like this would help:
>    my_list: %list ',' element;
> The directive %list would expand that expression into the previous one.

It's far from being that simple, as Bison is taking user actions.  This kind of 
feature is quite easy for parsers that yield ASTs, not so clear for Bison 
(until the day we equip it with a means to generate ASTs, but that's long into 
the future, there are many things to do first).

If you want to see what a nice modern LR parser generator looks like, have a 
look at Menhir.  Be aware that they cheat: they work with a functional 
language, Caml, which simplifies quite a few things :)  (Heck, we don't even 
have lists in C...).

You'll see that they support the feature you'd like, with an even way more 
powerful abstracts: user defined "meta rules" (users can define there own 
abbreviations much like your %list).

To summarize: don't even think about this now, it is much more delicate than it 
first seems.

> I've also had problems generating the grammar in C++. Right now I only use C 
> version of the code because of compilation/interaction problems with the 
> lexer (I used flex). I don't know in which side is the problem, but every 
> time I had to mix up C++ code from the project and C code from the 
> parser/grammar resulted in a mess... Especially when I wanted to wrap 
> different parsers in different classes and objects. Solving this would be a 
> big improvement for me.

Very much agreed.

But first see our examples/ in C++, which show how to have Bison and Flex 
together for C++.  It's not nice though, I fully agree.  But it works.  I've 
done that several times in my C++ projects.

Second... Well, Joel E. Denny (a former Bison maintainer) and I already have 
big plans to solve that issue.  It will be long and require a lot of testing on 
real case grammars, but eventually, it will be there.  Which is also why I let 
in only features that aren't subsumed by this work.

> I can use github if it's more convenient. I can adapt to anything right now.
> I will take a look again at the pending tasks.

First thing then is to have Bison compile on your machine from the repo :)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]