[stringtemplate-interest] Replacing double quotes by single quotes in output strings?
Terence Parr
parrt at cs.usfca.edu
Thu Dec 17 13:56:40 PST 2009
If you are trying to build a new target for ANTLR, then what you should do is create a PascalTarget.java like we have CTarget.java etc. and then fill in the methods that do the appropriate conversions.
Ter
On Dec 17, 2009, at 1:52 PM, Thierry Coq wrote:
> OK. I'll do that. This means I'll have to recompile ANTLR, this will
> take some time as I'm not familiar with this particular operation.
>
> Thanks,
>
> Thierry
> Terence Parr wrote:
>> either you need a renderer or modify the objcts going into the template so toString flips the " and '.
>> T
>> On Dec 17, 2009, at 9:27 AM, Thierry Coq wrote:
>>
>>
>>> Hello Jim,
>>>
>>> thanks for your interest.
>>>
>>> Yes I'm using ANTLR to generate a Pascal Parser and Lexer, and I'm using
>>> a small expression calculator grammar as an example. In order to do that
>>> I need to write another set of ST rules to change the target language.
>>>
>>> the grammar start like this: (Expr.g)
>>> grammar Expr;
>>> options {language=Lazarus;}
>>> ...
>>> //the rest of the grammar is like existing grammars in ANTLR.
>>>
>>> The resulting code is like this (for the tokens table):
>>> TOKENS_NAMES: array[0..TOKEN_COUNT] of String = (
>>> "<invalid>",
>>> "<EOR>",
>>> "<DOWN>",
>>> "<UP>",
>>> "WS",
>>> //..
>>> "'+'",
>>> //..
>>> );
>>>
>>> This doesn't work in Pascal. I'm trying to get:
>>> TOKENS_NAMES: array[0..TOKEN_COUNT] of String = (
>>> '<invalid>',
>>> '<EOR>',
>>> '<DOWN>',
>>> '<UP>',
>>> 'WS",
>>> //..
>>> '''+''',
>>> //..
>>> );
>>>
>>> The rule I use for ST is this one:
>>> <if(grammar.IsGrammarRoot)>
>>> const
>>> TOKEN_COUNT = <length(tokenNames)>+3;
>>> TOKENS_NAMES: array[0..TOKEN_COUNT] of String = (
>>> '<invalid>',
>>> '<EOR>',
>>> '<DOWN>',
>>> '<UP>',
>>> <tokenNames:{<it>}; separator=",\n">
>>> );
>>> <endif>
>>>
>>> I'm wondering how I can introduce a regexp expression in the tokenNames
>>> rules above to replace the chars ' by '' and " by '.
>>>
>>> Best regards,
>>> Thierry
>>>
>>> Jim Idle wrote:
>>>
>>>> Thierry,
>>>>
>>>> Sorry but I am still not quite following you. Are you saying that your parser is generated in Java and you want to generate it in Pascal? Or that you have a parser whose output is created by a StringTemplate? Changing the string delimiters should be trivial for the latter case, but there is no way to make the Java output of ANTLR be Pascal without writing a Pascal language target.
>>>>
>>>> Can you post a small example of what you are trying to achieve?
>>>>
>>>> Jim
>>>>
>>>>
>>>>
>>>>> -----Original Message-----
>>>>> From: Thierry Coq [mailto:tcoq at free.fr]
>>>>> Sent: Tuesday, December 15, 2009 9:41 PM
>>>>> To: Jim Idle
>>>>> Subject: Re: [stringtemplate-interest] Replacing double quotes by
>>>>> single quotes in output strings?
>>>>>
>>>>> Jim,
>>>>>
>>>>> thank you for your prompt answer.
>>>>>
>>>>> I'm working with ANTLR which is using StringTemplate.
>>>>>
>>>>> ANTLR generates code using the StringTemplate. Of course, I don't want
>>>>> to touch ANTLR or StringTemplate to use them to generate code. So I'm
>>>>> limited to using string template *.st and *.stg files to do the job.
>>>>>
>>>>> In ANTLR, the tokens are declared as Java strings and output to the
>>>>> generated code as java strings, as-is something rather uncompilable for
>>>>> Pascal. I need to be able, once the tokens have been analyzed by ANTLR
>>>>> to generate them in a format understandable by pascal, aka replacing
>>>>> the
>>>>> double quotes by simple one, and doubling the simple quotes within the
>>>>> strings, if any.
>>>>>
>>>>> Is this possible?
>>>>>
>>>>> Best regards,
>>>>> Thierry
>>>>>
>>>>> Jim Idle wrote:
>>>>>
>>>>>
>>>>>> Not sure what you are asking for to be honest. Are just wanting to
>>>>>>
>>>>>>
>>>>> escape characters? Do you mean StringTemplate and not ANTLR? If you
>>>>> means StringTemplate then perhaps you need a renderer method, but
>>>>> generally you should do such replacements in the model and not in the
>>>>> template.
>>>>>
>>>>>
>>>>>> Jim
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: stringtemplate-interest-bounces at antlr.org
>>>>>>>
>>>>>>>
>>>>> [mailto:stringtemplate-
>>>>>
>>>>>
>>>>>>> interest-bounces at antlr.org] On Behalf Of Thierry Coq
>>>>>>> Sent: Tuesday, December 15, 2009 12:52 PM
>>>>>>> To: stringtemplate-interest at antlr.org
>>>>>>> Subject: [stringtemplate-interest] Replacing double quotes by single
>>>>>>> quotes in output strings?
>>>>>>>
>>>>>>> Hello,
>>>>>>>
>>>>>>> is it possible to replace a double-quoted string, for example "HS"
>>>>>>>
>>>>>>>
>>>>> by
>>>>>
>>>>>
>>>>>>> single quotes: 'HS', and double single quotes when needed: for
>>>>>>>
>>>>>>>
>>>>> example:
>>>>>
>>>>>
>>>>>>> "'='" becomes '''=''', in the ANTLR code generator?
>>>>>>>
>>>>>>> I'm looking for a regexp, but I can't seem to find it.
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Thierry
>>>>>>> _______________________________________________
>>>>>>> stringtemplate-interest mailing list
>>>>>>> stringtemplate-interest at antlr.org
>>>>>>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> _______________________________________________
>>>>>> stringtemplate-interest mailing list
>>>>>> stringtemplate-interest at antlr.org
>>>>>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>> _______________________________________________
>>> stringtemplate-interest mailing list
>>> stringtemplate-interest at antlr.org
>>> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
>>>
>>
>>
>>
>>
>
> _______________________________________________
> stringtemplate-interest mailing list
> stringtemplate-interest at antlr.org
> http://www.antlr.org/mailman/listinfo/stringtemplate-interest
More information about the stringtemplate-interest
mailing list