~davidagraf/zorba/trace_without_debug_info

« back to all changes in this revision

Viewing changes to src/compiler/parser/xquery_scanner.l

  • Committer: David Graf
  • Date: 2012-06-27 07:20:59 UTC
  • mfrom: (10869.1.25 zorba)
  • Revision ID: davidagraf@gmail.com-20120627072059-723duu6vsbqu60ax
merged trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
58
58
   |______________________________________________________________________*/
59
59
 
60
60
#define PUSH_STATE(state) \
61
 
    do { \
62
 
        yy_push_state(state); \
63
 
    } while(0)
 
61
  do { \
 
62
    yy_push_state(state); \
 
63
  } while(0)
64
64
 
65
65
#define POP_STATE() \
66
 
    do { \
67
 
        yy_pop_state(); \
68
 
    } while(0)
 
66
  do { \
 
67
    if (yy_get_start_stack_ptr() > 0) \
 
68
      yy_pop_state(); \
 
69
  } while(0)
69
70
 
70
71
#define PUSH_AND_BEGIN( pushed, new ) \
71
 
    do { \
72
 
        BEGIN new; \
73
 
        PUSH_STATE(pushed); \
74
 
    } while(0)
 
72
  do { \
 
73
    BEGIN new; \
 
74
    PUSH_STATE(pushed); \
 
75
  } while(0)
75
76
 
76
77
 
77
78
  /*______________________________________________________________________
242
243
CommentChars    ([^:]|":"+[^:)])*":)"
243
244
Comment         "(:"{CommentChars}
244
245
blank           [ \t]
245
 
S1              [ \t\r\n\f]
246
 
S               {S1}*
247
 
SP              ({S1}|{Comment})+
248
 
SPNoComment     {S1}+
 
246
WS              [ \t\r\n\f]
 
247
WSstar          {WS}*
 
248
WSplus          {WS}+
 
249
WSOrComment     ({WS}|{Comment})+
 
250
WSOrCommentStar ({WS}|{Comment})*
 
251
 
249
252
 
250
253
  /*_____________________________________________________________________
251
254
   |
282
285
 
283
286
  /*_____________________________________________________________________
284
287
   |
 
288
   |  QName definition
 
289
   |______________________________________________________________________*/
 
290
EQName       ({StringLiteral}":"){NCName}
 
291
 
 
292
  /*_____________________________________________________________________
 
293
   |
285
294
   |  Annotation QName definition
286
295
   |______________________________________________________________________*/
287
296
AnnotationQName  "%"({NCName}":")?{NCName}
352
361
   |  Exclusive start states
353
362
   |______________________________________________________________________*/
354
363
 
 
364
%x INITIAL_ACCUMULATOR
355
365
%x MODE_APOS_ATTRIBUTE_CONTENT
356
366
%x MODE_QUOTE_ATTRIBUTE_CONTENT
357
367
%x MODE_ELEM_COMP_CONSTR
386
396
   |  expression or subexpression.
387
397
   |______________________________________________________________________*/
388
398
 
 
399
<INITIAL,INITIAL_ACCUMULATOR>{
 
400
 
389
401
"(" { return token::LPAR; }
390
402
";" { return token::SEMI; }
391
403
"," { return token::COMMA; }
399
411
".." { return token::DOT_DOT; }
400
412
"." { return token::DOT; }
401
413
"?" { return token::HOOK; }
402
 
"]" { return token::RBRACK; }
403
414
"$" { return token::DOLLAR; }
404
415
"#" { return token::HASH; }
405
416
":" { return token::COLON; }
420
431
  theDriver->theDocComment.str("");
421
432
  return token::MODULE;
422
433
}
 
434
 
423
435
    /* Tokens with state transitions */
424
436
"element" {  PUSH_STATE(MODE_ELEM_COMP_CONSTR); }
425
437
"attribute" { PUSH_STATE(MODE_ATTR_COMP_CONSTR); }
545
557
"keys" { return token::KEYS; }
546
558
 
