-
Notifications
You must be signed in to change notification settings - Fork 1
/
CommandGrammar.g4
86 lines (65 loc) · 1.26 KB
/
CommandGrammar.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
grammar CommandGrammar;
/*
* Parser Rules
*/
compile
: instruction+ EOF
;
instruction
: instruction OR instruction # OrInstruction
| instruction AND instruction # AndInstruction
| atomic_instruction # AtomicInstruction
;
atomic_instruction
: command (PIPE command_header)+ # PipeCommand
| command REDIRECT text # RedirectCommand
| command_header INPUT text # InputCommand
| command # SingleCommand
;
command
: command_header list_params;
command_header
: ID (COLON ID)?;
list_params
: command_param*
;
command_param
: type_param # TypeParam
| DOUBLE_HYPHEN ID (EQUAL type_param)? # OptionParam
;
type_param
: text # StringParam
| INT # IntParam
| DOUBLE # DoubleParam
;
text
: STRING # StringText
| ID # IDText
;
/*
* Lexer Rules
*/
AND : '&&';
OR : '||';
PIPE : '|';
REDIRECT : '>';
INPUT : '<';
DOT : '.';
COLON : ':';
UNDERSCORE : '_';
HYPHEN : '-';
DOUBLE_HYPHEN : '--';
EQUAL : '=';
fragment
DIGIT : [0-9];
fragment
LETTER : [a-zA-Z];
fragment
QUOTES : '"';
INT : HYPHEN? DIGIT+;
DOUBLE : HYPHEN? DIGIT+ (DOT DIGIT+)? ;
ID : LETTER (LETTER | DIGIT | UNDERSCORE | HYPHEN )*;
STRING : QUOTES .*? QUOTES;
WS
: (' ' | '\r' | '\t' | '\n')+ -> channel(HIDDEN)
;