[antlr-interest] C++ target and excpetions

Gokulakannan Somasundaram gokul007 at gmail.com
Thu Feb 23 04:06:51 PST 2012


OK. I have implemented it referring to the Java Target. I will send tha jar
to you separately. If you test it out, i will put it in the wiki.

Gokul.

On Thu, Feb 23, 2012 at 7:17 PM, Oliver Kowalke <oliver.kowalke at gmx.de>wrote:

> Hello Gokul,
>
> it's a missunderstanding - I was asking for specializing the catch clauses
> per rule, not globaly as I provide with @rulecatch.
> I'm referring to the book 'The Definitive ANTLR Reference', T. Parr, chap.
> 10.5, p. 243.
>
> regards,
> Oliver
>
> > Hmm.. I am confused. Don't catch the exception in
> displayRecognitionError.
> > throw it from inside. In the my_rule, setup some instance variable of the
> > parser to the kind of exception, you want to throw. Inside
> > displayRecognitionError, access the instance variable and throw either
> > different kinds of exception / same exception with its instance variable
> > set to different values. So it should be like this.
> >
> > @parser::context {
> >     enum RuleType {
> >                  MY_RULE1
> >                  , MY_RULE2
> >                  ......
> >     };
> >     RuleType m_rule_type;
> >
> >      void displayRecognitionError(.... )
> >      {
> >             switch( m_rule_type ){
> >                  case MY_RULE1:
> >                          throw ipaddress_error("invalid ipaddress at line
> > "
> > + get_line( ex) );
> >                           .....
> >             }
> >      }
> > }
> >
> > my_rule1
> > @init{
> >     m_rule_type = MY_RULE1;
> > }
> >    : ID '=' IPADDRESS { ... }
> >    ;
> >
> > Better catch these exceptions at the level, where you call the parser.
> >
> > Usually It is a bad idea in C++ to setup a lot of try..catch blocks. But
> i
> > also want to provide the decision making power to the library user. So i
> > have created and uploaded the latest jar file which supports rulecatch
> > directive correctly.
> >
> > Adding the group, as it might be useful for everyone.
> >
> > Thanks,
> > Gokul.
> >
> > On Thu, Feb 23, 2012 at 12:54 AM, Oliver Kowalke
> > <oliver.kowalke at gmx.de>wrote:
> >
> > > Hi Gokul,
> > >
> > > I've another requirement related to exceptions. As you already told me
> > you
> > > consider not to implement @rulecatch directive.
> > > Could you provide a rule-specific catch directive?
> > >
> > > my_rule
> > >    : ID '=' IPADDRESS { ... }
> > >    ;
> > >    catch[RecognitionError const& e]
> > >    { throw ipaddress_error("invalid ipaddress at line " + get_line( ex)
> > );
> > > }
> > >
> > > Only rules with the catch-directive would get a try-catch block. If I
> > > catch this implementation in displayRecognitionError() I don't know if
> > it
> > > was an illformed ipaddres or an invalid interface etc.
> > >
> > > regards,
> > > Oliver
> > >
>
> --
> Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
> belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
>


More information about the antlr-interest mailing list