547
559
 
 
560
  /*______________________________________________________________________
 
561
   |
 
562
   |  JSONIQ tokens
 
563
   |______________________________________________________________________*/
 
564
 
 
565
  /* "[" and "]" are not JSONiq tokens, but they have been moved here because
 
566
     of the "{[ ]}" grammar construct */
 
567
"[" { PUSH_STATE(INITIAL); return token::LBRACK; }
 
568
"]" { POP_STATE(); return token::RBRACK; }
 
569
 
 
570
"{[" { PUSH_STATE(INITIAL_ACCUMULATOR); return token::L_ACCUMULATOR_OBJ_UNION; }
 
571
"]}"  {
 
572
        // This if() disambiguates between the "{[ ]}" grammar construct and the
 
573
        // plain "[ ]" predicate
 
574
        if (YY_START == INITIAL_ACCUMULATOR)
 
575
        {
 
576
          POP_STATE();
 
577
          return token::R_ACCUMULATOR_OBJ_UNION;
 
578
        }
 
579
        else
 
580
        {
 
581
          POP_STATE();
 
582
          yyless(1);
 
583
          return token::RBRACK;
 
584
        }
 
585
      }
 
586
 
 
587
"{|" { return token::L_SIMPLE_OBJ_UNION; }
 
588
"|}" { return token::R_SIMPLE_OBJ_UNION; }
 
589
"json" { return token::JSON; }
 
590
"append" { return token::APPEND; }
 
591
"position" { return token::POSITION; }
 
592
"json-item" { return token::JSON_ITEM; }
 
593
"structured-item" { return token::STRUCTURED_ITEM; }
 
594
"array" {  return token::ARRAY; }
 
595
"object" {  return token::OBJECT; }
 
596
 
 
597
 
548
598
    /*______________________________________________________________________
549
599
     |
550
600
     | FT tokens
613
663
"idiv" { return token::IDIV; }
614
664
"intersect" { return token::INTERSECT; }
615
665
"is" { return token::IS; }
616
 
"[" { return token::LBRACK; }
617
666
"<=" { return token::LE; }
618
667
"<<" { return token::PRECEDES; }
619
668
"mod" { return token::MOD; }
722
771
 
723
772
{QName}                       { TRY_SVAL_TOKEN(QNAME_SVAL, put_qname(yytext, yyleng), yytext); }
724
773
 
 
774
{EQName}                      { TRY_SVAL_TOKEN(EQNAME_SVAL, put_qname(yytext, yyleng, false, false, true), yytext); }
 
775
 
725
776
{AnnotationQName}             { TRY_SVAL_TOKEN(ANNOTATION_QNAME_SVAL, put_qname(yytext+1, yyleng-1), yytext+1); /* skip the % sign */ }
726
777
 
727
778
{AnnotationEQName}            { TRY_SVAL_TOKEN(ANNOTATION_EQNAME_SVAL, put_qname(yytext+1, yyleng-1, false, false, true), yytext+1); /* skip the % sign */ }
773
824
  /* -------------------- */
774
825
"(#" { BEGIN MODE_PRAGMA; return token::PRAGMA_BEGIN;}
775
826
 
 
827
 
776
828
  /* push initial state */
777
829
  /* ------------------ */
778
830
"{" { PUSH_STATE(INITIAL); return token::LBRACE; }
780
832
 
781
833
  /* pop previous state */
782
834
  /* ------------------ */
783
 
"}" {
784
 
  if (yy_get_start_stack_ptr() > 0)   // The lexer will catch the unexpected right brace and generate a syntax error
785
 
    POP_STATE();
786
 
  return token::RBRACE;
787
 
}
788
 
 
789
 
 
790
 
