blob: 289c97ae32fa0f43b787004b1e58f8d842f93bfe (
plain)
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
|
%{
#include <stdio.h>
#include "sh.h"
#include "sh.tab.h"
%}
NAME [_a-zA-Z0-9]
NONDIGIT [_a-zA-Z]
DIGIT [0-9]
WHITESPACE [ \t]
OPERATOR [()|;&<>]
%s FOR
%x COMMENT
%%
"#" { BEGIN COMMENT; }
<COMMENT>. ;
<COMMENT>\n { BEGIN INITIAL; }
"&&"/. { return AND_IF; }
"||"/. { return OR_IF; }
";;"/. { return DSEMI; }
"<<"/. { return DLESS; }
">>"/. { return DGREAT; }
"<&"/. { return LESSAND; }
">&"/. { return GREATAND; }
"<>"/. { return LESSGREAT; }
"<<-"/. { return DLESSDASH; }
">|"/. { return CLOBBER; }
"if" { return If; }
"then" { return Then; }
"else" { return Else; }
"elif" { return Elif; }
"fi" { return Fi; }
"do" { return Do; }
"done" { BEGIN INITIAL; return Done; }
"case" { return Case; }
"esac" { return Esac; }
"while" { return While; }
"until" { return Until; }
"for" { BEGIN FOR; return For; }
"{" { return Lbrace; }
"}" { return Rbrace; }
"!" { return Bang; }
"in" { return In; }
{OPERATOR}/. { return yytext[0]; }
{DIGIT}+/< { yylval.n = atoi(yytext); return IO_NUMBER; }
{DIGIT}+/> { yylval.n = atoi(yytext); return IO_NUMBER; }
\n { return NEWLINE; }
<FOR>{NONDIGIT}{NAME}* { yylval.s = yytext; return NAME; }
[^ \t\n()|;&<>]+ { yylval.s = yytext; return WORD; }
{WHITESPACE} ;
%%
int yywrap(void)
{
return 1;
}
void sh_silence_warning(void)
{
input();
yyunput(0, 0);
}
|