syntax2.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:6k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Copyright ( C ) Microsoft Corporation, 1994 - 2002.
  4. //
  5. //  File:       syntax2.cpp
  6. //
  7. //  Contents:   data definitions for the syntax modules
  8. //
  9. //  Classes:
  10. //
  11. //  Functions:
  12. //
  13. //  Coupling:
  14. //
  15. //  Notes:
  16. //
  17. //  Author:     Eric Niebler ( ericne@microsoft.com )
  18. //
  19. //  History:    3-29-00   ericne   Created
  20. //
  21. //----------------------------------------------------------------------------
  22. #include "syntax2.h"
  23. namespace regex
  24. {
  25. REGEX_SELECTANY TOKEN const perl_syntax_base::s_rgreg[ UCHAR_MAX + 1 ] =
  26. {
  27. /*  0*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  28. /*  8*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  29. /* 16*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  30. /* 24*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  31. /* 32*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    END_LINE,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  32. /* 40*/ BEGIN_GROUP, END_GROUP, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,  MATCH_ANY, NO_TOKEN,
  33. /* 48*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  34. /* 56*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  35. /* 64*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  36. /* 72*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  37. /* 80*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  38. /* 88*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN, BEGIN_CHARSET,      ESCAPE,  NO_TOKEN, BEGIN_LINE, NO_TOKEN,
  39. /* 96*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  40. /*104*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  41. /*112*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN,    NO_TOKEN,  NO_TOKEN,   NO_TOKEN, NO_TOKEN,
  42. /*120*/    NO_TOKEN,  NO_TOKEN, NO_TOKEN,      NO_TOKEN, ALTERNATION,  NO_TOKEN,   NO_TOKEN, NO_TOKEN
  43. // and the rest are 0...
  44. };
  45. REGEX_SELECTANY TOKEN const perl_syntax_base::s_rgescape[ UCHAR_MAX + 1 ] =
  46. {
  47. /*  0*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  48.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  49. /*  8*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  50.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  51. /* 16*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  52.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  53. /* 24*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  54.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  55. /* 32*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  56.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  57. /* 40*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  58.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  59. /* 48*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  60.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  61. /* 56*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  62.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  63. /* 64*/    NO_TOKEN,   ESC_BEGIN_STRING, ESC_NOT_WORD_BOUNDARY,       NO_TOKEN,
  64.       ESC_NOT_DIGIT, ESC_QUOTE_META_OFF,              NO_TOKEN,       NO_TOKEN,
  65. /* 72*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  66.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  67. /* 80*/    NO_TOKEN,  ESC_QUOTE_META_ON,              NO_TOKEN,  ESC_NOT_SPACE,
  68.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,   ESC_NOT_WORD,
  69. /* 88*/    NO_TOKEN,           NO_TOKEN,        ESC_END_STRING,       NO_TOKEN,
  70.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  71. /* 96*/    NO_TOKEN,           NO_TOKEN,     ESC_WORD_BOUNDARY,       NO_TOKEN,
  72.           ESC_DIGIT,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  73. /*104*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  74.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN,
  75. /*112*/    NO_TOKEN,           NO_TOKEN,              NO_TOKEN,      ESC_SPACE,
  76.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       ESC_WORD,
  77. /*120*/    NO_TOKEN,           NO_TOKEN,      ESC_END_STRING_z,       NO_TOKEN,
  78.            NO_TOKEN,           NO_TOKEN,              NO_TOKEN,       NO_TOKEN
  79. // and the rest are 0...
  80. };
  81. namespace detail
  82. {
  83. REGEX_SELECTANY extern posix_charset_type const g_rgposix_charsets[] =
  84. {
  85.     { "[:alnum:]",    9 },
  86.     { "[:^alnum:]",  10 },
  87.     { "[:alpha:]",    9 },
  88.     { "[:^alpha:]",  10 },
  89.     { "[:blank:]",    9 },
  90.     { "[:^blank:]",  10 },
  91.     { "[:cntrl:]",    9 },
  92.     { "[:^cntrl:]",  10 },
  93.     { "[:digit:]",    9 },
  94.     { "[:^digit:]",  10 },
  95.     { "[:graph:]",    9 },
  96.     { "[:^graph:]",  10 },
  97.     { "[:lower:]",    9 },
  98.     { "[:^lower:]",  10 },
  99.     { "[:print:]",    9 },
  100.     { "[:^print:]",  10 },
  101.     { "[:punct:]",    9 },
  102.     { "[:^punct:]",  10 },
  103.     { "[:space:]",    9 },
  104.     { "[:^space:]",  10 },
  105.     { "[:upper:]",    9 },
  106.     { "[:^upper:]",  10 },
  107.     { "[:xdigit:]",  10 },
  108.     { "[:^xdigit:]", 11 }
  109. };
  110. REGEX_SELECTANY extern size_t const g_cposix_charsets = ARRAYSIZE( g_rgposix_charsets );
  111. } // namespace detail
  112. } // namespace regex