summaryrefslogtreecommitdiffstats
path: root/parsing/tokens.sh
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}"
}