# Tokens query functions # # Copyright (C) 2016 Patrick "P. J." McDermott # # This file is part of the Eggshell Compiler. # # The Eggshell Compiler is free software: you can redistribute it # and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # The Eggshell Compiler is distributed in the hope that it will be # useful, but WITHOUT ANY WARRANTY; without even the implied warranty # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with the Eggshell Compiler. If not, see # . 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='")"';; T_COMMA) 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"';; T_USE) n='"use"';; T_STATIC) n='"static"';; T_LOCAL) n='"local"';; T_RETURN) n='"return"';; T_VOID) n='"void"';; # Special symbols T_TYPE) n='parameter type';; 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';; # Internal symbols T_FN_START) n='function start';; T_FN_END) n='function end';; # 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=')';; T_COMMA) 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';; T_USE) n='use';; T_STATIC) n='static';; T_LOCAL) n='local';; T_RETURN) n='return';; T_VOID) n='void';; # Special symbols T_TYPE) n="${t#*${US}}";; 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}}";; # Internal symbols T_FN_START) n='';; T_FN_END) n='';; # Unknown *) n='';; esac printf '%s' "${n}" }