Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

145 wiersze
6.2 KiB

  1. """
  2. pygments.lexers.ecl
  3. ~~~~~~~~~~~~~~~~~~~
  4. Lexers for the ECL language.
  5. :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
  6. :license: BSD, see LICENSE for details.
  7. """
  8. import re
  9. from pygments.lexer import RegexLexer, include, bygroups, words
  10. from pygments.token import Comment, Operator, Keyword, Name, String, \
  11. Number, Punctuation, Whitespace
  12. __all__ = ['ECLLexer']
  13. class ECLLexer(RegexLexer):
  14. """
  15. Lexer for the declarative big-data ECL language.
  16. """
  17. name = 'ECL'
  18. url = 'https://hpccsystems.com/training/documentation/ecl-language-reference/html'
  19. aliases = ['ecl']
  20. filenames = ['*.ecl']
  21. mimetypes = ['application/x-ecl']
  22. version_added = '1.5'
  23. flags = re.IGNORECASE | re.MULTILINE
  24. tokens = {
  25. 'root': [
  26. include('whitespace'),
  27. include('statements'),
  28. ],
  29. 'whitespace': [
  30. (r'\s+', Whitespace),
  31. (r'\/\/.*', Comment.Single),
  32. (r'/(\\\n)?\*(.|\n)*?\*(\\\n)?/', Comment.Multiline),
  33. ],
  34. 'statements': [
  35. include('types'),
  36. include('keywords'),
  37. include('functions'),
  38. include('hash'),
  39. (r'"', String, 'string'),
  40. (r'\'', String, 'string'),
  41. (r'(\d+\.\d*|\.\d+|\d+)e[+-]?\d+[lu]*', Number.Float),
  42. (r'(\d+\.\d*|\.\d+|\d+f)f?', Number.Float),
  43. (r'0x[0-9a-f]+[lu]*', Number.Hex),
  44. (r'0[0-7]+[lu]*', Number.Oct),
  45. (r'\d+[lu]*', Number.Integer),
  46. (r'[~!%^&*+=|?:<>/-]+', Operator),
  47. (r'[{}()\[\],.;]', Punctuation),
  48. (r'[a-z_]\w*', Name),
  49. ],
  50. 'hash': [
  51. (r'^#.*$', Comment.Preproc),
  52. ],
  53. 'types': [
  54. (r'(RECORD|END)\D', Keyword.Declaration),
  55. (r'((?:ASCII|BIG_ENDIAN|BOOLEAN|DATA|DECIMAL|EBCDIC|INTEGER|PATTERN|'
  56. r'QSTRING|REAL|RECORD|RULE|SET OF|STRING|TOKEN|UDECIMAL|UNICODE|'
  57. r'UNSIGNED|VARSTRING|VARUNICODE)\d*)(\s+)',
  58. bygroups(Keyword.Type, Whitespace)),
  59. ],
  60. 'keywords': [
  61. (words((
  62. 'APPLY', 'ASSERT', 'BUILD', 'BUILDINDEX', 'EVALUATE', 'FAIL',
  63. 'KEYDIFF', 'KEYPATCH', 'LOADXML', 'NOTHOR', 'NOTIFY', 'OUTPUT',
  64. 'PARALLEL', 'SEQUENTIAL', 'SOAPCALL', 'CHECKPOINT', 'DEPRECATED',
  65. 'FAILCODE', 'FAILMESSAGE', 'FAILURE', 'GLOBAL', 'INDEPENDENT',
  66. 'ONWARNING', 'PERSIST', 'PRIORITY', 'RECOVERY', 'STORED', 'SUCCESS',
  67. 'WAIT', 'WHEN'), suffix=r'\b'),
  68. Keyword.Reserved),
  69. # These are classed differently, check later
  70. (words((
  71. 'ALL', 'AND', 'ANY', 'AS', 'ATMOST', 'BEFORE', 'BEGINC++', 'BEST',
  72. 'BETWEEN', 'CASE', 'CONST', 'COUNTER', 'CSV', 'DESCEND', 'ENCRYPT',
  73. 'ENDC++', 'ENDMACRO', 'EXCEPT', 'EXCLUSIVE', 'EXPIRE', 'EXPORT',
  74. 'EXTEND', 'FALSE', 'FEW', 'FIRST', 'FLAT', 'FULL', 'FUNCTION',
  75. 'GROUP', 'HEADER', 'HEADING', 'HOLE', 'IFBLOCK', 'IMPORT', 'IN',
  76. 'JOINED', 'KEEP', 'KEYED', 'LAST', 'LEFT', 'LIMIT', 'LOAD', 'LOCAL',
  77. 'LOCALE', 'LOOKUP', 'MACRO', 'MANY', 'MAXCOUNT', 'MAXLENGTH',
  78. 'MIN SKEW', 'MODULE', 'INTERFACE', 'NAMED', 'NOCASE', 'NOROOT',
  79. 'NOSCAN', 'NOSORT', 'NOT', 'OF', 'ONLY', 'OPT', 'OR', 'OUTER',
  80. 'OVERWRITE', 'PACKED', 'PARTITION', 'PENALTY', 'PHYSICALLENGTH',
  81. 'PIPE', 'QUOTE', 'RELATIONSHIP', 'REPEAT', 'RETURN', 'RIGHT',
  82. 'SCAN', 'SELF', 'SEPARATOR', 'SERVICE', 'SHARED', 'SKEW', 'SKIP',
  83. 'SQL', 'STORE', 'TERMINATOR', 'THOR', 'THRESHOLD', 'TOKEN',
  84. 'TRANSFORM', 'TRIM', 'TRUE', 'TYPE', 'UNICODEORDER', 'UNSORTED',
  85. 'VALIDATE', 'VIRTUAL', 'WHOLE', 'WILD', 'WITHIN', 'XML', 'XPATH',
  86. '__COMPRESSED__'), suffix=r'\b'),
  87. Keyword.Reserved),
  88. ],
  89. 'functions': [
  90. (words((
  91. 'ABS', 'ACOS', 'ALLNODES', 'ASCII', 'ASIN', 'ASSTRING', 'ATAN',
  92. 'ATAN2', 'AVE', 'CASE', 'CHOOSE', 'CHOOSEN', 'CHOOSESETS',
  93. 'CLUSTERSIZE', 'COMBINE', 'CORRELATION', 'COS', 'COSH', 'COUNT',
  94. 'COVARIANCE', 'CRON', 'DATASET', 'DEDUP', 'DEFINE', 'DENORMALIZE',
  95. 'DISTRIBUTE', 'DISTRIBUTED', 'DISTRIBUTION', 'EBCDIC', 'ENTH',
  96. 'ERROR', 'EVALUATE', 'EVENT', 'EVENTEXTRA', 'EVENTNAME', 'EXISTS',
  97. 'EXP', 'FAILCODE', 'FAILMESSAGE', 'FETCH', 'FROMUNICODE',
  98. 'GETISVALID', 'GLOBAL', 'GRAPH', 'GROUP', 'HASH', 'HASH32',
  99. 'HASH64', 'HASHCRC', 'HASHMD5', 'HAVING', 'IF', 'INDEX',
  100. 'INTFORMAT', 'ISVALID', 'ITERATE', 'JOIN', 'KEYUNICODE', 'LENGTH',
  101. 'LIBRARY', 'LIMIT', 'LN', 'LOCAL', 'LOG', 'LOOP', 'MAP', 'MATCHED',
  102. 'MATCHLENGTH', 'MATCHPOSITION', 'MATCHTEXT', 'MATCHUNICODE', 'MAX',
  103. 'MERGE', 'MERGEJOIN', 'MIN', 'NOLOCAL', 'NONEMPTY', 'NORMALIZE',
  104. 'PARSE', 'PIPE', 'POWER', 'PRELOAD', 'PROCESS', 'PROJECT', 'PULL',
  105. 'RANDOM', 'RANGE', 'RANK', 'RANKED', 'REALFORMAT', 'RECORDOF',
  106. 'REGEXFIND', 'REGEXREPLACE', 'REGROUP', 'REJECTED', 'ROLLUP',
  107. 'ROUND', 'ROUNDUP', 'ROW', 'ROWDIFF', 'SAMPLE', 'SET', 'SIN',
  108. 'SINH', 'SIZEOF', 'SOAPCALL', 'SORT', 'SORTED', 'SQRT', 'STEPPED',
  109. 'STORED', 'SUM', 'TABLE', 'TAN', 'TANH', 'THISNODE', 'TOPN',
  110. 'TOUNICODE', 'TRANSFER', 'TRIM', 'TRUNCATE', 'TYPEOF', 'UNGROUP',
  111. 'UNICODEORDER', 'VARIANCE', 'WHICH', 'WORKUNIT', 'XMLDECODE',
  112. 'XMLENCODE', 'XMLTEXT', 'XMLUNICODE'), suffix=r'\b'),
  113. Name.Function),
  114. ],
  115. 'string': [
  116. (r'"', String, '#pop'),
  117. (r'\'', String, '#pop'),
  118. (r'[^"\']+', String),
  119. ],
  120. }
  121. def analyse_text(text):
  122. """This is very difficult to guess relative to other business languages.
  123. -> in conjunction with BEGIN/END seems relatively rare though."""
  124. result = 0
  125. if '->' in text:
  126. result += 0.01
  127. if 'BEGIN' in text:
  128. result += 0.01
  129. if 'END' in text:
  130. result += 0.01
  131. return result