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