blob: 68db85d6307e1aaae84ba69c41c993b9e4ef3764 (
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
tokname()
{
local t="${1}"
shift 1
local n=
case "${t%${US}*}" in
# Operators
T_EOF) n='end of file';;
T_NEWLINE) n='newline';;
T_AND) n='"&"';;
T_SEMI) n='";"';;
T_AND_IF) n='"&&"';;
T_OR_IF) n='"||"';;
T_DSEMI) n='";;"';;
T_LESS) n='"<"';;
T_GREAT) n='">"';;
T_DLESS) n='"<<"';;
T_DGREAT) n='">>"';;
T_LESS) n='"<"';;
T_LESSAND) n='"<&"';;
T_GREAT) n='">"';;
T_GREATAND) n='">&"';;
T_LESSGREAT) n='"<>"';;
T_DLESSDASH) n='"<<-"';;
T_CLOBBER) n='">|"';;
T_PIPE) n='"|"';;
T_LPAREN) n='"("';;
T_RPAREN) n='")"';;
# Reserved words
T_IF) n='"if"';;
T_THEN) n='"then"';;
T_ELSE) n='"else"';;
T_ELIF) n='"elif"';;
T_FI) n='"fi"';;
T_DO) n='"do"';;
T_DONE) n='"done"';;
T_CASE) n='"case"';;
T_ESAC) n='"esac"';;
T_WHILE) n='"while"';;
T_UNTIL) n='"until"';;
T_FOR) n='"for"';;
T_LBRACE) n='"{"';;
T_RBRACE) n='"}"';;
T_BANG) n='"!"';;
T_IN) n='"in"';;
# Special symbols
T_NAME) n='parameter name';;
T_FNAME) n='function name';;
T_CMDNAME) n='command name';;
T_IO_NUMBER) n='I/O number';;
T_WORD) n='word';;
T_ASSIGNMENT_WORD) n='assignment word';;
# Unknown
*) n='unknown token';;
esac
printf '%s' "${n}"
}
toktext()
{
local t="${1}"
shift 1
local n=
case "${t%${US}*}" in
# Operators
T_EOF) n='';;
T_NEWLINE) n="${LF}";;
T_AND) n='&';;
T_SEMI) n=';';;
T_AND_IF) n='&&';;
T_OR_IF) n='||';;
T_DSEMI) n=';;';;
T_LESS) n='<';;
T_GREAT) n='>';;
T_DLESS) n='<<';;
T_DGREAT) n='>>';;
T_LESS) n='<';;
T_LESSAND) n='<&';;
T_GREAT) n='>';;
T_GREATAND) n='>&';;
T_LESSGREAT) n='<>';;
T_DLESSDASH) n='<<-';;
T_CLOBBER) n='>|';;
T_PIPE) n='|';;
T_LPAREN) n='(';;
T_RPAREN) n=')';;
# Reserved words
T_IF) n='if';;
T_THEN) n='then';;
T_ELSE) n='else';;
T_ELIF) n='elif';;
T_FI) n='fi';;
T_DO) n='do';;
T_DONE) n='done';;
T_CASE) n='case';;
T_ESAC) n='esac';;
T_WHILE) n='while';;
T_UNTIL) n='until';;
T_FOR) n='for';;
T_LBRACE) n='{';;
T_RBRACE) n='}';;
T_BANG) n='!';;
T_IN) n='in';;
# Special symbols
T_NAME) n="${t#*${US}}";;
T_FNAME) n="${t#*${US}}";;
T_CMDNAME) n="${t#*${US}}";;
T_IO_NUMBER) n="${t#*${US}}";;
T_WORD) n="${t#*${US}}";;
T_ASSIGNMENT_WORD) n="${t#*${US}}";;
# Unknown
*) n='';;
esac
printf '%s' "${n}"
}
|