[antlr-interest] Re: ANTLR problem
Zulfiqar Malik
zulfiqar.malik at gmail.com
Sun Jul 30 03:14:06 PDT 2006
One thing that i forgot to mention is that everything works fine in
debug mode i.e. Debug CRT (Multithreaded Debug DLL). Obviously i don't
want this.
On 7/30/06, Zulfiqar Malik <zulfiqar.malik at gmail.com> wrote:
> Hi,
>
> I am using ANTLR 2.7.6. I am familiar with other parser generating
> tools like bison, slk etc. but this is the first time i am using
> ANTLR. I am writing a grammar with a C# like syntax and bison was
> proving to be quite restrivtive so i decided to switch to ANTLR.
> I got everything up and running and made a dll (VS8.0) for usage in
> C++. Trying out the minimalistic parser given in the "getting started"
> page i encounter an exception at the following line of code (for any
> token, in this particular case mNEWLINE in the lexer):
>
> if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken &&
> _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
> _token = makeToken(_ttype);
> _token->setText(text.substr(_begin, text.length()-_begin));
> }
> _returnToken = _token; // <--- CRASH ON THIS LINE
>
> and it should crash since _returnToken is not initialized and points
> to an invalid memory address. I don't know how to solve this problem.
> I am using VS8.0 on WinXP SP2 (which shouldn't be an issue). Thanks in
> advance.
>
> Grammar is given below:
>
> options {
> language="Cpp";
> }
>
> class P extends Parser;
> options {
> k = 2;
> }
>
> startRule
> : n:NAME
> //{printf("Hi there, %s\n", n);}
> ;
>
> class L extends Lexer;
>
> // one-or-more letters followed by a newline
> NAME: ( 'a'..'z'|'A'..'Z' )+ NEWLINE
> ;
>
> NEWLINE
> : '\r' '\n' // DOS
> | '\n' // UNIX
> {
> /*_ttype = antlr::Token::SKIP; newline();*/ }
> ;
>
> --
> Regards,
> Zulfiqar Inayat Malik.
>
--
Regards,
Zulfiqar Inayat Malik.
More information about the antlr-interest
mailing list