From f6e55a026abf33867141896b1e227e791942c2a3 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Fri, 19 Feb 2016 04:01:32 -0500 Subject: [WIP] Add lexer/parser demo --- (limited to 'parsing/tokens.sh') diff --git a/parsing/tokens.sh b/parsing/tokens.sh new file mode 100644 index 0000000..37d741b --- /dev/null +++ b/parsing/tokens.sh @@ -0,0 +1,55 @@ +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_LESSAND) 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='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}" +} -- cgit v0.9.1