==XmlDocuGeneration==
@ident=readme_CheaderParsing

'''Why CheaderParsing is used''':

Headerfiles of the C or C++ programming language contain structural informations about data and maybe about calling possibilities (function prototypes, methods).

The data structures may be able to use in other contexts, at example:

* Access to data from other tools, a description of data structures where need.
* UML-representation of data
* Access to the data from Java, contained in byte[]-arrays
* Simple descriptions of data interface, able to generate from ,,struct,,-infos. 

The usage of that possibilities is shown in other examples of ZBNF too. This example is proper only for a simple test of the parser and the Header syntax.

'''The syntax of a header file''':

It is contained in the file ,,zbnfjax/zbnf/Cheader.zbnf,,.
The syntax is checked with some headerfiles in praxis, but it may be considered not all variants yet.

There is a principal problem: A C-or C++-compiler runs at first the preprocessor, which includes some other files, regards conditional compiling and replaces macros with its defined values. This is a formal textual process, not a parsing process. That result is read from the compiler to parse. The here used ZBNF-parser takes the content of the header file immediately without preprocessing.

In the practice there were less problems with a lot of variants of headerfiles, at example generated from an UML-tool. But, if a user writes a complexly content, which uses special defines, a parsing process isn't able. Than a preprocessor of a C/C++-compiler should prepare the headerfile before parsing.

At the other hand the comment may contain some informations:
* Documentation
* Structuring of ''classes'': combination of ,,struct,,-definitions and function prototypes, which uses this structures, to build a class context in C-language.
* Special Annotations in the comment.

The ZBNF-Parser is able to read informations from commentation. If a preprocessor runs, the comment is removed mostly. Therefore it isn't practical to use a standard preprocessor. But a special preprocessor, which preserves the comments, may be proper to use.


'''The example contains''':

 readme.html
 del_results.bat
 testCheader.bat
 example.h
 Object_Jc.h
 example.reference.xml
 Object_Jc.reference.xml
 
* ,,del_results.bat,,: helper to clean.

* ,,testCheader.bat,,: Windows-batch file to call both parsings only using ZBNF.

* ,,example.h,,: A test header file.

* ,,Object_Jc.h,,: A header file from practical use (see [[CRuntimeJavalike]]).

* ,,*.reference.xml,,: The results of the parsing process to compare: Test results with changed conditions should be compared with it.

If ,,testCheader.bat,, is invoked, the following files should be created:

 example.h.rpt
 example.xml
 Object_Jc.h.rpt
 Object_Jc.xml
 
