00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00034 %option yylineno
00035
00036 %{
00037
00039 using namespace std;
00040
00041 #include <sstream>
00042 #include "parseexception.h"
00043
00050 void yyerror(const char *text);
00051
00058 void saxCharacters(const char* _text);
00059
00066 void saxBeginElement(const char* _tag);
00067 #ifdef VALIDATION
00068
00074 void saxEndElement(const char* _tag);
00075 #else
00076
00081 void saxEndElement();
00082 #endif // #ifdef VALIDATION
00083
00089 void saxBeginEndElement(const char* _tag);
00090
00091 %}
00092
00093 %%
00094
00095 \<[\!\?][^\>]+\> {}
00096
00097 [^\<]+ {
00098 saxCharacters(yytext);
00099 return 1;
00100 }
00101
00102 \<[A-Za-z\_][A-Za-z0-9\_\-\.]*\> {
00103 saxBeginElement(yytext);
00104 return 1;
00105 }
00106
00107 \<\/[A-Za-z\_][A-Za-z0-9\_\-\.]*\> {
00108 #ifdef VALIDATION
00109 saxEndElement(yytext);
00110 #else
00111 saxEndElement();
00112 #endif // #ifdef VALIDATION
00113 return 1;
00114 }
00115
00116 \<[A-Za-z\_][A-Za-z0-9\_\-\.]*\/> {
00117 saxBeginEndElement(yytext);
00118 return 1;
00119 }
00120
00121 . {
00122 yyerror("Misparsed Charcter");
00123 }
00124
00125 %%
00126
00132 int yywrap(void) { return 1; }
00133
00140 void yyerror(const char *text) {
00141 std::ostringstream o;
00142 o << "XML Parsing In Line " << yylineno << " => " << text;
00143 if (yytext && (int)yytext!=EOF && strcmp(yytext, "")!=0) {
00144 o << " (\"" << yytext << "\")";
00145 }
00146 throw ParseException(o.str().c_str(), eid_parse_xml);
00147 }