libpathan - błąd flexa

Radosław Kintzi radek w pop.e-wro.pl
Pon, 29 Mar 2004, 09:52:49 CEST


Jeszcze załącznik
-- 
Radosław Kintzi
mailto:radzio w pld-linux.org
gg:2199600
-------------- następna część ---------
%option noyywrap
%option c++
%option never-interactive
%option 16bit
%option outfile="XPath2Lexer.cpp"

%{

#include "XPathFlexLexer.hpp"
#include "../parser/XPath2ParserControl.hpp"
#include "../parser/XPath2Parser.hpp"
#include "../defs/XMLScriptTypeDefs.hpp"
#include "../utils/NumUtils.hpp"
#include "../exceptions/XPathLexerException.hpp"
#include <stdio.h> // for sprintf

using namespace std;

#define YY_STACK_USED 1

#ifdef XPATH_LEXER_DEBUG
  #define RECOGNIZE(token)    fprintf(stderr, "token: %i line: %i\n", token, __LINE__); return token;
#else
  #define RECOGNIZE(token)    return token
#endif

#define PUSH(state)         yy_push_state(state)
#define POP()               yy_pop_state()

%}

 /* -------------- declaration section -------------- */

 /* XML */

BaseChar1                     ([\x0041-\x005A]|[\x0061-\x007A]|[\x00C0-\x00D6]|[\x00D8-\x00F6]|[\x00F8-\x00FF]|[\x0100-\x0131]|[\x0134-\x013E]|[\x0141-\x0148]|[\x014A-\x017E]|[\x0180-\x01C3]|[\x01CD-\x01F0]|[\x01F4-\x01F5]|[\x01FA-\x0217]|[\x0250-\x02A8]|[\x02BB-\x02C1]|[\x0386]|[\x0388-\x038A]|[\x038C]|[\x038E-\x03A1]|[\x03A3-\x03CE]|[\x03D0-\x03D6]|[\x03DA]|[\x03DC]|[\x03DE]|[\x03E0]|[\x03E2-\x03F3]|[\x0401-\x040C]|[\x040E-\x044F]|[\x0451-\x045C]|[\x045E-\x0481]|[\x0490-\x04C4]|[\x04C7-\x04C8]|[\x04CB-\x04CC]|[\x04D0-\x04EB]|[\x04EE-\x04F5]|[\x04F8-\x04F9]|[\x0531-\x0556]|[\x0559]|[\x0561-\x0586]|[\x05D0-\x05EA]|[\x05F0-\x05F2]|[\x0621-\x063A]|[\x0641-\x064A]|[\x0671-\x06B7]|[\x06BA-\x06BE]|[\x06C0-\x06CE]|[\x06D0-\x06D3]|[\x06D5]|[\x06E5-\x06E6]|[\x0905-\x0939]|[\x093D]|[\x0958-\x0961]|[\x0985-\x098C]|[\x098F-\x0990]|[\x0993-\x09A8]|[\x09AA-\x09B0]|[\x09B2]|[\x09B6-\x09B9]|[\x09DC-\x09DD]|[\x09DF-\x09E1]|[\x09F0-\x09F1]|[\x0A05-\x0A0A]|[\x0A0F-\x0A10]|[\x0A13-\x0A28]|[\x0A2A-\x0A30]|[\x0A32-\x0A33]|[\x0A35-\x0A36]|[\x0A38-\x0A39]|[\x0A59-\x0A5C]|[\x0A5E]|[\x0A72-\x0A74]|[\x0A85-\x0A8B]|[\x0A8D]|[\x0A8F-\x0A91]|[\x0A93-\x0AA8]|[\x0AAA-\x0AB0]|[\x0AB2-\x0AB3]|[\x0AB5-\x0AB9]|[\x0ABD]|[\x0AE0]|[\x0B05-\x0B0C]|[\x0B0F-\x0B10]|[\x0B13-\x0B28]|[\x0B2A-\x0B30]|[\x0B32-\x0B33]|[\x0B36-\x0B39]|[\x0B3D]|[\x0B5C-\x0B5D]|[\x0B5F-\x0B61]|[\x0B85-\x0B8A]|[\x0B8E-\x0B90]|[\x0B92-\x0B95]|[\x0B99-\x0B9A]|[\x0B9C]|[\x0B9E-\x0B9F]|[\x0BA3-\x0BA4]|[\x0BA8-\x0BAA]|[\x0BAE-\x0BB5]|[\x0BB7-\x0BB9]|[\x0C05-\x0C0C]|[\x0C0E-\x0C10]|[\x0C12-\x0C28]|[\x0C2A-\x0C33]|[\x0C35-\x0C39]|[\x0C60-\x0C61]|[\x0C85-\x0C8C]|[\x0C8E-\x0C90]|[\x0C92-\x0CA8]|[\x0CAA-\x0CB3]|[\x0CB5-\x0CB9]|[\x0CDE]|[\x0CE0-\x0CE1]|[\x0D05-\x0D0C])

