Preprocesor can include files and define simple macros. All these constructs are processed at the scanner layer, the parser receives generated tokens instead of include or define command.
include("filename");
define("name", "value");
Position in the source files can be passed to the script using predefined constants.
__FILE__ __LINE__ __FUNCTION__
There are two possible versions of comments. Multiline comment couldn't contain another multiline comment.
// This is a single line comment /* This is a multiline comment */
The following source code contains a comment, defines new tverify macro and uses symbolic constant __FUNCTION__.
// From samples/tests.txt
define("tverify", "result = result && verify");
function testFactorial()
{
result = true;
tverify(factorial(1) == 1);
tverify(factorial(2) == 2);
tverify(factorial(3) == 6);
return testResult(__FUNCTION__, result);
}
All these preprocessor constructs are processed inside the scanner, the parser receives tokens that represent the following code (compare the bold parts).
function testFactorial()
{
result = true;
result = result && verify(factorial(1) == 1);
result = result && verify(factorial(2) == 2);
result = result && verify(factorial(3) == 6);
return testResult("testFactorial", result);
}