{S} {
 
835
"}" { POP_STATE(); return token::RBRACE; }
 
836
 
 
837
 
 
838
{WSstar} {
791
839
  /* eat up whitespace */
792
840
}
793
841
 
794
 
  /* END <MODE INITIAL> */
795
 
 
796
 
 
797
 
  /*______________________________________________________________________
798
 
   |
799
 
   | OCCURRENCE_INDICATOR State
800
 
   |
801
 
   | This special state is needed to distinguish occurrence indicators
802
 
   | that appear in the SequenceType production. For instance, compare
803
 
   | "foo instance of baz*" to "baz*foo". In the first case, the "*" is
804
 
   | interpreted as an occurrence indicator, and in the second case, it
805
 
   | must be interpreted as a multiplication operator. But, when in the
806
 
   | OCCURRENCEINDICATOR state, if anything else other than "?", "*",
807
 
   | "+", those symbols must be interpreted in the OPERATOR state. For
808
 
   | instance, this would occur with the expression "foo instance of baz
809
 
   | and $x", with the operator "and".
810
 
   |______________________________________________________________________*/
811
 
 
812
 
  /* <MODE_OCCURRENCE_INDICATOR>{ */
813
 
 
814
 
  /* transition to OPERATOR */
815
 
  /* ---------------------- */
816
 
 
817
 
  /* "?" {
818
 
  // TODO:
819
 
  return token::OCCURS_HOOK;
820
 
}
821
 
 
822
 
"*" {
823
 
  // TODO:
824
 
  return token::OCCURS_STAR;
825
 
}
826
 
 
827
 
"+" {
828
 
  // TODO:
829
 
  return token::OCCURS_PLUS;
830
 
} */
831
 
 
832
 
 
833
 
  /* } */ /* MODE_OCCURRENCE_INDICATOR> */
 
842
} /* END <MODE INITIAL,INITIAL_ACCUMULATOR> */
 
843
 
834
844
 
835
845
   /*______________________________________________________________________
836
846
    |
869
879
  }
870
880
}
871
881
<MODE_ELEM_COMP_CONSTR,MODE_ATTR_COMP_CONSTR,MODE_PI_COMP_CONSTR>"(:"       { PUSH_STATE(MODE_EXPR_COMMENT); }
872
 
<MODE_ELEM_COMP_CONSTR,MODE_ATTR_COMP_CONSTR,MODE_PI_COMP_CONSTR>{S}        { /* continue lexing */ }
 
882
<MODE_ELEM_COMP_CONSTR,MODE_ATTR_COMP_CONSTR,MODE_PI_COMP_CONSTR>{WSstar}   { /* continue lexing */ }
873
883
<MODE_ELEM_COMP_CONSTR,MODE_ATTR_COMP_CONSTR,MODE_PI_COMP_CONSTR><<EOF>>    { COMP_CONSTR_ROLLBACK(false); }
874
884
<MODE_ELEM_COMP_CONSTR,MODE_ATTR_COMP_CONSTR,MODE_PI_COMP_CONSTR>{CatchAll} { COMP_CONSTR_ROLLBACK(true); }
875
885
 
883
893
   | OPERATOR state.
884
894
   |______________________________________________________________________*/
885
895
 
886
 
<MODE_PRAGMA>{QName}{SPNoComment}                    { BEGIN MODE_PRAGMACONTENTS; TRY_SVAL_TOKEN(QNAME_SVAL,  put_qname(yytext, yyleng, true, true), yytext); }
887
 
<MODE_PRAGMA>{StringLiteral}":"{NCName}{SPNoComment} { BEGIN MODE_PRAGMACONTENTS; TRY_SVAL_TOKEN(EQNAME_SVAL, put_qname(yytext, yyleng, true, true), yytext); }
 
896
<MODE_PRAGMA>{QName}{WSplus}                         { BEGIN MODE_PRAGMACONTENTS; TRY_SVAL_TOKEN(QNAME_SVAL,  put_qname(yytext, yyleng, true, true), yytext); }
 