BaseChar2                     ([\x0D0E-\x0D10]|[\x0D12-\x0D28]|[\x0D2A-\x0D39]|[\x0D60-\x0D61]|[\x0E01-\x0E2E]|[\x0E30]|[\x0E32-\x0E33]|[\x0E40-\x0E45]|[\x0E81-\x0E82]|[\x0E84]|[\x0E87-\x0E88]|[\x0E8A]|[\x0E8D]|[\x0E94-\x0E97]|[\x0E99-\x0E9F]|[\x0EA1-\x0EA3]|[\x0EA5]|[\x0EA7]|[\x0EAA-\x0EAB]|[\x0EAD-\x0EAE]|[\x0EB0]|[\x0EB2-\x0EB3]|[\x0EBD]|[\x0EC0-\x0EC4]|[\x0F40-\x0F47]|[\x0F49-\x0F69]|[\x10A0-\x10C5]|[\x10D0-\x10F6]|[\x1100]|[\x1102-\x1103]|[\x1105-\x1107]|[\x1109]|[\x110B-\x110C]|[\x110E-\x1112]|[\x113C]|[\x113E]|[\x1140]|[\x114C]|[\x114E]|[\x1150]|[\x1154-\x1155]|[\x1159]|[\x115F-\x1161]|[\x1163]|[\x1165]|[\x1167]|[\x1169]|[\x116D-\x116E]|[\x1172-\x1173]|[\x1175]|[\x119E]|[\x11A8]|[\x11AB]|[\x11AE-\x11AF]|[\x11B7-\x11B8]|[\x11BA]|[\x11BC-\x11C2]|[\x11EB]|[\x11F0]|[\x11F9]|[\x1E00-\x1E9B]|[\x1EA0-\x1EF9]|[\x1F00-\x1F15]|[\x1F18-\x1F1D]|[\x1F20-\x1F45]|[\x1F48-\x1F4D]|[\x1F50-\x1F57]|[\x1F59]|[\x1F5B]|[\x1F5D]|[\x1F5F-\x1F7D]|[\x1F80-\x1FB4]|[\x1FB6-\x1FBC]|[\x1FBE]|[\x1FC2-\x1FC4]|[\x1FC6-\x1FCC]|[\x1FD0-\x1FD3]|[\x1FD6-\x1FDB]|[\x1FE0-\x1FEC]|[\x1FF2-\x1FF4]|[\x1FF6-\x1FFC]|[\x2126]|[\x212A-\x212B]|[\x212E]|[\x2180-\x2182]|[\x3041-\x3094]|[\x30A1-\x30FA]|[\x3105-\x312C]|[\xAC00-\xD7A3])

Ideographic                   ([\x4E00-\x9FA5]|[\x3007]|[\x3021-\x3029])

Letter                        {BaseChar1}|{BaseChar2}|{Ideographic}

Digit                         ([\x0030-\x0039]|[\x0660-\x0669]|[\x06F0-\x06F9]|[\x0966-\x096F]|[\x09E6-\x09EF]|[\x0A66-\x0A6F]|[\x0AE6-\x0AEF]|[\x0B66-\x0B6F]|[\x0BE7-\x0BEF]|[\x0C66-\x0C6F]|[\x0CE6-\x0CEF]|[\x0D66-\x0D6F]|[\x0E50-\x0E59]|[\x0ED0-\x0ED9]|[\x0F20-\x0F29]) 

