The parser configuration file, generic.conf, is a curly brace-enclosed comma-separated list of key/value pairs:

{ key-0 => value-0, key-1 => value-1, ..., key-n => value-n }

In Perl jargon, it is a hash. The key is a string. The value may be a string, a number, a list, an array or a hash.
Since it is Perl, white spaces and ends of line may appear anywhere to give the list a nicer look. Thus, it may also be written as:

{ key-0 => value-0 , key-1 => value-1 , ... , key-n => value-n }

You may also add comments starting them with a pound sign (#). They extend to the end of the line:

# This is a full line comment { key-0 => value-0 , key-1 => value-1 , ... # The ellipsis stands for more parameters , key-n => value-n }

Only 3 keys are defined:

{ 'ectagsopts' => [ "option", "option" ... ] , 'eclangnamemapping' => { LXR_lang_name => ectags_lang_name , LXR_lang_name => ectags_lang_name } , 'langmap' => { language_descriptions } }

The first two, 'ectagsopts' and 'eclangnamemapping' allow to tune ectags for identifier and procedure recognition. Consult ectags documentation.
The last one, 'langmap', defines the different languages understood by the LXR internal parser.

Every language description is a curly brace-enclosed comma-separated list of key/value pairs:

{ LXR_language_name => { 'langid' => unique_numeric_id , 'identdef' => pattern , 'flags' => [ list_of_flags ] , 'reserved' => [ list_of_keywords ] , 'include' => { include_management } , 'spec' => [ parser_configuration ] , 'typemap' => { ectags_correspondance_table } } }

Read carefully the User's Manual if you want to play with the parser.