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