CombiningChar                 ([\x0300-\x0345]|[\x0360-\x0361]|[\x0483-\x0486]|[\x0591-\x05A1]|[\x05A3-\x05B9]|[\x05BB-\x05BD]|[\x05BF]|[\x05C1-\x05C2]|[\x05C4]|[\x064B-\x0652]|[\x0670]|[\x06D6-\x06DC]|[\x06DD-\x06DF]|[\x06E0-\x06E4]|[\x06E7-\x06E8]|[\x06EA-\x06ED]|[\x0901-\x0903]|[\x093C]|[\x093E-\x094C]|[\x094D]|[\x0951-\x0954]|[\x0962-\x0963]|[\x0981-\x0983]|[\x09BC]|[\x09BE]|[\x09BF]|[\x09C0-\x09C4]|[\x09C7-\x09C8]|[\x09CB-\x09CD]|[\x09D7]|[\x09E2-\x09E3]|[\x0A02]|[\x0A3C]|[\x0A3E]|[\x0A3F]|[\x0A40-\x0A42]|[\x0A47-\x0A48]|[\x0A4B-\x0A4D]|[\x0A70-\x0A71]|[\x0A81-\x0A83]|[\x0ABC]|[\x0ABE-\x0AC5]|[\x0AC7-\x0AC9]|[\x0ACB-\x0ACD]|[\x0B01-\x0B03]|[\x0B3C]|[\x0B3E-\x0B43]|[\x0B47-\x0B48]|[\x0B4B-\x0B4D]|[\x0B56-\x0B57]|[\x0B82-\x0B83]|[\x0BBE-\x0BC2]|[\x0BC6-\x0BC8]|[\x0BCA-\x0BCD]|[\x0BD7]|[\x0C01-\x0C03]|[\x0C3E-\x0C44]|[\x0C46-\x0C48]|[\x0C4A-\x0C4D]|[\x0C55-\x0C56]|[\x0C82-\x0C83]|[\x0CBE-\x0CC4]|[\x0CC6-\x0CC8]|[\x0CCA-\x0CCD]|[\x0CD5-\x0CD6]|[\x0D02-\x0D03]|[\x0D3E-\x0D43]|[\x0D46-\x0D48]|[\x0D4A-\x0D4D]|[\x0D57]|[\x0E31]|[\x0E34-\x0E3A]|[\x0E47-\x0E4E]|[\x0EB1]|[\x0EB4-\x0EB9]|[\x0EBB-\x0EBC]|[\x0EC8-\x0ECD]|[\x0F18-\x0F19]|[\x0F35]|[\x0F37]|[\x0F39]|[\x0F3E]|[\x0F3F]|[\x0F71-\x0F84]|[\x0F86-\x0F8B]|[\x0F90-\x0F95]|[\x0F97]|[\x0F99-\x0FAD]|[\x0FB1-\x0FB7]|[\x0FB9]|[\x20D0-\x20DC]|[\x20E1]|[\x302A-\x302F]|[\x3099]|[\x309A])

Extender                      ([\x00B7]|[\x02D0]|[\x02D1]|[\x0387]|[\x0640]|[\x0E46]|[\x0EC6]|[\x3005]|[\x3031-\x3035]|[\x309D-\x309E]|[\x30FC-\x30FE])

 /* XML Names */

NCNameChar                    {Letter}|{Digit}|"."|"-"|"_"|{CombiningChar}|{Extender}
NCName                        ({Letter}|"_"){NCNameChar}*
QName                         ({NCName}":")?{NCName}

 /* String Literals and Numbers */

