The Flex Lexical Analyzer: Difference between revisions
From Wiki**3
No edit summary |
No edit summary |
||
Line 18: | Line 18: | ||
%option debug | %option debug | ||
Also, the YYDEBUG environment variable will activate the debug messages '''both''' in Flex and YACC (allowing | This flag suffices when developing in C. When using C++ scanners ('''%option c++'''), even though the above flag still generates debug code, it's still necessary to tell the scanner to actually output debug information. This can be done by calling the '''set_debug''' method with a non-zero argument (this can be done conveniently at the start of the rules section in a Flex specification file -- note how the action is indented from the left and without any rule): | ||
%% | |||
{ set_debug(1); } | |||
Also, the YYDEBUG environment variable will activate the debug messages '''both''' in Flex and YACC (allowing simultaneous debugging of token recognition by the scanner and corresponding use by the parser). In the command line (syntax may vary, depending on the actual environment definition circumstances): | |||
export YYDEBUG=1 | export YYDEBUG=1 | ||
Revision as of 19:47, 2 April 2010
Basic Concepts
- Definitions
- Rules, actions
- Code
- States and sub-automata
Structure of a Flex Specification
How to Debug a Flex Specification
There are various flags and variables to activate the debug functionality in Flex (there is no need to insert useless code such as printfs or similar).
The debug option will activate code for debugging as will the call to the set_debug method (see the scanner header file in Compact for an example).
In the CompactScanner.l file:
%option debug
This flag suffices when developing in C. When using C++ scanners (%option c++), even though the above flag still generates debug code, it's still necessary to tell the scanner to actually output debug information. This can be done by calling the set_debug method with a non-zero argument (this can be done conveniently at the start of the rules section in a Flex specification file -- note how the action is indented from the left and without any rule):
%% { set_debug(1); }
Also, the YYDEBUG environment variable will activate the debug messages both in Flex and YACC (allowing simultaneous debugging of token recognition by the scanner and corresponding use by the parser). In the command line (syntax may vary, depending on the actual environment definition circumstances):
export YYDEBUG=1