-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathshellscanner.l
More file actions
38 lines (29 loc) · 938 Bytes
/
shellscanner.l
File metadata and controls
38 lines (29 loc) · 938 Bytes
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
%{
#include "shellparser.h"
#include "string.h"
%}
%option reentrant
%option noyywrap
%x SINGLE_QUOTED
%x SINGLE_QUOTED_END
%x DOUBLE_QUOTED
%x DOUBLE_QUOTED_END
%%
"|" { return PIPE; }
"\<" { return LEFT; }
"\>" { return RIGHT; }
"&" { return AND; }
[ \t\r] { }
[\n] { return EOL; }
[^ \t\r\n|\<\>'"&]+ { return ARGUMENT; }
['] { BEGIN(SINGLE_QUOTED); }
<SINGLE_QUOTED>[^']+ { yymore(); }
<SINGLE_QUOTED>['] { BEGIN(SINGLE_QUOTED_END); yyless(yyleng-1); return ARGUMENT;}
<SINGLE_QUOTED_END>['] { BEGIN(INITIAL);}
<SINGLE_QUOTED><<EOF>> { return -1; }
["] { BEGIN(DOUBLE_QUOTED); }
<DOUBLE_QUOTED>[^"]+ { yymore(); }
<DOUBLE_QUOTED>["] { BEGIN(DOUBLE_QUOTED_END); yyless(yyleng-1); return ARGUMENT; }
<DOUBLE_QUOTED_END>["] { BEGIN(INITIAL);}
<DOUBLE_QUOTED><<EOF>> { return -1; }
%%