blob: c28ffcab8da374e3d81c9dc2157c8b0932f49f7d (
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
|
toktext=''
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
toktext="${n}"
}
codegen()
{
local toks="${1}"
shift 1
local subtoks=
local t=
case "${toks}" in
*"${STX}"*"${ETX}"*)
subtoks="${toks#*${STX}}"
subtoks="${subtoks%${ETX}*}"
toks="${toks%%${STX}*}$(codegen \
"${subtoks}")${toks##*${ETX}}"
;;
esac
IFS="${RS}"
for t in ${toks}; do
toktext "${t}"
printf '%s ' "${toktext}"
done
unset IFS
}
|