diff options
-rw-r--r-- | eshtrans/frontend/parser.esh | 222 |
1 files changed, 111 insertions, 111 deletions
diff --git a/eshtrans/frontend/parser.esh b/eshtrans/frontend/parser.esh index ee02eca..57c4b63 100644 --- a/eshtrans/frontend/parser.esh +++ b/eshtrans/frontend/parser.esh @@ -18,41 +18,41 @@ # along with the Eggshell Compiler. If not, see # <http://www.gnu.org/licenses/>. -ptrace=false +#ptrace=false # # Function tracing # -ptrace_begn() -{ - local fn="${1}" - shift 1 - - if ${ptrace}; then - printf 'TRACE: BEGN %s()\n' "${fn}" >&2 - fi -} - -ptrace_pass() -{ - local fn="${1}" - shift 1 - - if ${ptrace}; then - printf 'TRACE: PASS %s()\n' "${fn}" >&2 - fi -} - -ptrace_fail() -{ - local fn="${1}" - shift 1 - - if ${ptrace}; then - printf 'TRACE: FAIL %s()\n' "${fn}" >&2 - fi -} +#ptrace_begn() +#{ +# local fn="${1}" +# shift 1 +# +# if ${ptrace}; then +# printf 'TRACE: BEGN %s()\n' "${fn}" >&2 +# fi +#} + +#ptrace_pass() +#{ +# local fn="${1}" +# shift 1 +# +# if ${ptrace}; then +# printf 'TRACE: PASS %s()\n' "${fn}" >&2 +# fi +#} + +#ptrace_fail() +#{ +# local fn="${1}" +# shift 1 +# +# if ${ptrace}; then +# printf 'TRACE: FAIL %s()\n' "${fn}" >&2 +# fi +#} # # Parser @@ -70,177 +70,177 @@ complete_command() list() { - ptrace_begn list + #ptrace_begn list if and_or; then while separator && and_or; do : done - ptrace_pass list + #ptrace_pass list return 0 fi - ptrace_fail list + #ptrace_fail list return 1 } and_or() { - ptrace_begn and_or + #ptrace_begn and_or if pipeline; then while accept T_AND_IF || accept T_OR_IF; do if ! linebreak || ! pipeline; then - ptrace_fail and_or + #ptrace_fail and_or return 1 fi done - ptrace_pass and_or + #ptrace_pass and_or return 0 fi - ptrace_fail and_or + #ptrace_fail and_or return 1 } pipeline() { - ptrace_begn pipeline + #ptrace_begn pipeline accept T_BANG if pipe_sequence; then - ptrace_pass pipeline + #ptrace_pass pipeline return 0 fi - ptrace_fail pipeline + #ptrace_fail pipeline return 1 } pipe_sequence() { - ptrace_begn pipe_sequence + #ptrace_begn pipe_sequence if command; then while accept T_PIPE; do if ! linebreak || ! command; then - ptrace_fail pipe_sequence + #ptrace_fail pipe_sequence return 1 fi done - ptrace_pass pipe_sequence + #ptrace_pass pipe_sequence return 0 fi - ptrace_fail pipe_sequence + #ptrace_fail pipe_sequence return 1 } command() { - ptrace_begn command + #ptrace_begn command if simple_command; then - ptrace_pass command + #ptrace_pass command return 0 elif compound_command; then redirect_list - ptrace_pass command + #ptrace_pass command return 0 fi - ptrace_fail command + #ptrace_fail command return 1 } compound_command() { - ptrace_begn compound_command + #ptrace_begn compound_command if brace_group; then - ptrace_pass compound_command + #ptrace_pass compound_command return 0 elif subshell; then - ptrace_pass compound_command + #ptrace_pass compound_command return 0 elif for_clause; then - ptrace_pass compound_command + #ptrace_pass compound_command return 0 elif case_clause; then - ptrace_pass compound_command + #ptrace_pass compound_command return 0 elif if_clause; then - ptrace_pass compound_command + #ptrace_pass compound_command return 0 elif while_clause; then - ptrace_pass compound_command + #ptrace_pass compound_command return 0 elif until_clause; then - ptrace_pass compound_command + #ptrace_pass compound_command return 0 fi - ptrace_fail compound_command + #ptrace_fail compound_command return 1 } subshell() { - ptrace_begn subshell + #ptrace_begn subshell if accept T_LPAREN && compound_list && expect T_RPAREN; then - ptrace_pass subshell + #ptrace_pass subshell return 0 fi - ptrace_fail subshell + #ptrace_fail subshell return 1 } compound_list() { - ptrace_begn compound_list + #ptrace_begn compound_list newline_list if term; then separator - ptrace_pass compound_list + #ptrace_pass compound_list return 0 fi - ptrace_fail compound_list + #ptrace_fail compound_list return 1 } term() { - ptrace_begn term + #ptrace_begn term if and_or; then while separator; do and_or done - ptrace_pass term + #ptrace_pass term return 0 fi - ptrace_fail term + #ptrace_fail term return 1 } for_clause() { - ptrace_begn for_clause + #ptrace_begn for_clause if accept T_FOR; then if expect T_NAME && linebreak; then if accept T_IN; then wordlist if ! sequential_sep; then - ptrace_fail for_clause + #ptrace_fail for_clause return 1 fi fi if do_group; then - ptrace_pass for_clause + #ptrace_pass for_clause return 0 fi fi fi - ptrace_fail for_clause + #ptrace_fail for_clause return 1 } wordlist() { - ptrace_begn wordlist + #ptrace_begn wordlist if accept T_WORD; then while accept T_WORD; do :; done - ptrace_pass wordlist + #ptrace_pass wordlist return 0 fi - ptrace_fail wordlist + #ptrace_fail wordlist return 1 } @@ -363,48 +363,48 @@ until_clause() function_body() { - ptrace_begn function_body + #ptrace_begn function_body inject T_LBRACE inject T_FN_START if compound_command; then inject T_SEMI inject T_FN_END inject T_RBRACE - ptrace_pass function_body + #ptrace_pass function_body return 0 fi - ptrace_fail function_body + #ptrace_fail function_body return 1 } brace_group() { - ptrace_begn brace_group + #ptrace_begn brace_group if accept T_LBRACE && compound_list && expect T_RBRACE; then - ptrace_pass brace_group + #ptrace_pass brace_group return 0 fi - ptrace_fail brace_group + #ptrace_fail brace_group return 1 } do_group() { - ptrace_begn do_group + #ptrace_begn do_group if accept T_DO && compound_list && expect T_DONE; then - ptrace_pass do_group + #ptrace_pass do_group return 0 fi - ptrace_fail do_group + #ptrace_fail do_group return 1 } simple_command() { - ptrace_begn simple_command + #ptrace_begn simple_command if accept T_LOCAL || accept T_RETURN; then cmd_suffix - ptrace_pass simple_command + #ptrace_pass simple_command return 0 fi accept T_STATIC @@ -412,104 +412,104 @@ simple_command() if cmd_word; then cmd_suffix fi - ptrace_pass simple_command + #ptrace_pass simple_command return 0 elif accept T_FNAME; then if accept T_LPAREN; then expect T_RPAREN if linebreak && function_body; then - ptrace_pass simple_command + #ptrace_pass simple_command return 0 fi else cmd_suffix - ptrace_pass simple_command + #ptrace_pass simple_command return 0 fi elif cmd_name; then cmd_suffix - ptrace_pass simple_command + #ptrace_pass simple_command return 0 fi - ptrace_fail simple_command + #ptrace_fail simple_command return 1 } cmd_name() { - ptrace_begn cmd_name + #ptrace_begn cmd_name # TODO: Assignment if accept T_CMDNAME; then - ptrace_pass cmd_name + #ptrace_pass cmd_name return 0 fi - ptrace_fail cmd_name + #ptrace_fail cmd_name return 1 } cmd_word() { - ptrace_begn cmd_word + #ptrace_begn cmd_word # TODO: Assignment if accept T_WORD; then - ptrace_pass cmd_word + #ptrace_pass cmd_word return 0 fi - ptrace_fail cmd_word + #ptrace_fail cmd_word return 1 } cmd_prefix() { - ptrace_begn cmd_prefix + #ptrace_begn cmd_prefix if io_redirect || accept T_ASSIGNMENT_WORD; then while io_redirect || accept T_ASSIGNMENT_WORD; do : done - ptrace_pass cmd_prefix + #ptrace_pass cmd_prefix return 0 fi - ptrace_fail cmd_prefix + #ptrace_fail cmd_prefix return 1 } cmd_suffix() { - ptrace_begn cmd_suffix + #ptrace_begn cmd_suffix if io_redirect || accept T_WORD; then while io_redirect || accept T_WORD; do : done - ptrace_pass cmd_suffix + #ptrace_pass cmd_suffix return 0 fi - ptrace_fail cmd_suffix + #ptrace_fail cmd_suffix return 1 } redirect_list() { - ptrace_begn redirect_list + #ptrace_begn redirect_list if io_redirect; then while io_redirect; do : done - ptrace_pass redirect_list + #ptrace_pass redirect_list return 0 fi - ptrace_fail redirect_list + #ptrace_fail redirect_list return 1 } io_redirect() { - ptrace_begn io_redirect + #ptrace_begn io_redirect accept T_IO_NUMBER if io_file || io_here; then - ptrace_pass io_redirect + #ptrace_pass io_redirect return 0 fi - ptrace_fail io_redirect + #ptrace_fail io_redirect return 1 } @@ -588,16 +588,16 @@ separator() sequential_sep() { - ptrace_begn sequential_sep + #ptrace_begn sequential_sep if accept T_SEMI; then if linebreak; then - ptrace_pass sequential_sep + #ptrace_pass sequential_sep return 0 fi elif newline_list; then - ptrace_pass sequential_sep + #ptrace_pass sequential_sep return 0 fi - ptrace_fail sequential_sep + #ptrace_fail sequential_sep return 1 } |