The processing of a Quex-generated engine can be made visible if the compile macro:
QUEX_OPTION_DEBUG_SHOW
is defined (for example, by using -DQUEX_OPTION_DEBUG_SHOW as a compile option). Quex generates code that is instrumented with macros that are empty if this option is not set, and it if the compile option is defined the macros expand to debug output code. The output is printed to ‘standard error’ which is supposed to be immediately printed without buffering. Based on this output the inner function can be understood and analyzers can be debugged in detail. Such output looks like the following:
./tmp.cpp:152: * init state __________
./tmp.cpp:152: input: 41 'A'
./tmp.cpp:152: input position: 1
./tmp.cpp:195: state 95 ______________
./tmp.cpp:195: input: 42 'B'
./tmp.cpp:195: input position: 2
./tmp.cpp:195: state 95 ______________
./tmp.cpp:195: input: 45 'E'
./tmp.cpp:195: input position: 3
./tmp.cpp:195: state 95 ______________
./tmp.cpp:195: input: 52 'R'
...
./tmp.cpp:195: state 95 ______________
./tmp.cpp:195: input: 3A ':'
./tmp.cpp:195: input position: 10
./tmp.cpp:536: pre-terminal 7: [A-Z]+double-quote:double-quote
./tmp.cpp:539: * terminal 7: [A-Z]+double-quote:double-quote
This tells how the input triggers from one state to the next and finally ends up in the terminal for [A-Z]:. Especially, when reload is involved, it makes sense to set also the compile option:
QUEX_OPTION_DEBUG_SHOW_LOADS
If this option is set, additionally information about the buffer reload process is printed. For example:
FORWARD(entry)
_________________________________________________________________
buffer front--------------------------->[0000] 0x0000
[0001] 0x0041
[0002] 0x0042
[0003] 0x0045
[0004] 0x0052
...
[000A] 0x003A
[000B] 0x0020
lexeme start--------------------------->[000C] 0x0047
[000D] 0x0055
input, buffer back--------------------->[000E] 0x0000
_________________________________________________________________
is an output that tells that the start of the lexeme was at position ‘0xC’ when the reload was triggered and the current input was at the end of the buffer content. The right-most numbers show the unicode value of the character that is the content of the buffer at the given position. This feature comes especially handy, if one tries to program a customizes character set converted. With the compile option:
QUEX_OPTION_DEBUG_SHOW_MODES
mode transitions can be made visible. With this option set, the analyzer documents each mode change by outputs such as:
| Mode change from GENERAL
| to MATH
...
| Mode change from MATH
| to FORMAT_STRING
...
| Mode change from FORMAT_STRING
| to MATH
...