Re: A Structure problem for a private language [about preprocess' problem] (Cedric LEMAIRE)
13 Aug 2004 17:34:58 -0400

          From comp.compilers

Related articles
A Structure problem for a private language [about preprocess' problem] (2004-08-11)
Re: A Structure problem for a private language [about preprocess' prob (2004-08-13)
| List of all articles for this month |

From: (Cedric LEMAIRE)
Newsgroups: comp.compilers
Date: 13 Aug 2004 17:34:58 -0400
References: 04-08-067
Keywords: parse, macros
Posted-Date: 13 Aug 2004 17:34:58 EDT (.X.T.I.M.) wrote in message news:04-08-067...
> [snip...]
> then,i need make some preprocess like this:
> #Loop($count,1,99) //$count is a macro variable, loop form 1 to
> 99
> #Insert("a%d + b%d + c%d = d%d\n",$count,$count,$count,$count)
> #Insert("__asm(\"mov eax ,dword ptr[d%d]");\n",$count)
> #Insert("__asm(\"push eax\");\n",$count)//C-RTL printf's format
> #EndLoop //Loop block finish

If you accept the preprocessing being accomplished by an external
tool, instead of being executed by your parser itself, I can propose
you a simple solution.

I suppose that you recognize C-like comments. It could be a inline
format too (but as you are applying a RR scan, it can't be something
like // ... \n), however my solution is more readable with multi-line

Copy the following lines into your source file (called "example.xtim",
for instance):
/*##markup##"preprocess 1"*//*##script##*/
local iCount = 1;
while $iCount < 100$ {
a@iCount@ + b@iCount@ + c@iCount@ = d@iCount@
__asm("mov eax ,dword ptr[d@iCount@]");
__asm("push eax");

Then download 'CodeWorker' at "" (freeware)
and execute:
    codeworker -autoexpand example.xtim -commentbegin /* -commentend */


CodeWorker is a universal parsing tool (don't care here) and a
versatile source code generator. It knows various techniques in source
code generation. I call one of them "auto-expansion". It consists of
detecting markups like '##markup##"a constant string"' embedded
between comments, in any kind of text file, and executing the script
located between '##script##' tags just below.

This piece of script is a template-based script, which generates text
just below the markup. Here, the script iterates on a counter and
injects your code.
If you want to preprocess more sophisticated tasks, see the online
documentation at "" or
download the PDF form at "".

The format of a comment is specified on the command-line
('-commentbegin' and '-commentend').

You can use this technique on C / Java / ... / HTML / LaTeX / ...
files. You just have to change the comment formats.

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.