897
<MODE_PRAGMA>{StringLiteral}":"{NCName}{WSplus}      { BEGIN MODE_PRAGMACONTENTS; TRY_SVAL_TOKEN(EQNAME_SVAL, put_qname(yytext, yyleng, true, true), yytext); }
888
898
<MODE_PRAGMA>{QName}"#)"                             { BEGIN INITIAL; TRY_SVAL_TOKEN(QNAME_SVAL_AND_END_PRAGMA,  put_qname(yytext, yyleng-2), yytext); }
889
899
<MODE_PRAGMA>{StringLiteral}":"{NCName}"#)"          { BEGIN INITIAL; TRY_SVAL_TOKEN(EQNAME_SVAL_AND_END_PRAGMA, put_qname(yytext, yyleng-2), yytext); }
890
 
<MODE_PRAGMA>{S} { /* continue lexing */ }
 
900
<MODE_PRAGMA>{WSplus}                                { /* continue lexing */ }
891
901
 
892
902
 
893
903
  /*______________________________________________________________________
916
926
<MODE_START_TAG>\" { BEGIN MODE_QUOTE_ATTRIBUTE_CONTENT; return token::QUOTE; }
917
927
<MODE_START_TAG>\' { BEGIN MODE_APOS_ATTRIBUTE_CONTENT; return token::APOS; }
918
928
<MODE_START_TAG>"=" { return token::EQUALS; }
919
 
<MODE_START_TAG>{S} { return token::BLANK; }
 
929
<MODE_START_TAG>{WSstar} { return token::BLANK; }
920
930
<MODE_START_TAG>"/>" { POP_STATE(); return token::EMPTY_TAG_END; }
921
931
<MODE_START_TAG>{QName} { TRY_SVAL_TOKEN (QNAME_SVAL, put_qname(yytext, yyleng), yytext); }
922
932
<MODE_START_TAG>{CatchAll} { yylval->err = getDriver()->unrecognizedCharErr(yytext, *yylloc); return token::UNRECOGNIZED; }
960
970
   |______________________________________________________________________*/
961
971
 
962
972
<MODE_END_TAG>">" { POP_STATE(); return token::TAG_END; }
963
 
<MODE_END_TAG>{QName}{S} { TRY_SVAL_TOKEN (QNAME_SVAL, put_qname(yytext, yyleng, false, true), yytext); }
 
973
<MODE_END_TAG>{QName}{WSstar} { TRY_SVAL_TOKEN (QNAME_SVAL, put_qname(yytext, yyleng, false, true), yytext); }
964
974
<MODE_END_TAG><<EOF>> { yylval->err = getDriver()->noClosingTagForElementConstructor(*yylloc); return token::UNRECOGNIZED; }
965
975
 
966
976
 
1015
1025
   | instruction name are recognized.
1016
1026
   |______________________________________________________________________*/
1017
1027
 
1018
 
<MODE_PROCESSING_INSTRUCTION>{SP} { BEGIN MODE_PROCESSING_INSTRUCTION_CONTENT; /* continue lexing */ }
 
1028
<MODE_PROCESSING_INSTRUCTION>{WSOrComment} { BEGIN MODE_PROCESSING_INSTRUCTION_CONTENT; /* continue lexing */ }
1019
1029
<MODE_PROCESSING_INSTRUCTION>"?>" { POP_STATE(); return token::PI_END; }
1020
1030
<MODE_PROCESSING_INSTRUCTION>{NCName} /* PITarget */    { TRY_SVAL_TOKEN (NCNAME_SVAL, put(yytext, yyleng), yytext); }
1021
1031
 
1111
1121
  switch (state)
1112
1122
  {
1113
1123
    case INITIAL: return "INITIAL";
 
1124
    case INITIAL_ACCUMULATOR: return "INITIAL_ACCUMULATOR";
1114
1125
    case MODE_APOS_ATTRIBUTE_CONTENT: return "MODE_APOS_ATTRIBUTE_CONTENT";
1115
1126
    case MODE_ELEM_COMP_CONSTR: return "MODE_ELEM_COMP_CONSTR";
1116
1127
    case MODE_ATTR_COMP_CONSTR: return "MODE_ATTR_COMP_CONSTR";