Java preprocessor summary

Preprocessor commands

#include "filename"

The command includes specified file into your source. The preprocessor search the file in the current directory or in directories specified in the JPPINCLUDE environment variable.

Example:

#include "cdefs.jh"
#define identifier value

The command defines macro identifier. This identifier will be replaced with the value each time when it will be met in the source. The length of the identifier should not exceed 64 characters, the length of the value should not exceed 256 characters. The value can not include any other macro identifier.

Example:

JPP source:
#define PI 3.14
…
a=PI*2;
b=PI_1*222
System.out.writeln("PI value is…");

Resulted java source:
a=3.14*2;       //PI is the identifier - changed
b=PI_1*222;     //PI is the part of other identifier - not changed
System.out.writeln("PI value is…");     //PI is the part of the literal - not changed.
#ifdef identifier/#endif

The command allows including of the source placed between #ifdef and #endif commands if the identifier is defined.

Example:

#ifdef _DEBUG
        DumpContext();
#endif
#ifndef identifier/#endif

The command allows including of the source placed between #ifndef and #endif commands if the identifier is not defined.

#inline identifier macrofunction

The command defines macro function. The description looks like #define, but you can use the defined identifiers and the length of the macro function should not exceed 1024 characters. In the macro function you can use parameters reference. The parameter are used as _N there N is a decimal digit according to the number of parameter. The parameters should be specified in brackets and delimited by commas when using macro function.

Example:

JPP source
#inline strcpy _0=new String(_1)
 ...
 strcpy(myString,"eklmn");

Resulted java source:
myString=new String("eklmn");

The "repeat" block can be used in the inline construction. The repeat blocks repeats specified text for each inline parameter starting from the second parameter. The "repeat" block should starts from @ and should be specfied in brackets. The "_P" macro should be specified instead the parameter. One one _P macros should be used in each repeat block.

Example

#inline sum _0=0; _0=_0@(+_P)

sum(a,b,c);
sum(a,b);
sum(a,b,10,20,30,40);

One temporary variable can be used in the inline construction. The "_T" macro should be specified instead name of the variable.

Example:

#inline aa { int _T=0; _0[_T++]=_1; _0[_T++]=_2; }

The command line

First parameter in the command line always specifies the name of jpp source. Note that jpp source should not have "java" extension because the preprocessor creates the file with this extension during the compilation. "jpp" extension is recommended.

After the file name you can use the following options:

/nologodon't display logo message
/noremove don't remove resulted java sources
/nc don't execute javac compiler
/Didentifier define identifier. /DDEBUG option is analog to the #define DEBUG command in jpp source

The /javac key should be specified at end of the command line. All options specified after this key will be passed to javac compiler without any changes. The -Xstdout option is always underlined by default.

Example

jpp mysource.jpp /nologo /DDEBUG /javac -d .\myclasses -g:none -O

The conclusion

There is prerelease of the java preprocessor. Please, report about all errors. Write me if you have any ideas. I'm ready to continue this work if this product will be interesting for you.

Watch for http://softdef.omskreg.ru/gehtsoft/download.html or http://gehtsoft.freeru.net/download.html
for the last version.