Skip to content

Commit 790d50f

Browse files
committed
CRON parser. Syntax highlighting and validation inside java code.
1 parent 007ba15 commit 790d50f

30 files changed

+4301
-203
lines changed
+2-20
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,4 @@
11
/antlr-4.13.1.jar
2-
/src/main/java/org/springframework/ide/vscode/parser/jpql/Jpql.interp
3-
/src/main/java/org/springframework/ide/vscode/parser/jpql/Jpql.tokens
4-
/src/main/java/org/springframework/ide/vscode/parser/jpql/JpqlLexer.interp
5-
/src/main/java/org/springframework/ide/vscode/parser/jpql/JpqlLexer.tokens
6-
/src/main/java/org/springframework/ide/vscode/parser/hql/Hql.interp
7-
/src/main/java/org/springframework/ide/vscode/parser/hql/Hql.tokens
8-
/src/main/java/org/springframework/ide/vscode/parser/hql/HqlLexer.interp
9-
/src/main/java/org/springframework/ide/vscode/parser/hql/HqlLexer.tokens
10-
/src/main/java/org/springframework/ide/vscode/parser/mysql/MySqlParser.interp
11-
/src/main/java/org/springframework/ide/vscode/parser/mysql/MySqlParser.tokens
12-
/src/main/java/org/springframework/ide/vscode/parser/mysql/MySqlLexer.interp
13-
/src/main/java/org/springframework/ide/vscode/parser/mysql/MySqlLexer.tokens
14-
/src/main/java/org/springframework/ide/vscode/parser/postgresql/PostgreSqlParser.interp
15-
/src/main/java/org/springframework/ide/vscode/parser/postgresql/PostgreSqlParser.tokens
16-
/src/main/java/org/springframework/ide/vscode/parser/postgresql/PostgreSqlLexer.interp
17-
/src/main/java/org/springframework/ide/vscode/parser/postgresql/PostgreSqlLexer.tokens
18-
/src/main/java/org/springframework/ide/vscode/parser/spel/SpelParser.interp
19-
/src/main/java/org/springframework/ide/vscode/parser/spel/SpelParser.tokens
20-
/src/main/java/org/springframework/ide/vscode/parser/spel/SpelLexer.interp
21-
/src/main/java/org/springframework/ide/vscode/parser/spel/SpelLexer.tokens
2+
/src/main/java/org/springframework/ide/vscode/**/*.interp
3+
/src/main/java/org/springframework/ide/vscode/**/*.tokens
224
/target

headless-services/commons/jpql/generate-parsers.sh

+1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar Hql.g4 -o ${workdir}/src/main/ja
1111
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar MySqlLexer.g4 MySqlParser.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/mysql -package org.springframework.ide.vscode.parser.mysql
1212
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar SpelLexer.g4 SpelParser.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/spel -package org.springframework.ide.vscode.parser.spel
1313
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar PostgreSqlLexer.g4 PostgreSqlParser.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/postgresql -package org.springframework.ide.vscode.parser.postgresql
14+
java -jar ${workdir}/antlr-${ANTLR_VERSION}.jar CronLexer.g4 CronParser.g4 -o ${workdir}/src/main/java/org/springframework/ide/vscode/parser/cron -package org.springframework.ide.vscode.parser.cron
1415

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2024 Broadcom, Inc.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* https://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* Broadcom, Inc. - initial API and implementation
10+
*******************************************************************************/
11+
12+
lexer grammar CronLexer;
13+
14+
WS
15+
: [ \t\r\n]+
16+
;
17+
18+
STAR : '*';
19+
QUESTION : '?';
20+
DASH : '-';
21+
SLASH : '/';
22+
COMMA : ',';
23+
L : 'L';
24+
W : 'W';
25+
LW : 'LW';
26+
TAG : '#';
27+
28+
INT
29+
: DIGIT+
30+
;
31+
32+
MON: 'MON';
33+
TUE: 'TUE';
34+
WED: 'WED';
35+
THU: 'THU';
36+
FRI: 'FRI';
37+
SAT: 'SAT';
38+
SUN: 'SUN';
39+
40+
JAN: 'JAN';
41+
FEB: 'FEB';
42+
MAR: 'MAR';
43+
APR: 'APR';
44+
MAY: 'MAY';
45+
JUN: 'JUN';
46+
JUL: 'JUL';
47+
AUG: 'AUG';
48+
SEP: 'SEP';
49+
OCT: 'OCT';
50+
NOV: 'NOV';
51+
DEC: 'DEC';
52+
53+
IDENTIFIER
54+
: (ALPHABETIC | '_' )* (ALPHABETIC_NO_L | '_')
55+
;
56+
57+
MACRO
58+
: '@' (ALPHABETIC | '_') (ALPHABETIC | DIGIT | '_' | '$')*
59+
;
60+
61+
fragment ALPHABETIC
62+
: [a-zA-Z]
63+
;
64+
65+
fragment ALPHABETIC_NO_L
66+
: [a-zA-KM-Z]
67+
;
68+
69+
fragment DIGIT
70+
: [0-9]
71+
;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2024 Broadcom, Inc.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* https://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* Broadcom, Inc. - initial API and implementation
10+
*******************************************************************************/
11+
parser grammar CronParser;
12+
options { tokenVocab=CronLexer; }
13+
14+
cronExpression
15+
: WS* secondsElement WS+ minutesElement WS+ hoursElement WS+ daysElement WS+ monthsElement WS+ daysOfWeekElement WS*
16+
| WS* MACRO WS*
17+
;
18+
19+
secondsElement
20+
: cronElement
21+
;
22+
23+
minutesElement
24+
: cronElement
25+
;
26+
27+
hoursElement
28+
: cronElement
29+
;
30+
31+
daysElement
32+
: nearestWeekDayToDayOfMonthElement
33+
| lastDayOfMonthElement
34+
| cronElement
35+
;
36+
37+
monthsElement
38+
: cronElement
39+
;
40+
41+
daysOfWeekElement
42+
: nthDayOfWeekElement
43+
| lastDayOfWeekElement
44+
| cronElement
45+
;
46+
47+
cronElement
48+
: rangeCronList
49+
| periodicCronElement
50+
;
51+
52+
rangeCronElement
53+
: terminalCronElement (DASH (INT | weekdayLiteral | monthLiteral))*
54+
;
55+
56+
terminalCronElement
57+
: ( INT | weekdayLiteral | monthLiteral | STAR | QUESTION )
58+
;
59+
60+
periodicCronElement
61+
: terminalCronElement SLASH rangeCronList
62+
;
63+
64+
rangeCronList
65+
: rangeCronElement (COMMA rangeCronElement)*
66+
;
67+
68+
nthDayOfWeekElement
69+
: INT TAG INT
70+
| weekdayLiteral TAG INT
71+
;
72+
73+
lastDayOfWeekElement
74+
: INT L
75+
| weekdayLiteral L
76+
;
77+
78+
nearestWeekDayToDayOfMonthElement
79+
: INT W
80+
;
81+
82+
lastDayOfMonthElement
83+
: L (DASH INT)?
84+
| LW
85+
;
86+
87+
weekdayLiteral
88+
: MON
89+
| TUE
90+
| WED
91+
| THU
92+
| FRI
93+
| SAT
94+
| SUN
95+
;
96+
97+
monthLiteral
98+
: JAN
99+
| FEB
100+
| MAR
101+
| APR
102+
| MAY
103+
| JUN
104+
| JUL
105+
| AUG
106+
| SEP
107+
| OCT
108+
| NOV
109+
| DEC
110+
;

0 commit comments

Comments
 (0)