[antlr-interest] How to use lexer getCharPositionInLine() function in Cpp target

Gokulakannan Somasundaram gokul007 at gmail.com
Mon Oct 15 17:56:00 PDT 2012


Yeah. That looks like a bug. I will need to change the stg file. For now,
you can directly write m_ctx->getCharPositionInLine() in place of
getCharPositionInLine()
and let me know, whether it works.

Thanks,
Gokul.

On Tue, Oct 16, 2012 at 8:28 AM, Richard Gildea <rgildea at gmail.com> wrote:

> Hi Gokul,
>
> The problem is that the predicate also appears in one of the generated
> TLexerCyclicDFA functions, leading to the following compilation error:
>
> error: no member named 'getCharPositionInLine' in 'cifLexerCyclicDFA33'
>                             if ( (( this->getCharPositionInLine() > 0 )) )
>                                     ~~~~  ^
>
> Manually editing the generated code to read ctx->getCharPositionInLine()
> fixes the compilation.
>
> Cheers,
>
> Richard
>
>
> On 15 October 2012 17:13, Gokulakannan Somasundaram <gokul007 at gmail.com>wrote:
>
>> getCharPositionInLine() function is present inside Lexer. You can just
>> call it as similar to Java.
>> just replace the MACRO GETCHARPOSITIONINLINE() with
>> this->getCharPositionInLine() ?
>>
>> I can't understand second part of your question.
>>
>> Thanks,
>> Gokul.
>>
>>
>> On Tue, Oct 16, 2012 at 2:43 AM, Richard Gildea <rgildea at gmail.com>wrote:
>>
>>> Hi,
>>>
>>> I am attempting to convert my parser to use the Cpp target after
>>> previously
>>> using the C target for some time, and have come across a problem trying
>>> to
>>> call the function TLexer::getCharPositionInLine() inside a gated semantic
>>> predicate in one of my lexer rules. With the C target I was using a
>>> construct such as
>>>
>>> ({ GETCHARPOSITIONINLINE() > 0 }?=> ';')
>>>
>>> to identify a semicolon character in the first column of a line. When
>>> trying to use a similar construct with the Cpp target, in the generated
>>> code this predicate is used both inside the lexer rule, where the correct
>>> usage would be this->getCharPositionInLine(), and inside a cyclicDFA,
>>> where
>>> the usage would be ctx->getCharPositionInLine(). Is there a way to use
>>> such
>>> a predicate with the Cpp target?
>>>
>>> Cheers,
>>>
>>> Richard
>>>
>>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>>> Unsubscribe:
>>> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>>>
>>
>>
>


More information about the antlr-interest mailing list