IntegerLiteral                {Digits}
DecimalLiteral                ("."{Digits})|({Digits}"."[0-9]*)
DoubleLiteral                 (("."{Digits})|({Digits}("."[0-9]*)?))("e"|"E")("+"|"-")?{Digits}
StringLiteral                 (["]((["]["])|[^"])*["])|(['](([']['])|[^'])*['])

 /* Defined tokens */

Whitespace                    {WhiteSpaceChar}+
S                             {WhiteSpaceChar}*
Digits                        [0-9]+
Char                          ([\x0009]|[\x000D]|[\x000A]|[\x0020-\xD7FF]|[\xE000-\xFFFD])
WhiteSpaceChar                ([\x0009]|[\x000D]|[\x000A]|[\x0020]) 

 /* Lexical states */

%x OPERATOR
%x ITEMTYPE
%x VARNAME
%x EXPR_COMMENT
%x KINDTEST
%x CLOSEKINDTEST
%x OCCURRENCEINDICATOR
%x SCHEMACONTEXTSTEP

%%

 /* All tokens */

<INITIAL,OPERATOR,ITEMTYPE,KINDTEST,CLOSEKINDTEST,OCCURRENCEINDICATOR>{Whitespace}               /* ignore whitespace */

 /* Default [INITIAL] state */

<INITIAL,OPERATOR>{IntegerLiteral}                          BEGIN(OPERATOR); RECOGNIZE(_INTEGER_LITERAL_);
<INITIAL,OPERATOR>{DecimalLiteral}                          BEGIN(OPERATOR); RECOGNIZE(_DECIMAL_LITERAL_);
<INITIAL,OPERATOR>{DoubleLiteral}                           BEGIN(OPERATOR); RECOGNIZE(_DOUBLE_LITERAL_);
<INITIAL,OPERATOR>"."                                       BEGIN(OPERATOR); RECOGNIZE(_DOT_);
<INITIAL,OPERATOR>".."                                      BEGIN(OPERATOR); RECOGNIZE(_DOT_DOT_);
<INITIAL,OPERATOR>{NCName}":*"                              BEGIN(OPERATOR); RECOGNIZE(_NCNAME_COLON_STAR_);
<INITIAL,OPERATOR>"*:"{NCName}                              BEGIN(OPERATOR); RECOGNIZE(_STAR_COLON_NCNAME_);
<INITIAL,OPERATOR>{StringLiteral}                           BEGIN(OPERATOR); RECOGNIZE(_STRING_LITERAL_);
<INITIAL,OPERATOR>"]"                                       BEGIN(OPERATOR); RECOGNIZE(_RBRACK_);
<INITIAL,OPERATOR,ITEMTYPE>")"                              BEGIN(OPERATOR); RECOGNIZE(_RPAR_);
<INITIAL>"*"                                                BEGIN(OPERATOR); RECOGNIZE(_STAR_);

<INITIAL,OPERATOR,ITEMTYPE>"$"                              BEGIN(VARNAME);
<INITIAL,OPERATOR>"for"{Whitespace}"$"                      BEGIN(VARNAME); RECOGNIZE(_FOR_);
<INITIAL,OPERATOR>"some"{Whitespace}"$"                     BEGIN(VARNAME); RECOGNIZE(_SOME_);
<INITIAL,OPERATOR>"every"{Whitespace}"$"                    BEGIN(VARNAME); RECOGNIZE(_EVERY_);

<INITIAL>"element"{S}"("                                    BEGIN(OPERATOR); PUSH(KINDTEST); RECOGNIZE(_ELEMENT_LPAR_);
<INITIAL>"attribute"{S}"("                                  BEGIN(OPERATOR); PUSH(KINDTEST); RECOGNIZE(_ATTRIBUTE_LPAR_);
<INITIAL>"comment"{S}"("                                    BEGIN(OPERATOR); PUSH(KINDTEST); RECOGNIZE(_COMMENT_LPAR_);
<INITIAL>"text"{S}"("                                       BEGIN(OPERATOR); PUSH(KINDTEST); RECOGNIZE(_TEXT_LPAR_);
<INITIAL>"node"{S}"("                                       BEGIN(OPERATOR); PUSH(KINDTEST); RECOGNIZE(_NODE_LPAR_);
<INITIAL>"processing-instruction"{S}"("                     BEGIN(OPERATOR); PUSH(KINDTEST); RECOGNIZE(_PROCESSING_INSTRUCTION_LPAR_);
<INITIAL>"document-node"{S}"("                              BEGIN(OPERATOR); PUSH(KINDTEST); RECOGNIZE(_DOCUMENT_NODE_LPAR_);

<INITIAL,OPERATOR>"}"                                       POP(); RECOGNIZE(_RBRACE_);

<INITIAL,OPERATOR,ITEMTYPE,VARNAME,EXPR_COMMENT>"(:"        PUSH(EXPR_COMMENT);

<INITIAL,OPERATOR,KINDTEST,CLOSEKINDTEST,SCHEMACONTEXTSTEP>"{"  BEGIN(INITIAL); RECOGNIZE(_LBRACE_);
<INITIAL,KINDTEST,SCHEMACONTEXTSTEP>"@"                     RECOGNIZE(_AT_);
<INITIAL>"ancestor-or-self"{S}"::"                          RECOGNIZE(_AXIS_ANCESTOR_OR_SELF_);
<INITIAL>"ancestor"{S}"::"                                  RECOGNIZE(_AXIS_ANCESTOR_);
<INITIAL>"attribute"{S}"::"                                 RECOGNIZE(_AXIS_ATTRIBUTE_);
<INITIAL>"child"{S}"::"                                     RECOGNIZE(_AXIS_CHILD_);
<INITIAL>"descendant-or-self"{S}"::"                        RECOGNIZE(_AXIS_DESCENDANT_OR_SELF_);
<INITIAL>"descendant"{S}"::"                                RECOGNIZE(_AXIS_DESCENDANT_);
<INITIAL>"following-sibling"{S}"::"                         RECOGNIZE(_AXIS_FOLLOWING_SIBLING_);
<INITIAL>"following"{S}"::"                                 RECOGNIZE(_AXIS_FOLLOWING_);
<INITIAL>"namespace"{S}"::"                                 RECOGNIZE(_AXIS_NAMESPACE_);
<INITIAL>"parent"{S}"::"                                    RECOGNIZE(_AXIS_PARENT_);
<INITIAL>"preceding-sibling"{S}"::"                         RECOGNIZE(_AXIS_PRECEDING_SIBLING_);
<INITIAL>"preceding"{S}"::"                                 RECOGNIZE(_AXIS_PRECEDING_);
<INITIAL>"self"{S}"::"                                      RECOGNIZE(_AXIS_SELF_);
<INITIAL,OPERATOR>","                                       BEGIN(INITIAL); RECOGNIZE(_COMMA_);
<INITIAL>"if"{S}"("                                         RECOGNIZE(_IF_LPAR_);
<INITIAL,OPERATOR>"["                                       BEGIN(INITIAL); RECOGNIZE(_LBRACK_);
<INITIAL,OPERATOR>"("                                       BEGIN(INITIAL); RECOGNIZE(_LPAR_);
<INITIAL,OPERATOR>"-"                                       BEGIN(INITIAL); RECOGNIZE(_MINUS_);
<INITIAL,OPERATOR>"+"                                       BEGIN(INITIAL); RECOGNIZE(_PLUS_);
<INITIAL,OPERATOR>"?"                                       BEGIN(INITIAL); RECOGNIZE(_QUESTION_);
<INITIAL>{QName}{S}"("                                      RECOGNIZE(_QNAME_LPAR_);
<INITIAL,OPERATOR>"/"                                       BEGIN(INITIAL); RECOGNIZE(_SLASH_);
<INITIAL,OPERATOR>"//"                                      BEGIN(INITIAL); RECOGNIZE(_SLASHSLASH_);
<INITIAL>{QName}                                            BEGIN(OPERATOR); RECOGNIZE(_QNAME_);

 /* OPERATOR state */

<OPERATOR>"and"                                             BEGIN(INITIAL); RECOGNIZE(_AND_);
<OPERATOR>"div"                                             BEGIN(INITIAL); RECOGNIZE(_DIV_);
<OPERATOR>"else"                                            BEGIN(INITIAL); RECOGNIZE(_ELSE_);
<OPERATOR>"="                                               BEGIN(INITIAL); RECOGNIZE(_EQUALS_);
<OPERATOR>"except"                                          BEGIN(INITIAL); RECOGNIZE(_EXCEPT_);
<OPERATOR>"eq"                                              BEGIN(INITIAL); RECOGNIZE(_FORTRAN_EQ_);
<OPERATOR>"ge"                                              BEGIN(INITIAL); RECOGNIZE(_FORTRAN_GE_);
<OPERATOR>"gt"                                              BEGIN(INITIAL); RECOGNIZE(_FORTRAN_GT_);
<OPERATOR>"le"                                              BEGIN(INITIAL); RECOGNIZE(_FORTRAN_LE_);
<OPERATOR>"lt"                                              BEGIN(INITIAL); RECOGNIZE(_FORTRAN_LT_);
<OPERATOR>"ne"                                              BEGIN(INITIAL); RECOGNIZE(_FORTRAN_NE_);
<OPERATOR>">="                                              BEGIN(INITIAL); RECOGNIZE(_GT_EQUALS_);
<OPERATOR>">>"                                              BEGIN(INITIAL); RECOGNIZE(_GT_GT_);
<OPERATOR>">"                                               BEGIN(INITIAL); RECOGNIZE(_GT_);
<OPERATOR>"idiv"                                            BEGIN(INITIAL); RECOGNIZE(_INTEGER_DIV_);
 /* Global -> INITIAL ??? */
<OPERATOR>"intersect"                                       BEGIN(INITIAL); RECOGNIZE(_INTERSECT_);
<OPERATOR>"in"                                              BEGIN(INITIAL); RECOGNIZE(_IN_);
<OPERATOR>"isnot"                                           BEGIN(INITIAL); RECOGNIZE(_IS_NOT_);
<OPERATOR>"is"                                              BEGIN(INITIAL); RECOGNIZE(_IS_);
<OPERATOR>"<="                                              BEGIN(INITIAL); RECOGNIZE(_LT_EQUALS_);
<OPERATOR>"<<"                                              BEGIN(INITIAL); RECOGNIZE(_LT_LT_);
<OPERATOR>"<"                                               BEGIN(INITIAL); RECOGNIZE(_LT_);
<OPERATOR>"mod"                                             BEGIN(INITIAL); RECOGNIZE(_MOD_);
<OPERATOR>"*"                                               BEGIN(INITIAL); RECOGNIZE(_MULTIPLY_);
<OPERATOR>"!="                                              BEGIN(INITIAL); RECOGNIZE(_NOT_EQUALS_);
<OPERATOR>"or"                                              BEGIN(INITIAL); RECOGNIZE(_OR_);
<OPERATOR>"return"                                          BEGIN(INITIAL); RECOGNIZE(_RETURN_);
<OPERATOR>"satisfies"                                       BEGIN(INITIAL); RECOGNIZE(_SATISFIES_);
<OPERATOR>"then"                                            BEGIN(INITIAL); RECOGNIZE(_THEN_);
<OPERATOR>"to"                                              BEGIN(INITIAL); RECOGNIZE(_TO_);
<OPERATOR>"union"                                           BEGIN(INITIAL); RECOGNIZE(_UNION_);
<OPERATOR>"|"                                               BEGIN(INITIAL); RECOGNIZE(_VERTICAL_BAR_);

<OPERATOR>"instance"{Whitespace}"of"                        BEGIN(ITEMTYPE); RECOGNIZE(_INSTANCE_OF_);
<OPERATOR>"castable"{Whitespace}"as"                        BEGIN(ITEMTYPE); RECOGNIZE(_CASTABLE_AS_);
<OPERATOR>"cast"{Whitespace}"as"                            BEGIN(ITEMTYPE); RECOGNIZE(_CAST_AS_);
<OPERATOR>"treat"{Whitespace}"as"                           BEGIN(ITEMTYPE); RECOGNIZE(_TREAT_AS_);
 /* InContext -> ITEMTYPE ??? */

 /* ITEMTYPE state */

<ITEMTYPE>"empty"{S}"("{S}")"                               BEGIN(OPERATOR); RECOGNIZE(_EMPTY_);

<ITEMTYPE>"element"{S}"("                                   BEGIN(OCCURRENCEINDICATOR); PUSH(KINDTEST); RECOGNIZE(_ELEMENT_LPAR_);
<ITEMTYPE>"attribute"{S}"("                                 BEGIN(OCCURRENCEINDICATOR); PUSH(KINDTEST); RECOGNIZE(_ATTRIBUTE_LPAR_);
<ITEMTYPE>"comment"{S}"("                                   BEGIN(OCCURRENCEINDICATOR); PUSH(KINDTEST); RECOGNIZE(_COMMENT_LPAR_);
<ITEMTYPE>"text"{S}"("                                      BEGIN(OCCURRENCEINDICATOR); PUSH(KINDTEST); RECOGNIZE(_TEXT_LPAR_);
<ITEMTYPE>"node"{S}"("                                      BEGIN(OCCURRENCEINDICATOR); PUSH(KINDTEST); RECOGNIZE(_NODE_LPAR_);
<ITEMTYPE>"processing-instruction"{S}"("                    BEGIN(OCCURRENCEINDICATOR); PUSH(KINDTEST); RECOGNIZE(_PROCESSING_INSTRUCTION_LPAR_);
<ITEMTYPE>"document-node"{S}"("                             BEGIN(OCCURRENCEINDICATOR); PUSH(KINDTEST); RECOGNIZE(_DOCUMENT_NODE_LPAR_);

<ITEMTYPE>"item"{S}"("{S}")"                                BEGIN(OCCURRENCEINDICATOR); RECOGNIZE(_ITEM_);
<ITEMTYPE>{QName}                                           BEGIN(OCCURRENCEINDICATOR); RECOGNIZE(_QNAME_);

 /* KINDTEST state */

<KINDTEST>"type"{S}"("{S}{QName}{S}")"{S}"/"                BEGIN(SCHEMACONTEXTSTEP); RECOGNIZE(_TYPE_QNAME_STEP_);
<KINDTEST,SCHEMACONTEXTSTEP>{QName}{S}"/"                   BEGIN(SCHEMACONTEXTSTEP); RECOGNIZE(_SCHEMA_CONTEXT_STEP_);

<KINDTEST,CLOSEKINDTEST>")"                                 POP(); RECOGNIZE(_RPAR_);

<KINDTEST>"*"                                               BEGIN(CLOSEKINDTEST); RECOGNIZE(_STAR_);
<KINDTEST,SCHEMACONTEXTSTEP>{QName}                         BEGIN(CLOSEKINDTEST); RECOGNIZE(_QNAME_);

<KINDTEST>{StringLiteral}                                   RECOGNIZE(_STRING_LITERAL_);
 /* Global -> KINDTEST ??? */
 /* InContextForKindTest -> KINDTEST ??? */

 /* OCCURRENCEINDICATOR state */

<OCCURRENCEINDICATOR>"*"                                    BEGIN(OPERATOR); RECOGNIZE(_STAR_);
<OCCURRENCEINDICATOR>"+"                                    BEGIN(OPERATOR); RECOGNIZE(_PLUS_);
<OCCURRENCEINDICATOR>"?"                                    BEGIN(OPERATOR); RECOGNIZE(_QUESTION_);
<OCCURRENCEINDICATOR>{Char}                                 BEGIN(OPERATOR); yyless(0);


 /*CLOSEKINDTEST state */

<CLOSEKINDTEST>","                                          BEGIN(KINDTEST); RECOGNIZE(_COMMA_);

<CLOSEKINDTEST>"nillable"                                   RECOGNIZE(_NILLABLE_);

 /* SCHEMACONTEXTSTEP state */

 /* VARNAME state */

<VARNAME>{QName}                                            BEGIN(OPERATOR); RECOGNIZE(_VARNAME_);

 /* EXPR_COMMENT state */

<EXPR_COMMENT>":)"                                          POP();
<EXPR_COMMENT>{Char}                                        /* ignore it */
               
<*>[\x0000-\xFFFF]                                          {
                                                                char buff[128];
                                                                sprintf(buff,"Unexpected character '%c' (0x%X)",yytext[0],yytext[0]);
                                                                YY_FATAL_ERROR(buff);
                                                            }
                                                            
%%

bool whitespaceChar(const YY_CHAR *charPtr) {

  XMLCh xmlCh = *charPtr;

  if(xmlCh == 0x0009 || xmlCh == 0x000D || xmlCh == 0x000A || xmlCh == 0x0020) {
    return true;
  }
  
  return false;
}
  
int XPathyylex(YYSTYPE *lvalp, void *pcontrol) {

  yyFlexLexer *theLexer = ((XPathParserControl *)pcontrol)->lexer;
  int retVal = theLexer->yylex();

  YY_CHAR *dup;
  const YY_CHAR *input, *ptr;

  switch(retVal) {
    
  case _TYPE_QNAME_STEP_:
    {
      input = theLexer->YYText();
    
      //Skip `type'
      ptr = input + 4;
      //Skip whitespace
      while(whitespaceChar(ptr)) {
        ptr++;
      }
      //Skip '('
      ptr++;
      //Skip whitespace
      while(whitespaceChar(ptr)) {
        ptr++;
      }

      unsigned int length = theLexer->YYLeng() - (ptr - input);

      dup = new YY_CHAR[length + 1];
      memcpy((void *)dup, (void *)ptr, length * sizeof(YY_CHAR));
      lvalp->wString = dup;

      //Terminate the string before whitespace or ')'
      while(!whitespaceChar(dup) && *dup!=')') {
        dup++;
      }
      *dup = 0;
    }
    break;

  case _SCHEMA_CONTEXT_STEP_:
    dup = new YY_CHAR[theLexer->YYLeng()];
    memcpy((void *)dup, (void *)theLexer->YYText(), (theLexer->YYLeng() - 1) * sizeof(YY_CHAR));
    lvalp->wString = dup;
    dup += theLexer->YYLeng() - 1; 
	*dup-- = 0;
    while(whitespaceChar(dup)) {
      *dup-- = 0;
    }
    break;

  case _NCNAME_COLON_STAR_:

    dup = new YY_CHAR[theLexer->YYLeng() - 1];
    memcpy((void *)dup, (void *)theLexer->YYText(), (theLexer->YYLeng() - 2) * sizeof(YY_CHAR));
    lvalp->wString = dup;
    dup += theLexer->YYLeng() - 2;
    while(whitespaceChar(dup)) {
      dup--;
    }
    *dup = 0;
    break;

  case _STAR_COLON_NCNAME_:

    dup = new YY_CHAR[theLexer->YYLeng() - 1];
    memcpy((void *)dup, (void *)(theLexer->YYText() + 2), (theLexer->YYLeng() - 2) * sizeof(YY_CHAR));
    dup[theLexer->YYLeng() - 2] = 0;
    lvalp->wString = dup;
    break;

  case _STRING_LITERAL_:

    dup = new YY_CHAR[theLexer->YYLeng() - 1];
    memcpy((void *)dup, (void *)(theLexer->YYText() + 1), (theLexer->YYLeng() - 2) * sizeof(YY_CHAR));
    dup[theLexer->YYLeng() - 2] = 0;
    // TODO: collapse escaped quotes
    lvalp->wString = dup;
    break;

  case _QNAME_LPAR_:
    {
      ptr = input = theLexer->YYText();
      
      while(!whitespaceChar(ptr) && !(*ptr == '(')) {
        ptr++;
      } 
      
      unsigned int length = ptr - input;

      dup = new YY_CHAR[length + 1];
      memcpy((void *)dup, (void *)input, length * sizeof(YY_CHAR));
      dup[length] = 0;
      lvalp->wString = dup;
      break;
    }

  case _VARNAME_:
  case _QNAME_:
  case _INTEGER_LITERAL_:
  case _DOUBLE_LITERAL_:
  case _DECIMAL_LITERAL_:
    dup = new YY_CHAR[theLexer->YYLeng() + 1];
    memcpy((void *)dup, (void *)theLexer->YYText(), theLexer->YYLeng() * sizeof(YY_CHAR));
    dup[theLexer->YYLeng()] = 0;
    lvalp->wString = dup;
    break;

  }
  
  return retVal;
}

void yyFlexLexer::forceItemTypeState(void) {

  BEGIN(ITEMTYPE);
}


Więcej informacji o liście dyskusyjnej pld-devel-pl