15
15
lexer grammar CobolLexer;
16
16
import CICSLexer;
17
17
channels {TECHNICAL}
18
+ @header {
19
+ import java.util.regex.Matcher;
20
+ import java.util.regex.Pattern;
21
+ import org.apache.commons.lang3.StringUtils;
22
+ }
23
+ @lexer::members {
24
+ private Pattern titlePattern = Pattern.compile(" TITLE\\ s*(.*?)\\ .?\\ s\\ n.*" , Pattern.CASE_INSENSITIVE);
25
+ private void isTitlePresent() {
26
+ String input = _input.getText(Interval.of(_tokenStartCharIndex, _input.index()));
27
+ if (input!=null) {
28
+ Matcher matcher = titlePattern.matcher(input);
29
+ if (matcher.matches()){
30
+ String matchedTitle = matcher.group(1 );
31
+ if (matchedTitle.isEmpty())
32
+ reportWrongArguments(" lexer.titleCompilerDirective" );
33
+ }
34
+ }
35
+ }
36
+ private void reportWrongArguments(String msg) {
37
+ ANTLRErrorListener listener = getErrorListenerDispatch();
38
+ String text = _input.getText(Interval.of(_tokenStartCharIndex, _input.index()));
39
+ int stop = _input.index();
40
+ if (text.contains(" \r " )) {
41
+ stop--;
42
+ }
43
+ CommonToken lspToken = new CommonTokenFactory().create(_tokenFactorySourcePair, _type, text,
44
+ _channel, _input.index()-text.length()+1,
45
+ stop,
46
+ _tokenStartLine, _tokenStartCharPositionInLine);
47
+ lspToken.setTokenIndex(_tokenStartCharPositionInLine);
48
+ lspToken.setText(text.replace(" \r " ," " ).replace(" \n " ," " ));
49
+ listener.syntaxError(this, lspToken, _tokenStartLine,
50
+ _tokenStartCharPositionInLine, msg, null);
51
+ }
18
52
19
- TITLESTATEMENT : (T I T L E ' ' + .*? NEWLINE ) -> skip;
53
+ private void isLanguageNamePresent() {
54
+ String input = _input.getText(Interval.of(_tokenStartCharIndex, _input.index()))
55
+ .replace(" \r " ," " ).replace(" \n " ," " ).trim();
56
+ if (StringUtils.isBlank(input.substring(5 , input.length()-1 ))) {
57
+ reportWrongArguments(" lexer.langMissingEnterDirective" );
58
+ }
59
+ }
60
+ }
20
61
62
+ // compiler directive tokens
63
+ TITLESTATEMENT : (T I T L E ' ' + .*? NEWLINE ) {isTitlePresent();} -> channel(TECHNICAL );
64
+
65
+ CONTROL_DIRECTIVE : ASTERISKCHAR (CONTROL | C B L ) ((' ' | COMMACHAR )
66
+ (SOURCE | NO SOURCE | LIST | NO LIST | MAP | NO MAP
67
+ | IDENTIFIER ? {reportWrongArguments(" lexer.controlDirectiveWrongArgs" );} )
68
+ )+ DOT ?-> channel(TECHNICAL );
69
+
70
+ ENTER_STMT : E N T E R ' ' + IDENTIFIER ? {isLanguageNamePresent();} IDENTIFIER ? DOT -> channel(TECHNICAL );
21
71
22
72
// keywords
23
73
ACCEPT : A C C E P T ;
@@ -49,6 +99,7 @@ BOTTOM : B O T T O M;
49
99
BOUNDS : B O U N D S ;
50
100
BYFUNCTION : B Y F U N C T I O N ;
51
101
BYTITLE : B Y T I T L E ;
102
+ CALC : C A L C ;
52
103
CANCEL : C A N C E L ;
53
104
CAPABLE : C A P A B L E ;
54
105
CCSVERSION : C C S V E R S I O N ;
@@ -91,7 +142,10 @@ CURRENCY : C U R R E N C Y;
91
142
DATE_COMPILED : D A T E MINUSCHAR C O M P I L E D ;
92
143
DATE_WRITTEN : D A T E MINUSCHAR W R I T T E N ;
93
144
DAY_OF_WEEK : D A Y MINUSCHAR O F MINUSCHAR W E E K ;
145
+ DB_KEY : D B MINUSCHAR K E Y ;
94
146
DBCS : D B C S ;
147
+ DBNAME : D B N A M E ;
148
+ DBNODE : D B N O D E ;
95
149
DEBUGGING : D E B U G G I N G ;
96
150
DEBUG_CONTENTS : D E B U G MINUSCHAR C O N T E N T S ;
97
151
DEBUG_ITEM : D E B U G MINUSCHAR I T E M ;
@@ -108,12 +162,15 @@ DEPENDING : D E P E N D I N G;
108
162
DESCENDING : D E S C E N D I N G ;
109
163
DFHRESP : D F H R E S P ;
110
164
DFHVALUE : D F H V A L U E ;
165
+ DICTNAME : D I C T N A M E ;
166
+ DICTNODE : D I C T N O D E ;
111
167
DISK : D I S K ;
112
168
DISPLAY : D I S P L A Y ;
113
169
DISPLAY_1 : D I S P L A Y MINUSCHAR ' 1' ;
114
170
DIVIDE : D I V I D E ;
115
171
DIVISION : D I V I S I O N ;
116
172
DOWN : D O W N ;
173
+ DUPLICATE : D U P L I C A T E ;
117
174
DUPLICATES : D U P L I C A T E S ;
118
175
EGCS : E G C S ;
119
176
EGI : E G I ;
@@ -155,6 +212,7 @@ FD : F D;
155
212
FILE_CONTROL : F I L E MINUSCHAR C O N T R O L ;
156
213
FILLER : F I L L E R ;
157
214
FINISH : F I N I S H ;
215
+ FIND : F I N D ;
158
216
FOOTING : F O O T I N G ;
159
217
FUNCTION_POINTER : F U N C T I O N MINUSCHAR P O I N T E R ;
160
218
GIVING : G I V I N G ;
@@ -210,7 +268,9 @@ LR : L R;
210
268
MAPS : M A P S ;
211
269
MAP_BINDS : MAP MINUSCHAR B I N D S ;
212
270
MANUAL : M A N U A L ;
271
+ MEMBERS : M E M B E R S ;
213
272
MEMORY : M E M O R Y ;
273
+ MODIFY : M O D I F Y ;
214
274
MODULES : M O D U L E S ;
215
275
MORE_LABELS : M O R E MINUSCHAR L A B E L S ;
216
276
MULTIPLE : M U L T I P L E ;
@@ -225,6 +285,7 @@ NUMERIC_DATE : N U M E R I C MINUSCHAR D A T E;
225
285
NUMERIC_EDITED : N U M E R I C MINUSCHAR E D I T E D ;
226
286
NUMERIC_TIME : N U M E R I C MINUSCHAR T I M E ;
227
287
OBJECT_COMPUTER : O B J E C T MINUSCHAR C O M P U T E R ;
288
+ OBTAIN : O B T A I N ;
228
289
OCCURS : O C C U R S ;
229
290
ODT : O D T ;
230
291
OMITTED : O M I T T E D ;
@@ -235,8 +296,10 @@ OWN : O W N;
235
296
PACKED_DECIMAL : P A C K E D MINUSCHAR D E C I M A L ;
236
297
PADDING : P A D D I N G ;
237
298
PAGE_COUNTER : P A G E MINUSCHAR C O U N T E R ;
299
+ PAGE_INFO : P A G E MINUSCHAR I N F O ;
238
300
PARSE : P A R S E ;
239
301
PERFORM : P E R F O R M ;
302
+ PERMANENT : P E R M A N E N T ;
240
303
PIC : P I C -> pushMode(PICTURECLAUSE );
241
304
PICTURE : P I C T U R E -> pushMode(PICTURECLAUSE );
242
305
POINTER : P O I N T E R ;
@@ -250,13 +313,15 @@ PROCEDURE_POINTER : P R O C E D U R E MINUSCHAR P O I N T E R;
250
313
PROCEED : P R O C E E D ;
251
314
PROCESSING : P R O C E S S I N G ;
252
315
PROGRAM_ID : P R O G R A M MINUSCHAR I D ;
316
+ PROTECTED : P R O T E C T E D ;
253
317
PTERM : P T E R M ;
254
318
PURGE : P U R G E ;
255
319
QUEUE : Q U E U E ;
256
320
QUOTE : Q U O T E ;
257
321
QUOTES : Q U O T E S ;
258
322
RANDOM : R A N D O M ;
259
323
READER : R E A D E R ;
324
+ READY : R E A D Y ;
260
325
RECEIVED : R E C E I V E D ;
261
326
RECORDING : R E C O R D I N G ;
262
327
RECURSIVE : R E C U R S I V E ;
@@ -273,17 +338,20 @@ REPORTING : R E P O R T I N G;
273
338
REPORTS : R E P O R T S ;
274
339
RERUN : R E R U N ;
275
340
RESERVE : R E S E R V E ;
341
+ RETRIEVAL : R E T R I E V A L ;
276
342
RETURNING : R E T U R N I N G ;
277
343
RETURN_CODE : R E T U R N MINUSCHAR C O D E ;
278
344
REVERSED : R E V E R S E D ;
279
345
ROUNDED : R O U N D E D ;
346
+ RUN_UNIT : R U N MINUSCHAR U N I T ;
280
347
SAME : S A M E ;
281
348
SAVE : S A V E ;
282
349
SCRATCH : S C R A T C H ;
283
350
SCREENSIZE : S C R E E N S I Z E ;
284
351
SD : S D ;
285
352
SEGMENT : S E G M E N T ;
286
353
SEGMENT_LIMIT : S E G M E N T MINUSCHAR L I M I T ;
354
+ SELECTIVE : S E L E C T I V E ;
287
355
SENTENCE : S E N T E N C E ;
288
356
SEPARATE : S E P A R A T E ;
289
357
SEQUENTIAL : S E Q U E N T I A L ;
@@ -306,6 +374,7 @@ SORT_RETURN : S O R T MINUSCHAR R E T U R N;
306
374
SOURCE_COMPUTER : S O U R C E MINUSCHAR C O M P U T E R ;
307
375
SPACES : S P A C E S ;
308
376
SPECIAL_NAMES : S P E C I A L MINUSCHAR N A M E S ;
377
+ STORE : S T O R E ;
309
378
SQLIMS : S Q L I M S ;
310
379
SUBSCHEMA_AREANAMES : SSMinusChar A R E A N A M E S ;
311
380
SUBSCHEMA_BINDS : SSMinusChar B I N D S ;
@@ -356,6 +425,7 @@ UNIT : U N I T;
356
425
UNSTRING : U N S T R I N G ;
357
426
UP : U P ;
358
427
UPON : U P O N ;
428
+ USAGE_MODE : U S A G E MINUSCHAR M O D E ;
359
429
UTF_8 : U T F MINUSCHAR ' 8' ;
360
430
VALIDATING : V A L I D A T I N G ;
361
431
VIRTUAL : V I R T U A L ;
0 commit comments