From 89ee6884b4d825d1d47b62380bdde93dd1842fa5 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Sun, 21 Feb 2016 14:43:40 -0500 Subject: eshtrans/frontend: Handle T_IO_NUMBERs Also fix a couple bugs in accept(). --- (limited to 'eshtrans/frontend') diff --git a/eshtrans/frontend/lexer.esh b/eshtrans/frontend/lexer.esh index ec80ac3..069f36b 100644 --- a/eshtrans/frontend/lexer.esh +++ b/eshtrans/frontend/lexer.esh @@ -938,7 +938,7 @@ accept() return 1 fi # Validate name. - case "${tok%%${US}*}" in + case "${tok#*${US}}" in [A-Za-z_][0-9A-Za-z_]*) ;; *) @@ -953,7 +953,7 @@ accept() return 1 fi # Validate name. - case "${tok%%${US}*}" in + case "${tok#*${US}}" in [A-Za-z_][0-9A-Za-z_]*) ;; *) @@ -989,6 +989,20 @@ accept() return 1 fi done + tok="T_CMDNAME${US}${tok#T_WORD${US}}" + ;; + T_IO_NUMBER) + # I/O numbers are recognized as literal T_WORDs. + if ! [ "x${tok%%${US}*}" = 'xT_WORD' ]; then + return 1 + fi + # Validate number. + case "${tok#*${US}}" in + *[!0-9]*) + return 1 + ;; + esac + tok="T_IO_NUMBER${US}${tok#T_WORD${US}}" ;; *) if ! [ "x${tok%%${US}*}" = "x${t}" ]; then diff --git a/eshtrans/frontend/parser.esh b/eshtrans/frontend/parser.esh index 4757d76..449c5ba 100644 --- a/eshtrans/frontend/parser.esh +++ b/eshtrans/frontend/parser.esh @@ -494,6 +494,7 @@ redirect_list() io_redirect() { ptrace_begn io_redirect + accept T_IO_NUMBER if io_file || io_here; then ptrace_pass io_redirect return 0 -- cgit v0.9.1