Related articles |
---|
A Structure problem for a private language [about preprocess' problem] topdigital@hotmail.com (2004-08-11) |
Re: A Structure problem for a private language [about preprocess' prob codeworker@free.fr (2004-08-13) |
From: | codeworker@free.fr (Cedric LEMAIRE) |
Newsgroups: | comp.compilers |
Date: | 13 Aug 2004 17:34:58 -0400 |
Organization: | http://groups.google.com |
References: | 04-08-067 |
Keywords: | parse, macros |
Posted-Date: | 13 Aug 2004 17:34:58 EDT |
topdigital@hotmail.com (.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
comments.
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");
@
increment(iCount);
}
*/
/*##script##*/
Then download 'CodeWorker' at "http://www.codeworker.org" (freeware)
and execute:
codeworker -autoexpand example.xtim -commentbegin /* -commentend */
Explanations:
-------------
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 "http://www.codeworker.org/Documentation.html" or
download the PDF form at "http://www.codeworker.org/CodeWorker.pdf".
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.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.