[antlr-interest] Parsing problem in C++

Stuart Dootson stuart.dootson at gmail.com
Tue Nov 9 16:41:54 PST 2010


On Tue, Nov 9, 2010 at 1:26 PM, David Wigg <wiggjd at bcs.org.uk> wrote:
> I updated the CPP_parser from Antlr1 to Antlr2. Ramin Zaghi has done a
> great job to convert that to run under Antlr3. However, we do still
> have a problem with understanding one particular piece of code.
>
> This is in an include file, iosfwd (1998). shown below. The line in question is
> for (_N = 0; !eq(*_U, _E(0)); ++_U)
> and I would like to know what _E(0) is in order to able to parse it
> properly. It must be something that returns a value (like a pointer?).
> It looks to me like very early C code for a typecast but a later
> version (2007) of iosfwd has something similar, "_Elem()", in that
> position so I suppose it can't be a typecast.
> Is it a function? It can't be a class because a class doesn't return a value.
>
> I hope some C++ expert can help. If so, it would be a great help if
> he/she could quote chapter and verse from Stroustrup's book (Third
> Edition, or indeed any other) as well since that would help to get our
> C++ grammar file correct..
>
> Thanks.
>
> David Wigg

<code snipped>

_E(0) is either a) a "function style cast" (when _E is a type with no
constructors) or b) a constructor call (when _E is a type with
constructors).

So, in the case you're asking for, an _E of value 0 is constructed as
part of a search for the end of a null terminated string of _Es. And
the same syntax can be used whether _E is a simple type or (say) a
class type.

HTH

Stuart Dootson


More information about the antlr-interest mailing list