Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

145 righe
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