runtime(sh): Fix various syntax highlighting problems in ksh93 scripts
- Fixed syntax highlighting for ksh93 namespace variables starting
with '${.'
- Added support for the alarm, eloop, fds, mkservice, pids, poll and
sha2sum builtins (which are indeed ksh93 builtins, albeit whether or
not they are available depends on the ksh release and the compiled
SHOPT options).
- Added support for the many Unix commands provided by ksh93's libcmd
as builtin commands (since these are general commands, scripts for
other shells like bash will also highlight these).
- The dumps for the sh_0{2,5,6,8,9}.sh were recreated due to this
change affecting commands those scripts call (e.g. 'wc').
- Enabled ${parameter/pattern/string} and friends for ksh syntax.
- Enabled case modification for ksh. See also:
https://github.com/ksh93/ksh/commit/c1762e03
- Enabled ;;& support for ksh. See also:
https://github.com/ksh93/ksh/commit/fc89d20a
- Added many special ksh variables using 93u+m's data/variables.c
as a reference.
If vim can't figure out which ksh release is in play using e.g.
the hashbang path, in such a case a generic default that enables
everything and the kitchen sink will be used. Otherwise, features will
be disabled if it's absolutely known a certain feature will not be
present. Examples:
- ERRNO is ksh88 specific, so that is locked to ksh88.
- Only 93u+m (assumed for generic) has SRANDOM, and only 93u+m
and 93v- have case modification support.
- 93u+ and 93v- have VPATH and CSWIDTH variables (the latter
is vestigal, but still present in the hardcoded variable table).
- 93v- and ksh2020 have (buggy and near unusable) implementations
of compgen and complete.
- Only mksh provides function substitutions, i.e. ${|command;}.
This took the better part of my day to implement. It seems to work well
enough though. (Also had to regenerate the dumps again while testing
it, as now there are dup scripts with mere hashbang differences, used
solely for testing syntax highlighting differences.)
closes: #17348
Signed-off-by: Johnothan King <johnothanking@protonmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim
index b0e02b9..68d43a3 100644
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -14,6 +14,7 @@
" 2025 May 06 improve single-quote string matching in parameter expansions
" 2025 May 06 match KornShell compound arrays
" 2025 May 10 improve wildcard character class lists
+" 2025 May 21 improve supported KornShell features
" Version: 208
" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
" For options and settings, please use: :help ft-sh-syntax
@@ -31,7 +32,32 @@
let s:shebang = getline(1)
if s:shebang =~ '^#!.\{-2,}\<ksh\>'
+ " The binary is too ambiguous (i.e. '/bin/ksh' or some such).
let b:is_kornshell = 1
+ let b:generic_korn = 1
+elseif s:shebang =~ '^#!.\{-2,}\<ksh93u\+\>'
+ " ksh93u+ (or 93u-) release (still much too common to encounter)
+ let b:is_kornshell = 1
+ let b:is_ksh93u = 1
+elseif s:shebang =~ '^#!.\{-2,}\<ksh93v\>'
+ " ksh93v- alpha or beta
+ let b:is_kornshell = 1
+ let b:is_ksh93v = 1
+elseif s:shebang =~ '^#!.\{-2,}\<ksh93\>'
+ " Could be any ksh93 release
+ let b:is_kornshell = 1
+ let b:is_ksh93 = 1
+elseif s:shebang =~ '^#!.\{-2,}\<ksh2020\>'
+ let b:is_kornshell = 1
+ let b:is_ksh2020 = 1
+elseif s:shebang =~ '^#!.\{-2,}\<ksh88\>'
+ " The actual AT&T ksh88 and its feature set is assumed.
+ let b:is_kornshell = 1
+ let b:is_ksh88 = 1
+elseif s:shebang =~ '^#!.\{-2,}\<mksh\>'
+ " MirBSD Korn Shell
+ let b:is_kornshell = 1
+ let b:is_mksh = 1
elseif s:shebang =~ '^#!.\{-2,}\<bash\>'
let b:is_bash = 1
elseif s:shebang =~ '^#!.\{-2,}\<dash\>'
@@ -46,6 +72,7 @@
elseif !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_posix") && !exists("b:is_dash")
if exists("g:is_kornshell")
let b:is_kornshell= 1
+ let b:generic_korn = 1
elseif exists("g:is_bash")
let b:is_bash= 1
elseif exists("g:is_dash")
@@ -64,8 +91,33 @@
elseif executable("/usr/bin/sh")
let s:shell = resolve("/usr/bin/sh")
endif
- if s:shell =~ '\<ksh\>'
- let b:is_kornshell= 1
+ if s:shell =~ '\<ksh\>'
+ " The binary is too ambiguous (i.e. '/bin/ksh' or some such).
+ let b:is_kornshell = 1
+ let b:generic_korn = 1
+ elseif s:shell =~ '\<ksh93u\+\>'
+ " ksh93u+ (or 93u-) release (still much too common to encounter)
+ let b:is_kornshell = 1
+ let b:is_ksh93u = 1
+ elseif s:shell =~ '\<ksh93v\>'
+ " ksh93v- alpha or beta
+ let b:is_kornshell = 1
+ let b:is_ksh93v = 1
+ elseif s:shell =~ '\<ksh93\>'
+ " Could be any ksh93 release
+ let b:is_kornshell = 1
+ let b:is_ksh93 = 1
+ elseif s:shebang =~ '\<ksh2020\>'
+ let b:is_kornshell = 1
+ let b:is_ksh2020 = 1
+ elseif s:shell =~ '\<ksh88\>'
+ " The actual AT&T ksh88 and its feature set is assumed.
+ let b:is_kornshell = 1
+ let b:is_ksh88 = 1
+ elseif s:shell =~ '\<mksh\>'
+ " MirBSD Korn Shell
+ let b:is_kornshell = 1
+ let b:is_mksh = 1
elseif s:shell =~ '\<bash\>'
let b:is_bash = 1
elseif s:shell =~ '\<dash\>'
@@ -234,7 +286,7 @@
" Echo: {{{1
" ====
" This one is needed INSIDE a CommandSub, so that `echo bla` be correct
-if exists("b:is_kornshell")
+if (exists("b:is_kornshell") && !exists("b:is_ksh88"))
syn region shEcho matchgroup=shStatement start="\<echo\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`}]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 end="\ze[ \t\n;]}" contains=@shEchoList skipwhite nextgroup=shQuickComment
syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`}]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 end="\ze[ \t\n;]}" contains=@shEchoList skipwhite nextgroup=shQuickComment
else
@@ -359,7 +411,7 @@
syn match shCaseBar contained skipwhite "\(^\|[^\\]\)\(\\\\\)*\zs|" nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
syn match shCaseStart contained skipwhite skipnl "(" nextgroup=shCase,shCaseBar
syn match shCaseLabel contained skipwhite "\%(\\.\|[-a-zA-Z0-9_*.]\)\+" contains=shBracketExpr
-if exists("b:is_bash")
+if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_ksh93u") && !exists("b:is_ksh93v") && !exists("b:is_ksh2020"))
ShFoldIfDoFor syn region shCase contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)" end=";;" end=";&" end=";;&" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment
elseif exists("b:is_kornshell")
ShFoldIfDoFor syn region shCase contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)" end=";;" end=";&" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment
@@ -369,7 +421,7 @@
ShFoldIfDoFor syn region shCaseEsac matchgroup=shConditional start="\<case\>" end="\<esac\>" contains=@shCaseEsacList
syn keyword shCaseIn contained skipwhite skipnl in nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
-if exists("b:is_bash") || exists("b:is_kornshell")
+if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88"))
syn region shCaseExSingleQuote matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial,shSpecial skipwhite skipnl nextgroup=shCaseBar contained
elseif !exists("g:sh_no_error")
syn region shCaseExSingleQuote matchgroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial skipwhite skipnl nextgroup=shCaseBar contained
@@ -403,8 +455,16 @@
if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
syn region shCommandSub matchgroup=shCmdSubRegion start="\$((\@!" skip='\\\\\|\\.' end=")" contains=@shCommandSubList
if exists("b:is_kornshell")
- syn region shSubshare matchgroup=shCmdSubRegion start="\${\ze[ \t\n<]" skip='\\\\\|\\.' end="\zs[ \t\n;]}" contains=@shCommandSubList
- syn region shValsub matchgroup=shCmdSubRegion start="\${|" skip='\\\\\|\\.' end="}" contains=@shCommandSubList
+ if !exists("b:is_ksh88")
+ if exists("b:is_mksh")
+ syn region shSubshare matchgroup=shCmdSubRegion start="\${\ze[ \t\n]" skip='\\\\\|\\.' end="\zs[ \t\n;]}" contains=@shCommandSubList
+ else
+ syn region shSubshare matchgroup=shCmdSubRegion start="\${\ze[ \t\n<]" skip='\\\\\|\\.' end="\zs[ \t\n;]}" contains=@shCommandSubList
+ endif
+ endif
+ if exists("b:is_mksh") || exists("b:generic_korn")
+ syn region shValsub matchgroup=shCmdSubRegion start="\${|" skip='\\\\\|\\.' end="}" contains=@shCommandSubList
+ endif
endif
syn region shArithmetic matchgroup=shArithRegion start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList
syn region shArithmetic matchgroup=shArithRegion start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList
@@ -419,17 +479,39 @@
syn cluster shCommandSubList add=bashSpecialVariables,bashStatement
syn cluster shCaseList add=bashAdminStatement,bashStatement
syn keyword bashSpecialVariables contained auto_resume BASH BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_LINENO BASHOPTS BASHPID BASH_REMATCH BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD CDPATH COLUMNS COMP_CWORD COMP_KEY COMP_LINE COMP_POINT COMPREPLY COMP_TYPE COMP_WORDBREAKS COMP_WORDS COPROC COPROC_PID DIRSTACK EMACS ENV EUID FCEDIT FIGNORE FUNCNAME FUNCNEST GLOBIGNORE GROUPS histchars HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LINENO LINES MACHTYPE MAIL MAILCHECK MAILPATH MAPFILE OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS POSIXLY_CORRECT PPID PROMPT_COMMAND PS0 PS1 PS2 PS3 PS4 PWD RANDOM READLINE_LINE READLINE_POINT REPLY SECONDS SHELL SHELLOPTS SHLVL TIMEFORMAT TIMEOUT TMPDIR UID
- syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep head less ls mkdir mv rm rmdir rpm sed sleep sort strip tail
+ syn keyword bashStatement basename cat chgrp chmod chown cksum clear cmp comm command compgen complete cp cut date dirname du egrep expr fgrep find fmt fold getconf gnufind gnugrep grep head iconv id join less ln logname ls md5sum mkdir mkfifo mknod mktemp mv od paste pathchk readlink realpath rev rm rmdir rpm sed sha1sum sha224sum sha256sum sha384sum sha512sum sleep sort strip stty sum sync tail tee tr tty uname uniq wc which xargs xgrep
syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop
- syn keyword bashStatement command compgen
endif
if exists("b:is_kornshell") || exists("b:is_posix")
syn cluster shCommandSubList add=kshSpecialVariables,kshStatement
syn cluster shCaseList add=kshStatement
- syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV ERRNO FCEDIT FPATH HISTFILE HISTSIZE HOME IFS LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL TMOUT VISUAL
- syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep head killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail tput
- syn keyword kshStatement command setgroups setsenv
+ syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV FCEDIT FIGNORE FPATH HISTCMD HISTEDIT HISTFILE HISTSIZE HOME IFS JOBMAX KSH_VERSION LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_TIME LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL SHLVL TMOUT VISUAL
+ syn keyword kshStatement basename cat chgrp chmod chown cksum clear cmp comm command cp cut date dirname du egrep expr fgrep find fmt fold grep head iconv id join killall less ln logname ls md5sum mkdir mknod mkfifo mktemp mv nice od paste pathchk printenv readlink realpath rev rm rmdir sed setgroups setsenv sha1sum sha224sum sha256sum sha384sum sha512sum sort strip stty sum sync tail tee tput tr tty uname uniq wc which xargs xgrep
+ if exists("b:is_ksh88")
+ syn keyword kshSpecialVariables contained ERRNO
+ elseif exists("b:is_mksh")
+ syn keyword kshSpecialVariables contained BASHPID EPOCHREALTIME EXECSHELL KSHEGID KSHGID KSHUID KSH_MATCH PATHSEP PGRP PIPESTATUS TMPDIR USER_ID
+ syn keyword kshStatement bind rename
+ elseif exists("b:is_ksh93v") || exists("b:is_ksh2020")
+ syn keyword kshSpecialVariables contained SH_OPTIONS COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS COMP_KEY COMPREPLY COMP_WORDBREAKS COMP_TYPE
+ syn keyword kshStatement compgen complete
+ if exists("b:is_ksh93v")
+ syn keyword kshSpecialVariables contained VPATH CSWIDTH
+ syn keyword kshStatement vmstate alarm fds pids poll sha2sum
+ endif
+ elseif exists("b:is_ksh93u")
+ " ksh93u+
+ syn keyword kshSpecialVariables contained VPATH CSWIDTH
+ syn keyword kshStatement alarm fds pids vmstate
+ else
+ " 'ksh' is ambiguous; include everything
+ syn keyword kshSpecialVariables contained BASHPID EPOCHREALTIME EXECSHELL KSHEGID KSHGID KSHUID KSH_MATCH PATHSEP PGRP PIPESTATUS TMPDIR USER_ID SH_OPTIONS COMP_CWORD COMP_LINE COMP_POINT COMP_WORDS COMP_KEY COMPREPLY COMP_WORDBREAKS COMP_TYPE VPATH SRANDOM CSWIDTH
+ if !exists("b:is_ksh93")
+ syn keyword kshSpecialVariables contained ERRNO
+ endif
+ syn keyword kshStatement vmstate alarm fds pids poll sha2sum alarm eloop fds mkservice pids compgen complete bind rename
+ endif
endif
syn match shSource "^\.\s"
@@ -504,8 +586,8 @@
" Here Strings: {{{1
" =============
-" available for: bash; ksh (really should be ksh93 only) but not if its a posix
-if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_posix"))
+" available for: bash and ksh (except ksh88) but not if its a posix
+if exists("b:is_bash") || ((exists("b:is_kornshell") && !exists("b:is_ksh88")) && !exists("b:is_posix"))
syn match shHereString "<<<" skipwhite nextgroup=shCmdParenRegion
endif
@@ -518,7 +600,7 @@
syn region shArrayValue contained start="\[\%(..\{-}\]=\)\@=" end="\]=\@=" contains=@shArrayValueList nextgroup=shVarAssign
syn cluster shArrayValueList contains=shArithmetic,shArithParen,shCommandSub,shDeref,shDerefSimple,shExpr,shNumber,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shSpecial,shParen,bashSpecialVariables,shParenError
syn region shArrayRegion contained matchgroup=shShellVariables start="(" skip='\\\\\|\\.' end=")" contains=@shArrayValueList,shArrayValue,shComment
-elseif exists("b:is_kornshell")
+elseif (exists("b:is_kornshell") && !exists("b:is_ksh88"))
" The subscript form for array values, e.g. "foo=([2]=10 [4]=100)".
syn region shArrayValue contained start="\[\%(..\{-}\]=\)\@=" end="\]=\@=" contains=@shArrayValueList nextgroup=shVarAssign
syn cluster shArrayValueList contains=shArithmetic,shArithParen,shCommandSub,shDeref,shDerefSimple,shExpr,shNumber,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shSpecial,shParen,kshSpecialVariables,shParenError
@@ -548,7 +630,7 @@
endif
" KornShell namespace: {{{1
-if exists("b:is_kornshell")
+if exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh")
syn keyword shFunctionKey namespace skipwhite skipnl nextgroup=shFunctionTwo
endif
@@ -578,8 +660,14 @@
syn match shDerefWordError "[^}$[~]" contained
endif
syn match shDerefSimple "\$\%(\h\w*\|\d\)" nextgroup=@shNoZSList
-if exists("b:is_kornshell")
- syn region shDeref matchgroup=PreProc start="\${\ze[^ \t\n<|]" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
+if exists("b:is_kornshell") && !exists("b:is_ksh88")
+ if exists("b:is_mksh")
+ syn region shDeref matchgroup=PreProc start="\${\ze[^ \t\n|]" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
+ elseif exists("b:generic_korn")
+ syn region shDeref matchgroup=PreProc start="\${\ze[^ \t\n<|]" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
+ else
+ syn region shDeref matchgroup=PreProc start="\${\ze[^ \t\n<]" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
+ endif
else
syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
endif
@@ -593,13 +681,14 @@
" ksh: ${.sh.*} variables: {{{1
" ========================================
-if exists("b:is_kornshell")
+if exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh")
syn match shDerefVar contained "\.\+" nextgroup=@shDerefVarList
+ syn region shDeref matchgroup=PreProc start="\${\ze[\.]" end="}" contains=@shDerefVarList,shDerefPSR,shDerefPPS
endif
" ksh: ${!var[*]} array index list syntax: {{{1
" ========================================
-if exists("b:is_kornshell") || exists("b:is_posix")
+if (exists("b:is_kornshell") && !exists("b:is_ksh88")) || exists("b:is_posix")
syn region shDeref matchgroup=PreProc start="\${!" end="}" contains=@shDerefVarArray
endif
@@ -609,7 +698,7 @@
syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOffset
syn match shDerefVar contained "{\@<=!\h\w*" nextgroup=@shDerefVarList
endif
-if exists("b:is_kornshell")
+if (exists("b:is_kornshell") && !exists("b:is_ksh88"))
syn match shDerefVar contained "{\@<=!\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList
endif
@@ -633,10 +722,10 @@
" ksh bash : ${parameter##pattern} remove large left pattern
" ksh bash : ${parameter%pattern} remove small right pattern
" ksh bash : ${parameter%%pattern} remove large right pattern
-" bash : ${parameter^pattern} Case modification
-" bash : ${parameter^^pattern} Case modification
-" bash : ${parameter,pattern} Case modification
-" bash : ${parameter,,pattern} Case modification
+" ksh bash : ${parameter^pattern} Case modification
+" ksh bash : ${parameter^^pattern} Case modification
+" ksh bash : ${parameter,pattern} Case modification
+" ksh bash : ${parameter,,pattern} Case modification
" bash : ${@:start:qty} display command line arguments from start to start+qty-1 (inferred)
" bash : ${parameter@operator} transforms parameter (operator∈[uULqEPARa])
syn cluster shDerefPatternList contains=shDerefPattern,shDerefString
@@ -655,15 +744,17 @@
call s:GenerateBracketExpressionItems({'itemGroup': 'shDerefPattern', 'bracketGroup': 'shBracketExprDelim', 'extraArgs': 'contained nextgroup=shDerefPattern'})
syn match shDerefEscape contained '\%(\\\\\)*\\.'
endif
-if exists("b:is_bash")
+if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88") && !exists("b:is_mksh") && !exists("b:is_ksh93u") && !exists("b:is_ksh2020"))
syn match shDerefOp contained "[,^]\{1,2}" nextgroup=@shDerefPatternList
+endif
+if exists("b:is_bash")
syn match shDerefOp contained "@[uULQEPAKa]"
endif
syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\\)\@<!'+ end=+'+
syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\\)\@<!"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial
syn match shDerefString contained "\\["']" nextgroup=shDerefPattern
-if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix")
+if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88")) || exists("b:is_posix")
" bash ksh posix : ${parameter:offset}
" bash ksh posix : ${parameter:offset:length}
syn region shDerefOffset contained start=':[^-=?+]' end='\ze:' end='\ze}' contains=shDeref,shDerefSimple,shDerefEscape nextgroup=shDerefLen,shDeref,shDerefSimple
@@ -671,15 +762,15 @@
syn match shDerefLen contained ":[^}]\+" contains=shDeref,shDerefSimple,shArithmetic
endif
-if exists("b:is_bash")
- " bash : ${parameter/pattern/string}
- " bash : ${parameter//pattern/string}
+if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("b:is_ksh88"))
+ " bash ksh : ${parameter/pattern/string}
+ " bash ksh : ${parameter//pattern/string}
syn match shDerefPPS contained '/\{1,2}' nextgroup=shDerefPPSleft
syn region shDerefPPSleft contained start='.' skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp end='/' end='\ze}' end='"' nextgroup=shDerefPPSright contains=@shPPSLeftList
syn region shDerefPPSright contained start='.' skip=@\%(\\\\\)\+@ end='\ze}' contains=@shPPSRightList
- " bash : ${parameter/#pattern/string}
- " bash : ${parameter/%pattern/string}
+ " bash ksh : ${parameter/#pattern/string}
+ " bash ksh : ${parameter/%pattern/string}
syn match shDerefPSR contained '/[#%]' nextgroup=shDerefPSRleft,shDoubleQuote,shSingleQuote
syn region shDerefPSRleft contained start='[^"']' skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp end='/' end='\ze}' nextgroup=shDerefPSRright contains=shBracketExpr
syn region shDerefPSRright contained start='.' skip=@\%(\\\\\)\+@ end='\ze}'
diff --git a/runtime/syntax/testdir/dumps/ksh2020_00.dump b/runtime/syntax/testdir/dumps/ksh2020_00.dump
new file mode 100644
index 0000000..6f7e69e
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|2|0|2|0| +0#0000000&@60
+@75
+|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255&
+@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o
+|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^@1|}| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,@1|}| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63
+|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/ksh2020_01.dump b/runtime/syntax/testdir/dumps/ksh2020_01.dump
new file mode 100644
index 0000000..1490d8b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^@1|}| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,@1|}| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63
+>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n
+|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e
+|n|t|,| +0#0000000&@71
+|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a
+|t|i|o|n| +0#0000000&@70
+|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46
+|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24
+|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f|d|s| |p|i|d|s| @58
+|f|d|s|;| |p|i|d|s| @65
+@75
+|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7
+|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66
+@57|1|4|,|1| @10|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh2020_02.dump b/runtime/syntax/testdir/dumps/ksh2020_02.dump
new file mode 100644
index 0000000..d8825d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_02.dump
@@ -0,0 +1,20 @@
+|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66
+|c+0#af5f00255&|a|t| +0#0000000&@71
+|c+0#af5f00255&|h|g|r|p| +0#0000000&@69
+|c+0#af5f00255&|h|m|o|d| +0#0000000&@69
+|c+0#af5f00255&|h|o|w|n| +0#0000000&@69
+>c+0#af5f00255&|k|s|u|m| +0#0000000&@69
+|c+0#af5f00255&|m|p| +0#0000000&@71
+|c+0#af5f00255&|o|m@1| +0#0000000&@70
+|c+0#af5f00255&|p| +0#0000000&@72
+|c+0#af5f00255&|u|t| +0#0000000&@71
+|d+0#af5f00255&|a|t|e| +0#0000000&@70
+|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67
+|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|g+0#af5f00255&|r|e|p| +0#0000000&@70
+@57|2|9|,|1| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh2020_03.dump b/runtime/syntax/testdir/dumps/ksh2020_03.dump
new file mode 100644
index 0000000..f166483
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_03.dump
@@ -0,0 +1,20 @@
+|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70
+|h+0#af5f00255&|e|a|d| +0#0000000&@70
+|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|i+0#af5f00255&|d| +0#0000000&@72
+|j+0#af5f00255&|o|i|n| +0#0000000&@70
+>l+0#af5f00255&|n| +0#0000000&@72
+|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67
+|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68
+|m+0#af5f00255&|k|d|i|r| +0#0000000&@69
+|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68
+|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68
+|m+0#af5f00255&|v| +0#0000000&@72
+|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|p+0#af5f00255&|a|s|t|e| +0#0000000&@69
+|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67
+|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|v| +0#0000000&@71
+@57|4|7|,|1| @9|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/ksh2020_04.dump b/runtime/syntax/testdir/dumps/ksh2020_04.dump
new file mode 100644
index 0000000..4dd849b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_04.dump
@@ -0,0 +1,20 @@
+|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71
+|r+0#af5f00255&|m| +0#0000000&@72
+|r+0#af5f00255&|m|d|i|r| +0#0000000&@69
+|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+>s|h|a|2|s|u|m| @8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|t@1|y| +0#0000000&@70
+|s+0#af5f00255&|u|m| +0#0000000&@71
+|s+0#af5f00255&|y|n|c| +0#0000000&@70
+|t+0#af5f00255&|a|i|l| +0#0000000&@70
+|t+0#af5f00255&|e@1| +0#0000000&@71
+|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|t+0#af5f00255&@1|y| +0#0000000&@71
+|u+0#af5f00255&|n|a|m|e| +0#0000000&@69
+|u+0#af5f00255&|n|i|q| +0#0000000&@70
+|v|m|s|t|a|t|e| @8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11
+|w+0#af5f00255&|c| +0#0000000&@72
+@57|6|5|,|1| @9|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh2020_05.dump b/runtime/syntax/testdir/dumps/ksh2020_05.dump
new file mode 100644
index 0000000..ba9f354
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_05.dump
@@ -0,0 +1,20 @@
+|w+0#af5f00255#ffffff0|c| +0#0000000&@72
+|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+@75
+|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000&
+>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65
+@75
+|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53
+|p|o|l@1| |-+0#e000e06&@1|m|a|n| +0#0000000&@64
+@75
+|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9
+|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45
+@75
+|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54
+|b|i|n|d|;| |r|e|n|a|m|e| @62
+@75
+|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43
+|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65
+@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@57|8|3|,|1| @9|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/sh_10_00.dump b/runtime/syntax/testdir/dumps/ksh2020_06.dump
similarity index 64%
copy from runtime/syntax/testdir/dumps/sh_10_00.dump
copy to runtime/syntax/testdir/dumps/ksh2020_06.dump
index b0c98ea..65bd846 100644
--- a/runtime/syntax/testdir/dumps/sh_10_00.dump
+++ b/runtime/syntax/testdir/dumps/ksh2020_06.dump
@@ -1,11 +1,9 @@
->#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64
+| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&+0#0000000&| @42
+@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48
+|e+0#af5f00255&|s|a|c| +0#0000000&@70
@75
-|#+0#0000e05&| |T|h|i|s| |s|c|r|i|p|t| |i|s| |a| |t|e|s|t| |f|i|l|e| |f|o|r| |k|s|h|9|3| |s|h|a|r|e|d|-|s|t|a|t|e| +0#0000000&@23
-|#+0#0000e05&| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|s|u|b|s|h|a|r|e|s|)| |a|n|d| |m|k|s|h| |v|a|l|u|e| +0#0000000&@24
-|#+0#0000e05&| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|v|a|l|s|u|b|s|)|.| +0#0000000&@48
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
+>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50
|}+0#e000e06&| +0#0000000&@73
@@ -17,4 +15,6 @@
|}+0#e000e06&| +0#0000000&@73
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49
-|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p|
+|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
+@75
+@57|1|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/ksh2020_07.dump b/runtime/syntax/testdir/dumps/ksh2020_07.dump
new file mode 100644
index 0000000..f4c2f4d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20
+|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43
+|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9
+| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52
+@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50
+@8|}+0#00e0e07&| +0#0000000&@65
+@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36
+@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24
+@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@36
+|}+0#e000e06&| +0#0000000&@73
+@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +0#0000000&@17
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55
+|}+0#e000e06&| +0#0000000&@73
+|f+0#af5f00255&|i| +0#0000000&@72
+@75
+@57|1@1|9|,|3|-|1|7| @5|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/ksh2020_08.dump b/runtime/syntax/testdir/dumps/ksh2020_08.dump
new file mode 100644
index 0000000..cdb01e1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |=@5| +0#0000000&@66
+|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
+|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
+| +0#e000e06&@7>p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|%|s| |s|t|r| +0#0000000&@53
+|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#af5f00255&|/+0#e000e06&|t|m|p|/|s|t|r|f|i|l|e|;|}| +0#0000000&@52
+@75
+|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
+|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|R|A|N|D|O|M|=+0#0000000&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_
+|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N
+|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06&
+|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C
+|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M
+|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|@+0#4040ff13&@2
+| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh2020_09.dump b/runtime/syntax/testdir/dumps/ksh2020_09.dump
new file mode 100644
index 0000000..98e266c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh2020_09.dump
@@ -0,0 +1,20 @@
+|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M
+|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|B
+|R|E|A|K|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|g|e|n|)+0#e000e06&| +0#0000000&@48
+>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B+0#00e0e07&|A|S|H|P|I|D|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|P|O|C|H|R|E|A|L|T|I|M|E|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|X|E|C|S|H|E|L@1|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|E|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|U|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|_|M|A|T
+|C|H|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|A|T|H|S|E|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|G|R|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|I|P|E|S|T|A|T|U|S|=+0#0000000&| +0#e000e06&|T+0#00e0e07&|M|P|D|I|R|=+0#0000000&| +0#e000e06&|U+0#00e0e07&|S|E|R|_|I|D|=+0#0000000&| +0#e000e06&|V+0#00e0e07&|P|A|T|H|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|S|W|I|D|T|H|=+0#0000000&| +0#e000e06&|c+0#af5f00255&|o|m|p|l|e|t|e|)+0#e000e06&| +0#0000000&@1
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/ksh88_00.dump b/runtime/syntax/testdir/dumps/ksh88_00.dump
new file mode 100644
index 0000000..ad36df0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|8@1| +0#0000000&@62
+@75
+|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|[+0#e000e06#ffffff0|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|#
+@1|b|a|z|}+0#e000e06#ffffff0| +0#0000000&@69
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#ffffff16#ff404010|V|/|b|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o
+|n|/|V|/|b|}+0#e000e06#ffffff0| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|%|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|#|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#ffffff16#ff404010|%|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#ffffff16#ff404010|#|b|a|r|/
+|f|o@1|}+0#e000e06#ffffff0| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|/|%|b|a|r|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|/|#|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|b|a|r|.|f|o@1|/|%|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|b|a|r|/|#|b|a|r|/
+|f|o@1|}+0#e000e06#ffffff0| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|%|b|a|r|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#ffffff16#ff404010@1|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#ffffff16#ff404010|#|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|^@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|,@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63
+|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/ksh88_01.dump b/runtime/syntax/testdir/dumps/ksh88_01.dump
new file mode 100644
index 0000000..2691a5a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|%|b|a|r|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#ffffff16#ff404010|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#ffffff16#ff404010@1|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#ffffff16#ff404010|#|b|a|r|/|f|o@1|}+0#e000e06#ffffff0| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|^@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|,@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63
+>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n
+|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e
+|n|t|,| +0#0000000&@71
+|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a
+|t|i|o|n| +0#0000000&@70
+|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46
+|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24
+|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f|d|s| |p|i|d|s| @58
+|f|d|s|;| |p|i|d|s| @65
+@75
+|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7
+|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66
+@57|1|4|,|1| @10|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh88_02.dump b/runtime/syntax/testdir/dumps/ksh88_02.dump
new file mode 100644
index 0000000..d8825d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_02.dump
@@ -0,0 +1,20 @@
+|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66
+|c+0#af5f00255&|a|t| +0#0000000&@71
+|c+0#af5f00255&|h|g|r|p| +0#0000000&@69
+|c+0#af5f00255&|h|m|o|d| +0#0000000&@69
+|c+0#af5f00255&|h|o|w|n| +0#0000000&@69
+>c+0#af5f00255&|k|s|u|m| +0#0000000&@69
+|c+0#af5f00255&|m|p| +0#0000000&@71
+|c+0#af5f00255&|o|m@1| +0#0000000&@70
+|c+0#af5f00255&|p| +0#0000000&@72
+|c+0#af5f00255&|u|t| +0#0000000&@71
+|d+0#af5f00255&|a|t|e| +0#0000000&@70
+|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67
+|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|g+0#af5f00255&|r|e|p| +0#0000000&@70
+@57|2|9|,|1| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh88_03.dump b/runtime/syntax/testdir/dumps/ksh88_03.dump
new file mode 100644
index 0000000..f166483
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_03.dump
@@ -0,0 +1,20 @@
+|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70
+|h+0#af5f00255&|e|a|d| +0#0000000&@70
+|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|i+0#af5f00255&|d| +0#0000000&@72
+|j+0#af5f00255&|o|i|n| +0#0000000&@70
+>l+0#af5f00255&|n| +0#0000000&@72
+|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67
+|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68
+|m+0#af5f00255&|k|d|i|r| +0#0000000&@69
+|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68
+|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68
+|m+0#af5f00255&|v| +0#0000000&@72
+|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|p+0#af5f00255&|a|s|t|e| +0#0000000&@69
+|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67
+|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|v| +0#0000000&@71
+@57|4|7|,|1| @9|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/ksh88_04.dump b/runtime/syntax/testdir/dumps/ksh88_04.dump
new file mode 100644
index 0000000..4dd849b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_04.dump
@@ -0,0 +1,20 @@
+|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71
+|r+0#af5f00255&|m| +0#0000000&@72
+|r+0#af5f00255&|m|d|i|r| +0#0000000&@69
+|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+>s|h|a|2|s|u|m| @8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|t@1|y| +0#0000000&@70
+|s+0#af5f00255&|u|m| +0#0000000&@71
+|s+0#af5f00255&|y|n|c| +0#0000000&@70
+|t+0#af5f00255&|a|i|l| +0#0000000&@70
+|t+0#af5f00255&|e@1| +0#0000000&@71
+|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|t+0#af5f00255&@1|y| +0#0000000&@71
+|u+0#af5f00255&|n|a|m|e| +0#0000000&@69
+|u+0#af5f00255&|n|i|q| +0#0000000&@70
+|v|m|s|t|a|t|e| @8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11
+|w+0#af5f00255&|c| +0#0000000&@72
+@57|6|5|,|1| @9|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh88_05.dump b/runtime/syntax/testdir/dumps/ksh88_05.dump
new file mode 100644
index 0000000..95bea14
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_05.dump
@@ -0,0 +1,20 @@
+|w+0#af5f00255#ffffff0|c| +0#0000000&@72
+|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+@75
+|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000&
+>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65
+@75
+|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53
+|p|o|l@1| |-+0#e000e06&@1|m|a|n| +0#0000000&@64
+@75
+|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9
+|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45
+@75
+|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54
+|b|i|n|d|;| |r|e|n|a|m|e| @62
+@75
+|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43
+|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65
+@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#ffffff16#ff404010|1+0#e000e06#ffffff0|}| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@57|8|3|,|1| @9|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/ksh88_06.dump b/runtime/syntax/testdir/dumps/ksh88_06.dump
new file mode 100644
index 0000000..efb5199
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_06.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#ffffff16#ff404010|1+0#e000e06#ffffff0|}| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#ffffff16#ff404010|0+0#e000e06#ffffff0|:+0#ffffff16#ff404010|0+0#e000e06#ffffff0|}| +0#0000000&|;+0#af5f00255&@1|&+0#0000000&| @42
+@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48
+|e+0#af5f00255&|s|a|c| +0#0000000&@70
+@75
+>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|e|c|h|o| |o|n|e| |}+0#e000e06#ffffff0| +0#0000000&@55
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010@7|e|c|h|o| |t|w|o| +0#0000000#ffffff0@50
+|}+0#e000e06&| +0#0000000&@73
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#0000000&@66
+|e+0#ffffff16#ff404010|c|h|o| |t|h|r|e@1| @5|}+0#e000e06#ffffff0| +0#0000000&@57
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|e|c|h|o| |'|f|o|u|r|'|;| |}+0#e000e06#ffffff0| +0#0000000&@51
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|e|c|h|o| |'|f|i|v|e|'| |;|}+0#e000e06#ffffff0| +0#0000000&@51
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|e|c|h|o| |'|s|i|x|'| +0#0000000#ffffff0@55
+|}+0#e000e06&| +0#0000000&@73
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010@7|e|c|h|o| |'|s|e|v|e|n|'| @3|}+0#e000e06#ffffff0| +0#0000000&@41
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|p|r|i|n|t| |'|e|i|g|h|t|'| @2|}+0#e000e06#ffffff0| +0#0000000&@49
+|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| +0#ffffff16#ff404010|p|w|d|;| |}+0#e000e06#ffffff0| +0#0000000&@52
+@75
+@57|1|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/ksh88_07.dump b/runtime/syntax/testdir/dumps/ksh88_07.dump
new file mode 100644
index 0000000..f4c2f4d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20
+|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43
+|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9
+| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52
+@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50
+@8|}+0#00e0e07&| +0#0000000&@65
+@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36
+@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24
+@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@36
+|}+0#e000e06&| +0#0000000&@73
+@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +0#0000000&@17
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55
+|}+0#e000e06&| +0#0000000&@73
+|f+0#af5f00255&|i| +0#0000000&@72
+@75
+@57|1@1|9|,|3|-|1|7| @5|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/ksh88_08.dump b/runtime/syntax/testdir/dumps/ksh88_08.dump
new file mode 100644
index 0000000..db8f748
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |=@5| +0#0000000&@66
+|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
+|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
+| +0#ffffff16#ff404010@7>p|r|i|n|t|f| |%|s| |s|t|r| +0#0000000#ffffff0@53
+|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#ffffff16#ff404010|/|t|m|p|/|s|t|r|f|i|l|e|;|}+0#e000e06#ffffff0| +0#0000000&@52
+@75
+|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
+|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| +0#ffffff16#ff404010|R|A|N|D|O|M|=| |S|R|A|N|D|O|M|=| |S|H|L|V|L|=| |J|O|B|M|A|X|=| |K|S|H|_|V|E|R|S|I|O|N|=| |F|I|G|N|O|R|E|=| |L|C|_|T|I|M|E|=| |L|C|_
+|N|U|M|E|R|I|C|=| |L|C|_|M|E|S@1|A|G|E|S|=| |L|C|_|C|T|Y|P|E|=| |L|C|_|C|O|L@1|A|T|E|=| |L|C|_|A|L@1|=| |L|A|N|G|=| |F|P|A|T|H|=| |P|S|4+0#e000e06#ffffff0|=+0#af5f00255&| +0#0000000&|O|P|T|I|N
+|D|=| |O|P|T|A|R|G|=| |t|r|u|e| |;|}+0#e000e06&| +0#0000000&@56
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06&
+|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C
+|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E|R@1|N|O|=+0#af5f00255&| +0#e000e06&|C+0#00e0e07&|O|M
+|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|@+0#4040ff13&@2
+| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh88_09.dump b/runtime/syntax/testdir/dumps/ksh88_09.dump
new file mode 100644
index 0000000..3906242
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh88_09.dump
@@ -0,0 +1,20 @@
+|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E|R@1|N|O|=+0#af5f00255&| +0#e000e06&|C+0#00e0e07&|O|M
+|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|B
+|R|E|A|K|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|T|Y|P|E|=+0#0000000&| +0#e000e06&|c|o|m|p|g|e|n|)| +0#0000000&@48
+>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B+0#00e0e07&|A|S|H|P|I|D|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|P|O|C|H|R|E|A|L|T|I|M|E|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|X|E|C|S|H|E|L@1|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|E|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|U|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|_|M|A|T
+|C|H|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|A|T|H|S|E|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|G|R|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|I|P|E|S|T|A|T|U|S|=+0#0000000&| +0#e000e06&|T+0#00e0e07&|M|P|D|I|R|=+0#0000000&| +0#e000e06&|U+0#00e0e07&|S|E|R|_|I|D|=+0#0000000&| +0#e000e06&|V+0#00e0e07&|P|A|T|H|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|S|W|I|D|T|H|=+0#0000000&| +0#e000e06&|c|o|m|p|l|e|t|e|)| +0#0000000&@1
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_00.dump b/runtime/syntax/testdir/dumps/ksh93_generic_00.dump
new file mode 100644
index 0000000..a1a110b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|9|3| +0#0000000&@62
+@75
+|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255&
+@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o
+|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63
+|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_01.dump b/runtime/syntax/testdir/dumps/ksh93_generic_01.dump
new file mode 100644
index 0000000..53c0db0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63
+>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n
+|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e
+|n|t|,| +0#0000000&@71
+|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a
+|t|i|o|n| +0#0000000&@70
+|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46
+|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24
+|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f+0#af5f00255&|d|s| +0#0000000&|p+0#af5f00255&|i|d|s| +0#0000000&@58
+|f+0#af5f00255&|d|s|;+0#0000000&| |p+0#af5f00255&|i|d|s| +0#0000000&@65
+@75
+|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7
+|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66
+@57|1|4|,|1| @10|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_02.dump b/runtime/syntax/testdir/dumps/ksh93_generic_02.dump
new file mode 100644
index 0000000..d8825d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_02.dump
@@ -0,0 +1,20 @@
+|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66
+|c+0#af5f00255&|a|t| +0#0000000&@71
+|c+0#af5f00255&|h|g|r|p| +0#0000000&@69
+|c+0#af5f00255&|h|m|o|d| +0#0000000&@69
+|c+0#af5f00255&|h|o|w|n| +0#0000000&@69
+>c+0#af5f00255&|k|s|u|m| +0#0000000&@69
+|c+0#af5f00255&|m|p| +0#0000000&@71
+|c+0#af5f00255&|o|m@1| +0#0000000&@70
+|c+0#af5f00255&|p| +0#0000000&@72
+|c+0#af5f00255&|u|t| +0#0000000&@71
+|d+0#af5f00255&|a|t|e| +0#0000000&@70
+|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67
+|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|g+0#af5f00255&|r|e|p| +0#0000000&@70
+@57|2|9|,|1| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_03.dump b/runtime/syntax/testdir/dumps/ksh93_generic_03.dump
new file mode 100644
index 0000000..f166483
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_03.dump
@@ -0,0 +1,20 @@
+|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70
+|h+0#af5f00255&|e|a|d| +0#0000000&@70
+|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|i+0#af5f00255&|d| +0#0000000&@72
+|j+0#af5f00255&|o|i|n| +0#0000000&@70
+>l+0#af5f00255&|n| +0#0000000&@72
+|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67
+|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68
+|m+0#af5f00255&|k|d|i|r| +0#0000000&@69
+|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68
+|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68
+|m+0#af5f00255&|v| +0#0000000&@72
+|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|p+0#af5f00255&|a|s|t|e| +0#0000000&@69
+|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67
+|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|v| +0#0000000&@71
+@57|4|7|,|1| @9|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_04.dump b/runtime/syntax/testdir/dumps/ksh93_generic_04.dump
new file mode 100644
index 0000000..8ac496a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_04.dump
@@ -0,0 +1,20 @@
+|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71
+|r+0#af5f00255&|m| +0#0000000&@72
+|r+0#af5f00255&|m|d|i|r| +0#0000000&@69
+|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+>s+0#af5f00255&|h|a|2|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|t@1|y| +0#0000000&@70
+|s+0#af5f00255&|u|m| +0#0000000&@71
+|s+0#af5f00255&|y|n|c| +0#0000000&@70
+|t+0#af5f00255&|a|i|l| +0#0000000&@70
+|t+0#af5f00255&|e@1| +0#0000000&@71
+|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|t+0#af5f00255&@1|y| +0#0000000&@71
+|u+0#af5f00255&|n|a|m|e| +0#0000000&@69
+|u+0#af5f00255&|n|i|q| +0#0000000&@70
+|v+0#af5f00255&|m|s|t|a|t|e| +0#0000000&@8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11
+|w+0#af5f00255&|c| +0#0000000&@72
+@57|6|5|,|1| @9|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_05.dump b/runtime/syntax/testdir/dumps/ksh93_generic_05.dump
new file mode 100644
index 0000000..4f4d4c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_05.dump
@@ -0,0 +1,20 @@
+|w+0#af5f00255#ffffff0|c| +0#0000000&@72
+|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+@75
+|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000&
+>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65
+@75
+|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53
+|p+0#af5f00255&|o|l@1| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@64
+@75
+|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9
+|m+0#af5f00255&|k|s|e|r|v|i|c|e| +0#0000000&|-+0#e000e06&@1|m|a|n|;+0#0000000&| |e+0#af5f00255&|l|o@1|p| +0#0000000&|-+0#e000e06&@1|h|e|l|p| +0#0000000&@45
+@75
+|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54
+|b+0#af5f00255&|i|n|d|;+0#0000000&| |r+0#af5f00255&|e|n|a|m|e| +0#0000000&@62
+@75
+|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43
+|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65
+@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@57|8|3|,|1| @9|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/sh_10_00.dump b/runtime/syntax/testdir/dumps/ksh93_generic_06.dump
similarity index 64%
rename from runtime/syntax/testdir/dumps/sh_10_00.dump
rename to runtime/syntax/testdir/dumps/ksh93_generic_06.dump
index b0c98ea..31f0b12 100644
--- a/runtime/syntax/testdir/dumps/sh_10_00.dump
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_06.dump
@@ -1,11 +1,9 @@
->#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64
+| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&| +0#0000000&@42
+@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48
+|e+0#af5f00255&|s|a|c| +0#0000000&@70
@75
-|#+0#0000e05&| |T|h|i|s| |s|c|r|i|p|t| |i|s| |a| |t|e|s|t| |f|i|l|e| |f|o|r| |k|s|h|9|3| |s|h|a|r|e|d|-|s|t|a|t|e| +0#0000000&@23
-|#+0#0000e05&| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|s|u|b|s|h|a|r|e|s|)| |a|n|d| |m|k|s|h| |v|a|l|u|e| +0#0000000&@24
-|#+0#0000e05&| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|v|a|l|s|u|b|s|)|.| +0#0000000&@48
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
+>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50
|}+0#e000e06&| +0#0000000&@73
@@ -17,4 +15,6 @@
|}+0#e000e06&| +0#0000000&@73
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49
-|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p|
+|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
+@75
+@57|1|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_07.dump b/runtime/syntax/testdir/dumps/ksh93_generic_07.dump
new file mode 100644
index 0000000..f4c2f4d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20
+|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43
+|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9
+| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52
+@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50
+@8|}+0#00e0e07&| +0#0000000&@65
+@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36
+@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24
+@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@36
+|}+0#e000e06&| +0#0000000&@73
+@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +0#0000000&@17
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55
+|}+0#e000e06&| +0#0000000&@73
+|f+0#af5f00255&|i| +0#0000000&@72
+@75
+@57|1@1|9|,|3|-|1|7| @5|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_08.dump b/runtime/syntax/testdir/dumps/ksh93_generic_08.dump
new file mode 100644
index 0000000..057e10d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |=@5| +0#0000000&@66
+|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
+|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
+| +0#e000e06&@7>p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|%|s| |s|t|r| +0#0000000&@53
+|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#af5f00255&|/+0#e000e06&|t|m|p|/|s|t|r|f|i|l|e|;|}| +0#0000000&@52
+@75
+|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
+|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S|R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_
+|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N
+|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06&
+|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C
+|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M
+|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|@+0#4040ff13&@2
+| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93_generic_09.dump b/runtime/syntax/testdir/dumps/ksh93_generic_09.dump
new file mode 100644
index 0000000..c457cc0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93_generic_09.dump
@@ -0,0 +1,20 @@
+|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M
+|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|B
+|R|E|A|K|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|g|e|n|)+0#e000e06&| +0#0000000&@48
+>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B|A|S|H|P|I|D|=+0#af5f00255&| +0#e000e06&|E|P|O|C|H|R|E|A|L|T|I|M|E|=+0#af5f00255&| +0#e000e06&|E|X|E|C|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|K|S|H|E|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|U|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|_|M|A|T
+|C|H|=+0#af5f00255&| +0#e000e06&|P|A|T|H|S|E|P|=+0#af5f00255&| +0#e000e06&|P|G|R|P|=+0#af5f00255&| +0#e000e06&|P|I|P|E|S|T|A|T|U|S|=+0#af5f00255&| +0#e000e06&|T|M|P|D|I|R|=+0#af5f00255&| +0#e000e06&|U|S|E|R|_|I|D|=+0#af5f00255&| +0#e000e06&|V|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|S|W|I|D|T|H|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|l|e|t|e|)+0#e000e06&| +0#0000000&@1
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_00.dump b/runtime/syntax/testdir/dumps/ksh93u_00.dump
new file mode 100644
index 0000000..47b1b69
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|9|3|u|+| +0#0000000&@60
+@75
+|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255&
+@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o
+|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^@1|}| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,@1|}| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63
+|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_01.dump b/runtime/syntax/testdir/dumps/ksh93u_01.dump
new file mode 100644
index 0000000..a0e8c19
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^@1|}| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,@1|}| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63
+>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n
+|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e
+|n|t|,| +0#0000000&@71
+|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a
+|t|i|o|n| +0#0000000&@70
+|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46
+|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24
+|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f+0#af5f00255&|d|s| +0#0000000&|p+0#af5f00255&|i|d|s| +0#0000000&@58
+|f+0#af5f00255&|d|s|;+0#0000000&| |p+0#af5f00255&|i|d|s| +0#0000000&@65
+@75
+|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7
+|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66
+@57|1|4|,|1| @10|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_02.dump b/runtime/syntax/testdir/dumps/ksh93u_02.dump
new file mode 100644
index 0000000..d8825d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_02.dump
@@ -0,0 +1,20 @@
+|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66
+|c+0#af5f00255&|a|t| +0#0000000&@71
+|c+0#af5f00255&|h|g|r|p| +0#0000000&@69
+|c+0#af5f00255&|h|m|o|d| +0#0000000&@69
+|c+0#af5f00255&|h|o|w|n| +0#0000000&@69
+>c+0#af5f00255&|k|s|u|m| +0#0000000&@69
+|c+0#af5f00255&|m|p| +0#0000000&@71
+|c+0#af5f00255&|o|m@1| +0#0000000&@70
+|c+0#af5f00255&|p| +0#0000000&@72
+|c+0#af5f00255&|u|t| +0#0000000&@71
+|d+0#af5f00255&|a|t|e| +0#0000000&@70
+|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67
+|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|g+0#af5f00255&|r|e|p| +0#0000000&@70
+@57|2|9|,|1| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_03.dump b/runtime/syntax/testdir/dumps/ksh93u_03.dump
new file mode 100644
index 0000000..f166483
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_03.dump
@@ -0,0 +1,20 @@
+|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70
+|h+0#af5f00255&|e|a|d| +0#0000000&@70
+|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|i+0#af5f00255&|d| +0#0000000&@72
+|j+0#af5f00255&|o|i|n| +0#0000000&@70
+>l+0#af5f00255&|n| +0#0000000&@72
+|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67
+|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68
+|m+0#af5f00255&|k|d|i|r| +0#0000000&@69
+|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68
+|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68
+|m+0#af5f00255&|v| +0#0000000&@72
+|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|p+0#af5f00255&|a|s|t|e| +0#0000000&@69
+|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67
+|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|v| +0#0000000&@71
+@57|4|7|,|1| @9|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_04.dump b/runtime/syntax/testdir/dumps/ksh93u_04.dump
new file mode 100644
index 0000000..62dc328
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_04.dump
@@ -0,0 +1,20 @@
+|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71
+|r+0#af5f00255&|m| +0#0000000&@72
+|r+0#af5f00255&|m|d|i|r| +0#0000000&@69
+|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+>s|h|a|2|s|u|m| @8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|t@1|y| +0#0000000&@70
+|s+0#af5f00255&|u|m| +0#0000000&@71
+|s+0#af5f00255&|y|n|c| +0#0000000&@70
+|t+0#af5f00255&|a|i|l| +0#0000000&@70
+|t+0#af5f00255&|e@1| +0#0000000&@71
+|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|t+0#af5f00255&@1|y| +0#0000000&@71
+|u+0#af5f00255&|n|a|m|e| +0#0000000&@69
+|u+0#af5f00255&|n|i|q| +0#0000000&@70
+|v+0#af5f00255&|m|s|t|a|t|e| +0#0000000&@8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11
+|w+0#af5f00255&|c| +0#0000000&@72
+@57|6|5|,|1| @9|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_05.dump b/runtime/syntax/testdir/dumps/ksh93u_05.dump
new file mode 100644
index 0000000..ba9f354
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_05.dump
@@ -0,0 +1,20 @@
+|w+0#af5f00255#ffffff0|c| +0#0000000&@72
+|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+@75
+|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000&
+>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65
+@75
+|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53
+|p|o|l@1| |-+0#e000e06&@1|m|a|n| +0#0000000&@64
+@75
+|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9
+|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45
+@75
+|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54
+|b|i|n|d|;| |r|e|n|a|m|e| @62
+@75
+|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43
+|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65
+@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@57|8|3|,|1| @9|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/sh_10_00.dump b/runtime/syntax/testdir/dumps/ksh93u_06.dump
similarity index 64%
copy from runtime/syntax/testdir/dumps/sh_10_00.dump
copy to runtime/syntax/testdir/dumps/ksh93u_06.dump
index b0c98ea..65bd846 100644
--- a/runtime/syntax/testdir/dumps/sh_10_00.dump
+++ b/runtime/syntax/testdir/dumps/ksh93u_06.dump
@@ -1,11 +1,9 @@
->#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64
+| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&+0#0000000&| @42
+@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48
+|e+0#af5f00255&|s|a|c| +0#0000000&@70
@75
-|#+0#0000e05&| |T|h|i|s| |s|c|r|i|p|t| |i|s| |a| |t|e|s|t| |f|i|l|e| |f|o|r| |k|s|h|9|3| |s|h|a|r|e|d|-|s|t|a|t|e| +0#0000000&@23
-|#+0#0000e05&| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|s|u|b|s|h|a|r|e|s|)| |a|n|d| |m|k|s|h| |v|a|l|u|e| +0#0000000&@24
-|#+0#0000e05&| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|v|a|l|s|u|b|s|)|.| +0#0000000&@48
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
+>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50
|}+0#e000e06&| +0#0000000&@73
@@ -17,4 +15,6 @@
|}+0#e000e06&| +0#0000000&@73
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49
-|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p|
+|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
+@75
+@57|1|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_07.dump b/runtime/syntax/testdir/dumps/ksh93u_07.dump
new file mode 100644
index 0000000..f4c2f4d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20
+|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43
+|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9
+| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52
+@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50
+@8|}+0#00e0e07&| +0#0000000&@65
+@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36
+@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24
+@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@36
+|}+0#e000e06&| +0#0000000&@73
+@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +0#0000000&@17
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55
+|}+0#e000e06&| +0#0000000&@73
+|f+0#af5f00255&|i| +0#0000000&@72
+@75
+@57|1@1|9|,|3|-|1|7| @5|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_08.dump b/runtime/syntax/testdir/dumps/ksh93u_08.dump
new file mode 100644
index 0000000..604607f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |=@5| +0#0000000&@66
+|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
+|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
+| +0#e000e06&@7>p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|%|s| |s|t|r| +0#0000000&@53
+|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#af5f00255&|/+0#e000e06&|t|m|p|/|s|t|r|f|i|l|e|;|}| +0#0000000&@52
+@75
+|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
+|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|R|A|N|D|O|M|=+0#0000000&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_
+|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N
+|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06&
+|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C
+|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M
+|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|@+0#4040ff13&@2
+| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93u_09.dump b/runtime/syntax/testdir/dumps/ksh93u_09.dump
new file mode 100644
index 0000000..83d3a99
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93u_09.dump
@@ -0,0 +1,20 @@
+|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M
+|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|B
+|R|E|A|K|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|T|Y|P|E|=+0#0000000&| +0#e000e06&|c|o|m|p|g|e|n|)| +0#0000000&@48
+>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B+0#00e0e07&|A|S|H|P|I|D|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|P|O|C|H|R|E|A|L|T|I|M|E|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|X|E|C|S|H|E|L@1|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|E|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|U|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|_|M|A|T
+|C|H|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|A|T|H|S|E|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|G|R|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|I|P|E|S|T|A|T|U|S|=+0#0000000&| +0#e000e06&|T+0#00e0e07&|M|P|D|I|R|=+0#0000000&| +0#e000e06&|U+0#00e0e07&|S|E|R|_|I|D|=+0#0000000&| +0#e000e06&|V|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|S|W|I|D|T|H|=+0#af5f00255&| +0#e000e06&|c|o|m|p|l|e|t|e|)| +0#0000000&@1
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_00.dump b/runtime/syntax/testdir/dumps/ksh93v_00.dump
new file mode 100644
index 0000000..6c562c0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h|9|3|v|-| +0#0000000&@60
+@75
+|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255&
+@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o
+|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63
+|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_01.dump b/runtime/syntax/testdir/dumps/ksh93v_01.dump
new file mode 100644
index 0000000..53c0db0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63
+>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n
+|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e
+|n|t|,| +0#0000000&@71
+|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a
+|t|i|o|n| +0#0000000&@70
+|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46
+|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24
+|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f+0#af5f00255&|d|s| +0#0000000&|p+0#af5f00255&|i|d|s| +0#0000000&@58
+|f+0#af5f00255&|d|s|;+0#0000000&| |p+0#af5f00255&|i|d|s| +0#0000000&@65
+@75
+|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7
+|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66
+@57|1|4|,|1| @10|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_02.dump b/runtime/syntax/testdir/dumps/ksh93v_02.dump
new file mode 100644
index 0000000..d8825d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_02.dump
@@ -0,0 +1,20 @@
+|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66
+|c+0#af5f00255&|a|t| +0#0000000&@71
+|c+0#af5f00255&|h|g|r|p| +0#0000000&@69
+|c+0#af5f00255&|h|m|o|d| +0#0000000&@69
+|c+0#af5f00255&|h|o|w|n| +0#0000000&@69
+>c+0#af5f00255&|k|s|u|m| +0#0000000&@69
+|c+0#af5f00255&|m|p| +0#0000000&@71
+|c+0#af5f00255&|o|m@1| +0#0000000&@70
+|c+0#af5f00255&|p| +0#0000000&@72
+|c+0#af5f00255&|u|t| +0#0000000&@71
+|d+0#af5f00255&|a|t|e| +0#0000000&@70
+|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67
+|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|g+0#af5f00255&|r|e|p| +0#0000000&@70
+@57|2|9|,|1| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_03.dump b/runtime/syntax/testdir/dumps/ksh93v_03.dump
new file mode 100644
index 0000000..f166483
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_03.dump
@@ -0,0 +1,20 @@
+|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70
+|h+0#af5f00255&|e|a|d| +0#0000000&@70
+|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|i+0#af5f00255&|d| +0#0000000&@72
+|j+0#af5f00255&|o|i|n| +0#0000000&@70
+>l+0#af5f00255&|n| +0#0000000&@72
+|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67
+|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68
+|m+0#af5f00255&|k|d|i|r| +0#0000000&@69
+|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68
+|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68
+|m+0#af5f00255&|v| +0#0000000&@72
+|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|p+0#af5f00255&|a|s|t|e| +0#0000000&@69
+|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67
+|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|v| +0#0000000&@71
+@57|4|7|,|1| @9|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_04.dump b/runtime/syntax/testdir/dumps/ksh93v_04.dump
new file mode 100644
index 0000000..8ac496a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_04.dump
@@ -0,0 +1,20 @@
+|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71
+|r+0#af5f00255&|m| +0#0000000&@72
+|r+0#af5f00255&|m|d|i|r| +0#0000000&@69
+|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+>s+0#af5f00255&|h|a|2|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|t@1|y| +0#0000000&@70
+|s+0#af5f00255&|u|m| +0#0000000&@71
+|s+0#af5f00255&|y|n|c| +0#0000000&@70
+|t+0#af5f00255&|a|i|l| +0#0000000&@70
+|t+0#af5f00255&|e@1| +0#0000000&@71
+|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|t+0#af5f00255&@1|y| +0#0000000&@71
+|u+0#af5f00255&|n|a|m|e| +0#0000000&@69
+|u+0#af5f00255&|n|i|q| +0#0000000&@70
+|v+0#af5f00255&|m|s|t|a|t|e| +0#0000000&@8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11
+|w+0#af5f00255&|c| +0#0000000&@72
+@57|6|5|,|1| @9|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_05.dump b/runtime/syntax/testdir/dumps/ksh93v_05.dump
new file mode 100644
index 0000000..479efcf
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_05.dump
@@ -0,0 +1,20 @@
+|w+0#af5f00255#ffffff0|c| +0#0000000&@72
+|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+@75
+|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000&
+>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65
+@75
+|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53
+|p+0#af5f00255&|o|l@1| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@64
+@75
+|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9
+|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45
+@75
+|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54
+|b|i|n|d|;| |r|e|n|a|m|e| @62
+@75
+|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43
+|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65
+@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@57|8|3|,|1| @9|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/sh_10_00.dump b/runtime/syntax/testdir/dumps/ksh93v_06.dump
similarity index 64%
copy from runtime/syntax/testdir/dumps/sh_10_00.dump
copy to runtime/syntax/testdir/dumps/ksh93v_06.dump
index b0c98ea..65bd846 100644
--- a/runtime/syntax/testdir/dumps/sh_10_00.dump
+++ b/runtime/syntax/testdir/dumps/ksh93v_06.dump
@@ -1,11 +1,9 @@
->#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64
+| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&+0#0000000&| @42
+@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48
+|e+0#af5f00255&|s|a|c| +0#0000000&@70
@75
-|#+0#0000e05&| |T|h|i|s| |s|c|r|i|p|t| |i|s| |a| |t|e|s|t| |f|i|l|e| |f|o|r| |k|s|h|9|3| |s|h|a|r|e|d|-|s|t|a|t|e| +0#0000000&@23
-|#+0#0000e05&| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|s|u|b|s|h|a|r|e|s|)| |a|n|d| |m|k|s|h| |v|a|l|u|e| +0#0000000&@24
-|#+0#0000e05&| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|v|a|l|s|u|b|s|)|.| +0#0000000&@48
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
+>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50
|}+0#e000e06&| +0#0000000&@73
@@ -17,4 +15,6 @@
|}+0#e000e06&| +0#0000000&@73
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49
-|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p|
+|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
+@75
+@57|1|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_07.dump b/runtime/syntax/testdir/dumps/ksh93v_07.dump
new file mode 100644
index 0000000..f4c2f4d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20
+|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43
+|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9
+| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52
+@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50
+@8|}+0#00e0e07&| +0#0000000&@65
+@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|e|n|}+0#e000e06#ffffff0| +0#0000000&@43
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@36
+@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}+0#e000e06#ffffff0|"+0#af5f00255&| +0#0000000&@24
+@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000#ffffff0@36
+|}+0#e000e06&| +0#0000000&@73
+@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{||+0#ffffff16#ff404010|v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}+0#e000e06#ffffff0| +0#0000000&@17
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |f|o@1|}+0#e000e06#ffffff0| +0#0000000&@54
+@8|$+0#e000e06&|{||+0#ffffff16#ff404010|e|c|h|o| |b|a|r| +0#0000000#ffffff0@55
+|}+0#e000e06&| +0#0000000&@73
+|f+0#af5f00255&|i| +0#0000000&@72
+@75
+@57|1@1|9|,|3|-|1|7| @5|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_08.dump b/runtime/syntax/testdir/dumps/ksh93v_08.dump
new file mode 100644
index 0000000..cdb01e1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |=@5| +0#0000000&@66
+|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
+|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
+| +0#e000e06&@7>p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|%|s| |s|t|r| +0#0000000&@53
+|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#af5f00255&|/+0#e000e06&|t|m|p|/|s|t|r|f|i|l|e|;|}| +0#0000000&@52
+@75
+|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
+|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|R|A|N|D|O|M|=+0#0000000&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_
+|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N
+|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06&
+|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C
+|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M
+|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|@+0#4040ff13&@2
+| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh93v_09.dump b/runtime/syntax/testdir/dumps/ksh93v_09.dump
new file mode 100644
index 0000000..6d21a09
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh93v_09.dump
@@ -0,0 +1,20 @@
+|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C|O|M
+|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|B
+|R|E|A|K|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|g|e|n|)+0#e000e06&| +0#0000000&@48
+>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B+0#00e0e07&|A|S|H|P|I|D|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|P|O|C|H|R|E|A|L|T|I|M|E|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|X|E|C|S|H|E|L@1|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|E|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|G|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|U|I|D|=+0#0000000&| +0#e000e06&|K+0#00e0e07&|S|H|_|M|A|T
+|C|H|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|A|T|H|S|E|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|G|R|P|=+0#0000000&| +0#e000e06&|P+0#00e0e07&|I|P|E|S|T|A|T|U|S|=+0#0000000&| +0#e000e06&|T+0#00e0e07&|M|P|D|I|R|=+0#0000000&| +0#e000e06&|U+0#00e0e07&|S|E|R|_|I|D|=+0#0000000&| +0#e000e06&|V|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|S|W|I|D|T|H|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|l|e|t|e|)+0#e000e06&| +0#0000000&@1
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_00.dump b/runtime/syntax/testdir/dumps/ksh_generic_00.dump
new file mode 100644
index 0000000..0ce212f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64
+@75
+|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|[|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|#+0#af5f00255&
+@1|b+0#0000000&|a|z|}+0#e000e06&| +0#0000000&@69
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|[|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o
+|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|f|o@1|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|.|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63
+|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_01.dump b/runtime/syntax/testdir/dumps/ksh_generic_01.dump
new file mode 100644
index 0000000..53c0db0
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|^+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.|s|h|.|v|e|r|s|i|o|n|,+0#af5f00255&@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#af5f00255&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#af5f00255&|}+0#e000e06&| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a+0#af5f00255&|l|a|r|m| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@63
+>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n
+|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e
+|n|t|,| +0#0000000&@71
+|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a
+|t|i|o|n| +0#0000000&@70
+|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46
+|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24
+|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f+0#af5f00255&|d|s| +0#0000000&|p+0#af5f00255&|i|d|s| +0#0000000&@58
+|f+0#af5f00255&|d|s|;+0#0000000&| |p+0#af5f00255&|i|d|s| +0#0000000&@65
+@75
+|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7
+|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66
+@57|1|4|,|1| @10|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_02.dump b/runtime/syntax/testdir/dumps/ksh_generic_02.dump
new file mode 100644
index 0000000..d8825d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_02.dump
@@ -0,0 +1,20 @@
+|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66
+|c+0#af5f00255&|a|t| +0#0000000&@71
+|c+0#af5f00255&|h|g|r|p| +0#0000000&@69
+|c+0#af5f00255&|h|m|o|d| +0#0000000&@69
+|c+0#af5f00255&|h|o|w|n| +0#0000000&@69
+>c+0#af5f00255&|k|s|u|m| +0#0000000&@69
+|c+0#af5f00255&|m|p| +0#0000000&@71
+|c+0#af5f00255&|o|m@1| +0#0000000&@70
+|c+0#af5f00255&|p| +0#0000000&@72
+|c+0#af5f00255&|u|t| +0#0000000&@71
+|d+0#af5f00255&|a|t|e| +0#0000000&@70
+|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67
+|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|g+0#af5f00255&|r|e|p| +0#0000000&@70
+@57|2|9|,|1| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_03.dump b/runtime/syntax/testdir/dumps/ksh_generic_03.dump
new file mode 100644
index 0000000..f166483
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_03.dump
@@ -0,0 +1,20 @@
+|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70
+|h+0#af5f00255&|e|a|d| +0#0000000&@70
+|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|i+0#af5f00255&|d| +0#0000000&@72
+|j+0#af5f00255&|o|i|n| +0#0000000&@70
+>l+0#af5f00255&|n| +0#0000000&@72
+|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67
+|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68
+|m+0#af5f00255&|k|d|i|r| +0#0000000&@69
+|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68
+|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68
+|m+0#af5f00255&|v| +0#0000000&@72
+|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|p+0#af5f00255&|a|s|t|e| +0#0000000&@69
+|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67
+|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|v| +0#0000000&@71
+@57|4|7|,|1| @9|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_04.dump b/runtime/syntax/testdir/dumps/ksh_generic_04.dump
new file mode 100644
index 0000000..8ac496a
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_04.dump
@@ -0,0 +1,20 @@
+|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71
+|r+0#af5f00255&|m| +0#0000000&@72
+|r+0#af5f00255&|m|d|i|r| +0#0000000&@69
+|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+>s+0#af5f00255&|h|a|2|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|t@1|y| +0#0000000&@70
+|s+0#af5f00255&|u|m| +0#0000000&@71
+|s+0#af5f00255&|y|n|c| +0#0000000&@70
+|t+0#af5f00255&|a|i|l| +0#0000000&@70
+|t+0#af5f00255&|e@1| +0#0000000&@71
+|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|t+0#af5f00255&@1|y| +0#0000000&@71
+|u+0#af5f00255&|n|a|m|e| +0#0000000&@69
+|u+0#af5f00255&|n|i|q| +0#0000000&@70
+|v+0#af5f00255&|m|s|t|a|t|e| +0#0000000&@8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11
+|w+0#af5f00255&|c| +0#0000000&@72
+@57|6|5|,|1| @9|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_05.dump b/runtime/syntax/testdir/dumps/ksh_generic_05.dump
new file mode 100644
index 0000000..4f4d4c8
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_05.dump
@@ -0,0 +1,20 @@
+|w+0#af5f00255#ffffff0|c| +0#0000000&@72
+|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+@75
+|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000&
+>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65
+@75
+|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53
+|p+0#af5f00255&|o|l@1| +0#0000000&|-+0#e000e06&@1|m|a|n| +0#0000000&@64
+@75
+|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9
+|m+0#af5f00255&|k|s|e|r|v|i|c|e| +0#0000000&|-+0#e000e06&@1|m|a|n|;+0#0000000&| |e+0#af5f00255&|l|o@1|p| +0#0000000&|-+0#e000e06&@1|h|e|l|p| +0#0000000&@45
+@75
+|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54
+|b+0#af5f00255&|i|n|d|;+0#0000000&| |r+0#af5f00255&|e|n|a|m|e| +0#0000000&@62
+@75
+|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43
+|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65
+@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@57|8|3|,|1| @9|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/sh_10_00.dump b/runtime/syntax/testdir/dumps/ksh_generic_06.dump
similarity index 64%
copy from runtime/syntax/testdir/dumps/sh_10_00.dump
copy to runtime/syntax/testdir/dumps/ksh_generic_06.dump
index b0c98ea..31f0b12 100644
--- a/runtime/syntax/testdir/dumps/sh_10_00.dump
+++ b/runtime/syntax/testdir/dumps/ksh_generic_06.dump
@@ -1,11 +1,9 @@
->#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64
+| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&| +0#0000000&@42
+@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@48
+|e+0#af5f00255&|s|a|c| +0#0000000&@70
@75
-|#+0#0000e05&| |T|h|i|s| |s|c|r|i|p|t| |i|s| |a| |t|e|s|t| |f|i|l|e| |f|o|r| |k|s|h|9|3| |s|h|a|r|e|d|-|s|t|a|t|e| +0#0000000&@23
-|#+0#0000e05&| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|s|u|b|s|h|a|r|e|s|)| |a|n|d| |m|k|s|h| |v|a|l|u|e| +0#0000000&@24
-|#+0#0000e05&| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|v|a|l|s|u|b|s|)|.| +0#0000000&@48
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
+>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50
|}+0#e000e06&| +0#0000000&@73
@@ -17,4 +15,6 @@
|}+0#e000e06&| +0#0000000&@73
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49
-|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p|
+|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
+@75
+@57|1|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_07.dump b/runtime/syntax/testdir/dumps/ksh_generic_07.dump
new file mode 100644
index 0000000..3219c17
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20
+|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43
+|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9
+| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52
+@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50
+@8|}+0#00e0e07&| +0#0000000&@65
+@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|e|n|}| +0#0000000&@43
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;+0#af5f00255&|}+0#e000e06&|"+0#af5f00255&| +0#0000000&@36
+@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}|"+0#af5f00255&| +0#0000000&@24
+@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000&@36
+|}+0#e000e06&| +0#0000000&@73
+@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}| +0#0000000&@17
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
+@8|$+0#e000e06&|{|||e+0#af5f00255&|c|h|o| +0#e000002&|f|o@1|}+0#e000e06&| +0#0000000&@54
+@8|$+0#e000e06&|{|||e+0#af5f00255&|c|h|o| +0#e000002&|b|a|r| +0#0000000&@55
+|}+0#e000e06&| +0#0000000&@73
+|f+0#af5f00255&|i| +0#0000000&@72
+@75
+@57|1@1|9|,|3|-|1|7| @5|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_08.dump b/runtime/syntax/testdir/dumps/ksh_generic_08.dump
new file mode 100644
index 0000000..b507e1d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |=@5| +0#0000000&@66
+|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
+|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
+| +0#e000e06&@7>p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|%|s| |s|t|r| +0#0000000&@53
+|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#af5f00255&|/+0#e000e06&|t|m|p|/|s|t|r|f|i|l|e|;|}| +0#0000000&@52
+@75
+|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
+|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S|R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_
+|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N
+|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06&
+|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C
+|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E|R@1|N|O|=+0#af5f00255&| +0#e000e06&|C|O|M
+|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|@+0#4040ff13&@2
+| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/ksh_generic_09.dump b/runtime/syntax/testdir/dumps/ksh_generic_09.dump
new file mode 100644
index 0000000..69664b7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/ksh_generic_09.dump
@@ -0,0 +1,20 @@
+|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S|H|_|O|P|T|I|O|N|S|=+0#af5f00255&| +0#e000e06&|E|R@1|N|O|=+0#af5f00255&| +0#e000e06&|C|O|M
+|P|_|C|W|O|R|D|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|L|I|N|E|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|P|O|I|N|T|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|K|E|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|W|O|R|D|B
+|R|E|A|K|S|=+0#af5f00255&| +0#e000e06&|C|O|M|P|_|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|g|e|n|)+0#e000e06&| +0#0000000&@48
+>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B|A|S|H|P|I|D|=+0#af5f00255&| +0#e000e06&|E|P|O|C|H|R|E|A|L|T|I|M|E|=+0#af5f00255&| +0#e000e06&|E|X|E|C|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|K|S|H|E|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|U|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|_|M|A|T
+|C|H|=+0#af5f00255&| +0#e000e06&|P|A|T|H|S|E|P|=+0#af5f00255&| +0#e000e06&|P|G|R|P|=+0#af5f00255&| +0#e000e06&|P|I|P|E|S|T|A|T|U|S|=+0#af5f00255&| +0#e000e06&|T|M|P|D|I|R|=+0#af5f00255&| +0#e000e06&|U|S|E|R|_|I|D|=+0#af5f00255&| +0#e000e06&|V|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|S|W|I|D|T|H|=+0#af5f00255&| +0#e000e06&|c+0#af5f00255&|o|m|p|l|e|t|e|)+0#e000e06&| +0#0000000&@1
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/mksh_00.dump b/runtime/syntax/testdir/dumps/mksh_00.dump
new file mode 100644
index 0000000..fcf4c10
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|m|k|s|h| +0#0000000&@63
+@75
+|#+0#0000e05&| |R|e|n|d|e|r|i|n|g| |n|a|m|e|s|p|a|c|e| |v|a|r|i|a|b|l|e|s| +0#0000000&@43
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|a+0#0000000&|d|s|f|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|a+0#0000000&|z|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|1+0#e000002&|]+0#e000e06&|[|2+0#e000002&|]+0#e000e06&|}
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|[+0#e000e06#ffffff0|v+0#0000000&|a|r|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|*+0#0000000&|]+0#e000e06&|}| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|#
+@1|b|a|z|}+0#e000e06#ffffff0| +0#0000000&@69
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|3+0#e000002&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|[+0#e000e06#ffffff0|z+0#0000000&|]+0#e000e06&|#+0#af5f00255&@1|b+0#0000000&|a|z|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|s|h|.|v|e|r|s|i|o|n|/+0#af5f00255&|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o
+|n|/+0#af5f00255#ffffff0|V+0#0000000&|/+0#af5f00255&|b+0#0000000&|}+0#e000e06&| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|/+0#af5f00255&|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|.|b|a|r|[|d+0#0000000&|]+0#e000e06&|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|/+0#af5f00255#ffffff0|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|f|o@1|.|b|a|r|/+0#af5f00255#ffffff0|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|b|a|r|.|f|o@1|/+0#af5f00255#ffffff0|%|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|b|a|r|/+0#af5f00255#ffffff0|#|b+0#0000000&|a|r|/+0#af5f00255&
+|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@70
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|^@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|,@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63
+|#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+@57|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/mksh_01.dump b/runtime/syntax/testdir/dumps/mksh_01.dump
new file mode 100644
index 0000000..44f1ef1
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|%|b+0#0000000&|a|r|f|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|f|o@1|/+0#af5f00255&|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|f|o@1|/+0#af5f00255&@1|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#e000002&|$+0#e000e06&|{|b|a|r|/+0#af5f00255&|#|b+0#0000000&|a|r|/+0#af5f00255&|f+0#0000000&|o@1|}+0#e000e06&| +0#0000000&@5
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|^@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|.+0#ffffff16#ff404010|s|h|.|v|e|r|s|i|o|n|,@1|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|^+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#e000002&|$+0#e000e06&|{|K|S|H|_|V|E|R|S|I|O|N|,+0#ffffff16#ff404010|}+0#e000e06#ffffff0| +0#0000000&@4
+@75
+|#+0#0000e05&| |'|a|l|a|r|m|'| |b|u|i|l|t|i|n| |(|p|r|e|s|e|n|t| |i|n| |k|s|h|9|3|u|+|,| |k|s|h|9|3|v|-| |a|n|d| |t|h|e| |9|3|u|+|m| |d|e|v| |b|r|a|n|c|h|)|.| +0#0000000&@1
+|a|l|a|r|m| |-+0#e000e06&@1|m|a|n| +0#0000000&@63
+>#+0#0000e05&| |T|h|e| |f|d|s| |a|n|d| |p|i|d|s| |b|u|i|l|t|i|n|s|.| |T|h|e|s|e| |k|s|h|9|3| |b|u|i|l|t|i|n|s| |h|a|v|e| |e|x|i|s|t|e|d| |s|i|n|c|e| |2|0@1|5|-|0
+|5|-|2@1| +0#0000000&@70
+|#+0#0000e05&| |a|n|d| |2|0@1|8|-|0|6|-|0|2|,| |r|e|s|p|e|c|t|i|v|e|l|y|.| |H|o|w|e|v|e|r|,| |t|h|e|s|e| |w|e|r|e| |n|o|t| |r|e|a|d|i|l|y| |e|n|a|b|l|e|d|;| |i|n
+|#| |9|3|u|+|m| |t|h|e|s|e| |c|a|n| |b|e| |e|n|a|b|l|e|d| |w|i|t|h| |t|h|e| |b|u|i|l|t|i|n| |c|o|m@1|a|n|d| |i|f| |l|i|b|c|m|d|.|s|o| |i|s| |p|r|e|s|e
+|n|t|,| +0#0000000&@71
+|#+0#0000e05&| |e|i|t|h|e|r| |v|i|a| |'|b|u|i|l|t|i|n| |-|f|'| |o|r| |(|i|n| |m|o|r|e| |r|e|c|e|n|t| |c|o|m@1|i|t|s|)| |w|i|t|h| |a| |r|e|g|u|l|a|r| |i|n|v|o|c|a
+|t|i|o|n| +0#0000000&@70
+|#+0#0000e05&| |o|f| |t|h|e| |'|b|u|i|l|t|i|n|'| |b|u|i|l|t|-|i|n|.| +0#0000000&@46
+|#+0#0000e05&| |c|f|.| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|k|s|h|9|3|/|k|s|h|/|c|o|m@1|i|t|/|f|1|5|e|2|c|4|1| +0#0000000&@24
+|b+0#af5f00255&|u|i|l|t|i|n| +0#0000000&|f|d|s| |p|i|d|s| @58
+|f|d|s|;| |p|i|d|s| @65
+@75
+|#+0#0000e05&| |U|n|i|x| |c|o|m@1|a|n|d|s| |w|h|i|c|h| |a|r|e| |p|r|o|v|i|d|e|d| |b|y| |k|s|h| |a|s| |b|u|i|l|t|i|n|s| |v|i|a| |l|i|b|c|m|d|.|s|o| +0#0000000&@7
+|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66
+@57|1|4|,|1| @10|6|%|
diff --git a/runtime/syntax/testdir/dumps/mksh_02.dump b/runtime/syntax/testdir/dumps/mksh_02.dump
new file mode 100644
index 0000000..d8825d3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_02.dump
@@ -0,0 +1,20 @@
+|b+0#af5f00255#ffffff0|a|s|e|n|a|m|e| +0#0000000&@66
+|c+0#af5f00255&|a|t| +0#0000000&@71
+|c+0#af5f00255&|h|g|r|p| +0#0000000&@69
+|c+0#af5f00255&|h|m|o|d| +0#0000000&@69
+|c+0#af5f00255&|h|o|w|n| +0#0000000&@69
+>c+0#af5f00255&|k|s|u|m| +0#0000000&@69
+|c+0#af5f00255&|m|p| +0#0000000&@71
+|c+0#af5f00255&|o|m@1| +0#0000000&@70
+|c+0#af5f00255&|p| +0#0000000&@72
+|c+0#af5f00255&|u|t| +0#0000000&@71
+|d+0#af5f00255&|a|t|e| +0#0000000&@70
+|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67
+|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|g+0#af5f00255&|r|e|p| +0#0000000&@70
+@57|2|9|,|1| @9|1|8|%|
diff --git a/runtime/syntax/testdir/dumps/mksh_03.dump b/runtime/syntax/testdir/dumps/mksh_03.dump
new file mode 100644
index 0000000..f166483
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_03.dump
@@ -0,0 +1,20 @@
+|g+0#af5f00255#ffffff0|r|e|p| +0#0000000&@70
+|h+0#af5f00255&|e|a|d| +0#0000000&@70
+|i+0#af5f00255&|c|o|n|v| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|i+0#af5f00255&|d| +0#0000000&@72
+|j+0#af5f00255&|o|i|n| +0#0000000&@70
+>l+0#af5f00255&|n| +0#0000000&@72
+|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67
+|l+0#af5f00255&|s| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68
+|m+0#af5f00255&|k|d|i|r| +0#0000000&@69
+|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68
+|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68
+|m+0#af5f00255&|v| +0#0000000&@72
+|o+0#af5f00255&|d| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|p+0#af5f00255&|a|s|t|e| +0#0000000&@69
+|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67
+|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@7|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|r+0#af5f00255&|e|v| +0#0000000&@71
+@57|4|7|,|1| @9|3|2|%|
diff --git a/runtime/syntax/testdir/dumps/mksh_04.dump b/runtime/syntax/testdir/dumps/mksh_04.dump
new file mode 100644
index 0000000..4dd849b
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_04.dump
@@ -0,0 +1,20 @@
+|r+0#af5f00255#ffffff0|e|v| +0#0000000&@71
+|r+0#af5f00255&|m| +0#0000000&@72
+|r+0#af5f00255&|m|d|i|r| +0#0000000&@69
+|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+>s|h|a|2|s|u|m| @8|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@6|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|s+0#af5f00255&|t@1|y| +0#0000000&@70
+|s+0#af5f00255&|u|m| +0#0000000&@71
+|s+0#af5f00255&|y|n|c| +0#0000000&@70
+|t+0#af5f00255&|a|i|l| +0#0000000&@70
+|t+0#af5f00255&|e@1| +0#0000000&@71
+|t+0#af5f00255&|r| +0#0000000&@13|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|t+0#af5f00255&@1|y| +0#0000000&@71
+|u+0#af5f00255&|n|a|m|e| +0#0000000&@69
+|u+0#af5f00255&|n|i|q| +0#0000000&@70
+|v|m|s|t|a|t|e| @8|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t|;| |o|n|l|y| |a|v|a|i|l|a|b|l|e| |i|n| |9|3|v|-| |a|n|d| |o|l|d|e|r| +0#0000000&@11
+|w+0#af5f00255&|c| +0#0000000&@72
+@57|6|5|,|1| @9|4|6|%|
diff --git a/runtime/syntax/testdir/dumps/mksh_05.dump b/runtime/syntax/testdir/dumps/mksh_05.dump
new file mode 100644
index 0000000..13afdbb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_05.dump
@@ -0,0 +1,20 @@
+|w+0#af5f00255#ffffff0|c| +0#0000000&@72
+|x+0#af5f00255&|a|r|g|s| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+|x+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |9|3|v|-| +0#0000000&@52
+@75
+|#+0#0000e05&| |S|H|A| |c|o|m@1|a|n|d| |n|o|t| |p|r|o|v|i|d|e|d| |a|s| |a| |b|u|i|l|t|i|n| |b|u|t| |i|n|c|l|u|d|e|d| |h|e|r|e| |f|o|r| |c|o|m|p|l|e|t|e|n|e|s@1| +0#0000000&
+>s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65
+@75
+|#+0#0000e05&| |p|o|l@1| |b|u|i|l|t|i|n| |(|9|3|v|-|)| +0#0000000&@53
+|p|o|l@1| |-+0#e000e06&@1|m|a|n| +0#0000000&@64
+@75
+|#+0#0000e05&| |m|k|s|e|r|v|i|c|e| |a|n|d| |e|l|o@1|p| |(|r|a|r|e|l|y| |p|r|o|v|i|d|e|d|;| |r|e|q|u|i|r|e|s| |S|H|O|P|T|_|M|K|S|E|R|V|I|C|E|)| +0#0000000&@9
+|m|k|s|e|r|v|i|c|e| |-+0#e000e06&@1|m|a|n|;+0#0000000&| |e|l|o@1|p| |-+0#e000e06&@1|h|e|l|p| +0#0000000&@45
+@75
+|#+0#0000e05&| |s|o|m|e| |m|k|s|h| |b|u|i|l|t|i|n|s| +0#0000000&@54
+|b+0#af5f00255&|i|n|d|;+0#0000000&| |r+0#af5f00255&|e|n|a|m|e| +0#0000000&@62
+@75
+|#+0#0000e05&| |;|&| |a|n|d| |;@1|&| |i|n| |c|a|s|e| |s|t|a|t|e|m|e|n|t|s| +0#0000000&@43
+|c+0#af5f00255&|a|s|e| +0#0000000&|x| |i+0#af5f00255&|n| +0#0000000&@65
+@8|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@57|8|3|,|1| @9|6|0|%|
diff --git a/runtime/syntax/testdir/dumps/sh_10_00.dump b/runtime/syntax/testdir/dumps/mksh_06.dump
similarity index 63%
copy from runtime/syntax/testdir/dumps/sh_10_00.dump
copy to runtime/syntax/testdir/dumps/mksh_06.dump
index b0c98ea..d6532e8 100644
--- a/runtime/syntax/testdir/dumps/sh_10_00.dump
+++ b/runtime/syntax/testdir/dumps/mksh_06.dump
@@ -1,11 +1,9 @@
->#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64
+| +0&#ffffff0@7|b|a|r|)+0#af5f00255&| +0#0000000&|f+0#af5f00255&|a|l|s|e| +0#0000000&|$+0#e000e06&|{|b|a|z|:+0#0000000&|1|}+0#e000e06&| +0#0000000&|;+0#af5f00255&|&| +0#0000000&@44
+@8|f|o@1|)+0#af5f00255&| +0#0000000&|t+0#af5f00255&|r|u|e| +0#0000000&|$+0#e000e06&|{|f|o@1|:+0#0000000&|0|:|0|}+0#e000e06&| +0#0000000&|;+0#af5f00255&@1|&| +0#0000000&@42
+@8|*|)+0#af5f00255&| +0#0000000&|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{|$|b|a|r|}| +0#e000002&|;+0#af5f00255&@1| +0#0000000&@4|#+0#0000e05&| |9|3|v|-| +0#0000000&@36
+|e+0#af5f00255&|s|a|c| +0#0000000&@70
@75
-|#+0#0000e05&| |T|h|i|s| |s|c|r|i|p|t| |i|s| |a| |t|e|s|t| |f|i|l|e| |f|o|r| |k|s|h|9|3| |s|h|a|r|e|d|-|s|t|a|t|e| +0#0000000&@23
-|#+0#0000e05&| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|s|u|b|s|h|a|r|e|s|)| |a|n|d| |m|k|s|h| |v|a|l|u|e| +0#0000000&@24
-|#+0#0000e05&| |s|u|b|s|t|i|t|u|t|i|o|n|s| |(|v|a|l|s|u|b|s|)|.| +0#0000000&@48
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
+>#+0#0000e05&| |B|e|l|o|w| |i|s| |s|u|b|s|h|a|r|e| |s|y|n|t|a|x| |s|u|p@1|o|r|t|e|d| |b|y| |b|o|t|h| |k|s|h|9|3| |a|n|d| |m|k|s|h|.| +0#0000000&@14
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|o|n|e| +0#e000e06&|}| +0#0000000&@55
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|t|w|o| +0#0000000&@50
|}+0#e000e06&| +0#0000000&@73
@@ -17,4 +15,6 @@
|}+0#e000e06&| +0#0000000&@73
|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49
-|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p|
+|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
+@75
+@57|1|0|1|,|1| @8|7|4|%|
diff --git a/runtime/syntax/testdir/dumps/mksh_07.dump b/runtime/syntax/testdir/dumps/mksh_07.dump
new file mode 100644
index 0000000..3219c17
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_07.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20
+|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43
+|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9
+| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52
+@16>R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50
+@8|}+0#00e0e07&| +0#0000000&@65
+@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|e|n|}| +0#0000000&@43
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;+0#af5f00255&|}+0#e000e06&|"+0#af5f00255&| +0#0000000&@36
+@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}|"+0#af5f00255&| +0#0000000&@24
+@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000&@36
+|}+0#e000e06&| +0#0000000&@73
+@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}| +0#0000000&@17
+@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
+@8|$+0#e000e06&|{|||e+0#af5f00255&|c|h|o| +0#e000002&|f|o@1|}+0#e000e06&| +0#0000000&@54
+@8|$+0#e000e06&|{|||e+0#af5f00255&|c|h|o| +0#e000002&|b|a|r| +0#0000000&@55
+|}+0#e000e06&| +0#0000000&@73
+|f+0#af5f00255&|i| +0#0000000&@72
+@75
+@57|1@1|9|,|3|-|1|7| @5|8@1|%|
diff --git a/runtime/syntax/testdir/dumps/mksh_08.dump b/runtime/syntax/testdir/dumps/mksh_08.dump
new file mode 100644
index 0000000..8f629e6
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_08.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|#+0#0000e05&| |=@5| +0#0000000&@66
+|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
+|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
+| +0#e000e06&@7>p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|%|s| |s|t|r| +0#0000000&@53
+|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
+|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#ffffff16#ff404010|/+0#af5f00255#ffffff0|t+0#0000000&|m|p|/+0#af5f00255&|s+0#0000000&|t|r|f|i|l|e|;|}+0#e000e06&| +0#0000000&@52
+@75
+|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
+|#+0#0000e05&| |k|s|h|8@1| |a|n|d| |k|s|h|9|3| |n|o|n|-|d|o|t| |s|p|e|c|i|a|l| |v|a|r|i|a|b|l|e|s| +0#0000000&@31
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |R|A|N|D|O|M|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|R|A|N|D|O|M|=+0#0000000&| +0#e000e06&|S|H|L|V|L|=+0#af5f00255&| +0#e000e06&|J|O|B|M|A|X|=+0#af5f00255&| +0#e000e06&|K|S|H|_|V|E|R|S|I|O|N|=+0#af5f00255&| +0#e000e06&|F|I|G|N|O|R|E|=+0#af5f00255&| +0#e000e06&|L|C|_|T|I|M|E|=+0#af5f00255&| +0#e000e06&|L|C|_
+|N|U|M|E|R|I|C|=+0#af5f00255&| +0#e000e06&|L|C|_|M|E|S@1|A|G|E|S|=+0#af5f00255&| +0#e000e06&|L|C|_|C|T|Y|P|E|=+0#af5f00255&| +0#e000e06&|L|C|_|C|O|L@1|A|T|E|=+0#af5f00255&| +0#e000e06&|L|C|_|A|L@1|=+0#af5f00255&| +0#e000e06&|L|A|N|G|=+0#af5f00255&| +0#e000e06&|F|P|A|T|H|=+0#af5f00255&| +0#e000e06&|P|S|4|=+0#af5f00255&| +0#e000e06&|O|P|T|I|N
+|D|=+0#af5f00255&| +0#e000e06&|O|P|T|A|R|G|=+0#af5f00255&| +0#e000e06&|t+0#af5f00255&|r|u|e| +0#e000e06&|;|}| +0#0000000&@56
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|L|I|N|E|N|O|=+0#af5f00255&| +0#e000e06&|S|E|C|O|N|D|S|=+0#af5f00255&| +0#e000e06&|T|M|O|U|T|=+0#af5f00255&| +0#e000e06&|P@1|I|D|=+0#af5f00255&| +0#e000e06&|L|I|N|E|S|=+0#af5f00255&| +0#e000e06&|C|O|L|U|M|N|S|=+0#af5f00255&| +0#e000e06&|V|I|S|U|A|L|=+0#af5f00255&| +0#e000e06&|O|L|D|P|W|D|=+0#af5f00255&| +0#e000e06&|P|S|3|=+0#af5f00255&| +0#e000e06&
+|M|A|I|L|P|A|T|H|=+0#af5f00255&| +0#e000e06&|C|D|P|A|T|H|=+0#af5f00255&| +0#e000e06&|F|C|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|C|M|D|=+0#af5f00255&| +0#e000e06&|H|I|S|T|E|D|I|T|=+0#af5f00255&| +0#e000e06&|H|I|S|T|S|I|Z|E|=+0#af5f00255&| +0#e000e06&|H|I|S|T|F|I|L|E|=+0#af5f00255&| +0#e000e06&|E|N|V|=+0#af5f00255&| +0#e000e06&|M|A|I|L|C
+|H|E|C|K|=+0#af5f00255&| +0#e000e06&|E|D|I|T|O|R|=+0#af5f00255&| +0#e000e06&|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|f+0#af5f00255&|a|l|s|e|)+0#e000e06&| +0#0000000&@47
+|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M
+|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|@+0#4040ff13&@2
+| +0#0000000&@56|1|3|7|,|2|-|9| @6|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/mksh_09.dump b/runtime/syntax/testdir/dumps/mksh_09.dump
new file mode 100644
index 0000000..1479af7
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/mksh_09.dump
@@ -0,0 +1,20 @@
+|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|(|R|E|P|L|Y|=+0#af5f00255&| +0#e000e06&|M|A|I|L|=+0#af5f00255&| +0#e000e06&|H|O|M|E|=+0#af5f00255&| +0#e000e06&|P|W|D|=+0#af5f00255&| +0#e000e06&|I|F|S|=+0#af5f00255&| +0#e000e06&|P|S|2|=+0#af5f00255&| +0#e000e06&|P|S|1|=+0#af5f00255&| +0#e000e06&|P|A|T|H|=+0#af5f00255&| +0#e000e06&|S+0#00e0e07&|H|_|O|P|T|I|O|N|S|=+0#0000000&| +0#e000e06&|E+0#00e0e07&|R@1|N|O|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M
+|P|_|C|W|O|R|D|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|L|I|N|E|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|P|O|I|N|T|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|K|E|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|R|E|P|L|Y|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|W|O|R|D|B
+|R|E|A|K|S|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|O|M|P|_|T|Y|P|E|=+0#0000000&| +0#e000e06&|c|o|m|p|g|e|n|)| +0#0000000&@48
+>p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|(|B|A|S|H|P|I|D|=+0#af5f00255&| +0#e000e06&|E|P|O|C|H|R|E|A|L|T|I|M|E|=+0#af5f00255&| +0#e000e06&|E|X|E|C|S|H|E|L@1|=+0#af5f00255&| +0#e000e06&|K|S|H|E|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|G|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|U|I|D|=+0#af5f00255&| +0#e000e06&|K|S|H|_|M|A|T
+|C|H|=+0#af5f00255&| +0#e000e06&|P|A|T|H|S|E|P|=+0#af5f00255&| +0#e000e06&|P|G|R|P|=+0#af5f00255&| +0#e000e06&|P|I|P|E|S|T|A|T|U|S|=+0#af5f00255&| +0#e000e06&|T|M|P|D|I|R|=+0#af5f00255&| +0#e000e06&|U|S|E|R|_|I|D|=+0#af5f00255&| +0#e000e06&|V+0#00e0e07&|P|A|T|H|=+0#0000000&| +0#e000e06&|C+0#00e0e07&|S|W|I|D|T|H|=+0#0000000&| +0#e000e06&|c|o|m|p|l|e|t|e|)| +0#0000000&@1
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|4|6|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_02_01.dump b/runtime/syntax/testdir/dumps/sh_02_01.dump
index 2c09615..e4fb549 100644
--- a/runtime/syntax/testdir/dumps/sh_02_01.dump
+++ b/runtime/syntax/testdir/dumps/sh_02_01.dump
@@ -5,7 +5,7 @@
|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
>c+0#af5f00255&|a|s|e| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|a@2|"+0#af5f00255&| +0#0000000&|i+0#af5f00255&|n| +0#0000000&@60
|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
-@8|b@2|)+0#af5f00255&| +0#0000000&@1|c+0#00e0e07&@2|=+0#0000000&|`+0#e000e06&|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|d@2||+0#af5f00255&|c+0#e000e06&|u|t| |-|b|4|-|`| +0#0000000&@36
+@8|b@2|)+0#af5f00255&| +0#0000000&@1|c+0#00e0e07&@2|=+0#0000000&|`+0#e000e06&|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|d@2||+0#af5f00255&|c|u|t| +0#e000e06&|-|b|4|-|`| +0#0000000&@36
@8|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|t+0#e000002&|e|s|t|"+0#af5f00255&| +0#0000000&@55
|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@65
@8|;+0#af5f00255&@1| +0#0000000&@64
diff --git a/runtime/syntax/testdir/dumps/sh_05_00.dump b/runtime/syntax/testdir/dumps/sh_05_00.dump
index 73164f0..df5c3e5 100644
--- a/runtime/syntax/testdir/dumps/sh_05_00.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_00.dump
@@ -6,7 +6,7 @@
@75
|#+0#0000e05&| |T|h|i|s| |a|l@1| |s|h|o|u|l|d| |b|e| |O|K| +0#0000000&@51
|#+0#0000e05&| |C|a|s|e| |0|a| +0#0000000&@65
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |d|a|t|e| @58
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |d+0#af5f00255&|a|t|e| +0#0000000&@58
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|v|a|l|u|e|1| @58
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|'+0#af5f00255&|v+0#e000002&|a|l|u|e|2|'+0#af5f00255&| +0#0000000&@56
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|"+0#af5f00255&|v+0#e000002&|a|l|u|e|3|"+0#af5f00255&| +0#0000000&@56
diff --git a/runtime/syntax/testdir/dumps/sh_05_01.dump b/runtime/syntax/testdir/dumps/sh_05_01.dump
index 8350053..6b1c14f 100644
--- a/runtime/syntax/testdir/dumps/sh_05_01.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_01.dump
@@ -15,6 +15,6 @@
@75
|#+0#0000e05&| |C|a|s|e| |0|d| +0#0000000&@65
|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|d+0#e000002&|a|t|e|"+0#af5f00255&| +0#0000000&@49
-|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|`+0#e000e06&|d|a|t|e|`| +0#0000000&@58
-|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|`+0#e000e06&|i|d| |-|n|g|`| +0#0000000&@56
+|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|`+0#e000e06&|d+0#af5f00255&|a|t|e|`+0#e000e06&| +0#0000000&@58
+|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|`+0#e000e06&|i+0#af5f00255&|d| +0#e000e06&|-|n|g|`| +0#0000000&@56
@57|1|9|,|1| @10|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_05_02.dump b/runtime/syntax/testdir/dumps/sh_05_02.dump
index afcdd6f..1de6737 100644
--- a/runtime/syntax/testdir/dumps/sh_05_02.dump
+++ b/runtime/syntax/testdir/dumps/sh_05_02.dump
@@ -1,5 +1,5 @@
-|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|`+0#e000e06&|i|d| |-|n|g|`| +0#0000000&@56
-|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|`+0#e000e06&|i|d| |-|n|g| ||+0#af5f00255&| +0#e000e06&|w|c| |-|c|`| +0#0000000&@48
+|V+0#00e0e07#ffffff0|a|r|i|a|b|l|e|2|=+0#0000000&|`+0#e000e06&|i+0#af5f00255&|d| +0#e000e06&|-|n|g|`| +0#0000000&@56
+|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|`+0#e000e06&|i+0#af5f00255&|d| +0#e000e06&|-|n|g| ||+0#af5f00255&| +0#e000e06&|w+0#af5f00255&|c| +0#e000e06&|-|c|`| +0#0000000&@48
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@31
@75
|#+0#0000e05&@74
diff --git a/runtime/syntax/testdir/dumps/sh_06_00.dump b/runtime/syntax/testdir/dumps/sh_06_00.dump
index c037b75..5003c31 100644
--- a/runtime/syntax/testdir/dumps/sh_06_00.dump
+++ b/runtime/syntax/testdir/dumps/sh_06_00.dump
@@ -4,7 +4,7 @@
|D+0#00e0e07&|e|b|u|g|S|c|r|i|p|t|=+0#0000000&|s|e|t| @59
@75
|#+0#0000e05&| |S|h|o|w| |t|h|a|t| |w|e| |a|r|e| |b|u|s|y|.| +0#0000000&@50
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|P+0#e000002&|l|e|a|s|e| |w|a|i|t| |.@2| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&|>+0#af5f00255&|`+0#e000e06&|t@1|y|`| +0#0000000&@30
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|P+0#e000002&|l|e|a|s|e| |w|a|i|t| |.@2| |\+0#e000e06&|c|"+0#af5f00255&| +0#e000002&|>+0#af5f00255&|`+0#e000e06&|t+0#af5f00255&@1|y|`+0#e000e06&| +0#0000000&@30
@75
|#+0#0000e05&@74
@5| +0#0000000&@69
diff --git a/runtime/syntax/testdir/dumps/sh_08_00.dump b/runtime/syntax/testdir/dumps/sh_08_00.dump
index 9be018a..7334018 100644
--- a/runtime/syntax/testdir/dumps/sh_08_00.dump
+++ b/runtime/syntax/testdir/dumps/sh_08_00.dump
@@ -8,13 +8,13 @@
@75
|#+0#0000e05&| |S|e|v|e|r|a|l| |k|e|y|w|o|r|d|s| |w|i|t|h|o|u|t| |a|n|y| |q|u|o|t|e|s|!| +0#0000000&@36
|#+0#0000e05&| |C|a|s|e| |1|a|.| |S|e|v|e|r|a|l| |C|o|n|s|t|a|n|t|s| | +0#0000000&@45
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |d|a|t|e| @58
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |d+0#af5f00255&|a|t|e| +0#0000000&@58
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@36
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@36
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@36
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
@75
|#+0#0000e05&| |C|a|s|e| |1|b|.| |V|a|r|i|a|b|l|e| |a|n|d| |C|o|n|s|t|a|n|t| +0#0000000&@42
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d+0#af5f00255&|a|t|e|`+0#e000e06&|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@30
|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/sh_08_01.dump b/runtime/syntax/testdir/dumps/sh_08_01.dump
index 45758cc..40309b9 100644
--- a/runtime/syntax/testdir/dumps/sh_08_01.dump
+++ b/runtime/syntax/testdir/dumps/sh_08_01.dump
@@ -2,14 +2,14 @@
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
@75
|#+0#0000e05&| |C|a|s|e| |1|b|.| |V|a|r|i|a|b|l|e| |a|n|d| |C|o|n|s|t|a|n|t| +0#0000000&@42
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d+0#af5f00255&|a|t|e|`+0#e000e06&|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
>V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@30
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|$+0#e000e06&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@30
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|?|$+0#e000e06&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@30
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
@75
|#+0#0000e05&| |C|a|s|e| |1|c|.| |C|o|n|s|t|a|n|t| |a|n|d| |V|a|r|i|a|b|l|e| +0#0000000&@42
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d+0#af5f00255&|a|t|e|`+0#e000e06&|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@27
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@27
|V+0#00e0e07&|a|r|i|a|b|l|e|3|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|+|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@6|#+0#0000e05&|!| |:|+| |i|s| |b|a|s|h|-|o|n|l|y|,| |e
diff --git a/runtime/syntax/testdir/dumps/sh_08_02.dump b/runtime/syntax/testdir/dumps/sh_08_02.dump
index b57af0b..ec9470d 100644
--- a/runtime/syntax/testdir/dumps/sh_08_02.dump
+++ b/runtime/syntax/testdir/dumps/sh_08_02.dump
@@ -2,7 +2,7 @@
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
@75
|#+0#0000e05&| |C|a|s|e| |1|d|.| |M|o|r|e| |V|a|r|i|a|b|l|e|s| |a|n|d| |C|o|n|s|t|a|n|t|s|.| |S|t|a|r|t|i|n|g| |w|i|t|h| |a| |V|a|r|i|a|b|l|e|.| +0#0000000&@8
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d+0#af5f00255&|a|t|e|`+0#e000e06&|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
>V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@44
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@20
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|$+0#e000e06&|S|H|E|L@1| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@20
@@ -10,7 +10,7 @@
|e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|1|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|2|"+0#af5f00255&| +0#e000002&|;+0#0000000&| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|V|a|r|i|a|b|l|e|3|"+0#af5f00255&| +0#0000000&@17
@75
|#+0#0000e05&| |C|a|s|e| |1|e|.| |M|o|r|e| |C|o|n|s|t|a|n|t|s| |a|n|d| |V|a|r|i|a|b|l|e|s|.| |S|t|a|r|t|i|n|g| |w|i|t|h| |a| |C|o|n|s|t|a|n|t|.| +0#0000000&@8
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d+0#af5f00255&|a|t|e|`+0#e000e06&|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|"|T+0#e000002&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E| +0#e000002&|$+0#e000e06&|S|H|E|L@1|"+0#af5f00255&|}+0#e000e06&| +0#0000000&@18
|V+0#00e0e07&|a|r|i|a|b|l|e|1|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E| +0#0000000&|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@20
|V+0#00e0e07&|a|r|i|a|b|l|e|2|=+0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|=|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E| +0#0000000&|$+0#e000e06&|S|H|E|L@1|}| +0#0000000&@20
diff --git a/runtime/syntax/testdir/dumps/sh_08_03.dump b/runtime/syntax/testdir/dumps/sh_08_03.dump
index 5426188..ef07998 100644
--- a/runtime/syntax/testdir/dumps/sh_08_03.dump
+++ b/runtime/syntax/testdir/dumps/sh_08_03.dump
@@ -1,6 +1,6 @@
| +0&#ffffff0@74
|#+0#0000e05&| |C|a|s|e| |1|x|.| |T|h|e| |s|a|m|e| |w|i|t|h| |'|:|'| +0#0000000&@46
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d+0#af5f00255&|a|t|e|`+0#e000e06&|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@44
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|$+0#e000e06&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@38
>:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|:+0#af5f00255&|-|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@35
@@ -9,7 +9,7 @@
@75
|#+0#0000e05&| |C|a|s|e| |1|y|.| |T|h|e| |s|a|m|e| |w|i|t|h| |'|:|'| |a|n|d| |w|i|t|h|o|u|t| |t|h|e| |'|:|'| |i|n| |t|h|e| |p|a|r|a|m|e|t|e|r| |s|u|b|s|t|i|t|u|t
|i|o|n| +0#0000000&@71
-|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d|a|t|e|`|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
+|[+0#af5f00255&| +0#0000000&|-+0#af5f00255&|t| +0#0000000&|0+0#e000002&| +0#0000000&|]+0#af5f00255&| +0#0000000&|&@1| |e+0#af5f00255&|c|h|o| +0#e000002&|"+0#af5f00255&|\+0#e000e06&|n|`|d+0#af5f00255&|a|t|e|`+0#e000e06&|"+0#af5f00255&| +0#e000002&|&+0#0000000&@1| |u+0#af5f00255&|n|s|e|t| +0#00e0e07&|V|a|r|i|a|b|l|e|A| +0#0000000&@28
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@45
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|$+0#e000e06&|H|O|M|E| +0#0000000&|T|h|i|s| |i|s| |a| |T|e|x|t|}+0#e000e06&| +0#0000000&@39
|:+0#0000e05&| +0#0000000&|$+0#e000e06&|{|V|a|r|i|a|b|l|e|A|-+0#af5f00255&|T+0#0000000&|h|i|s| |i|s| |a| |T|e|x|t| |i|n| |$+0#e000e06&|H|O|M|E|}| +0#0000000&@36
diff --git a/runtime/syntax/testdir/dumps/sh_09_00.dump b/runtime/syntax/testdir/dumps/sh_09_00.dump
index 8a51f39..58ab202 100644
--- a/runtime/syntax/testdir/dumps/sh_09_00.dump
+++ b/runtime/syntax/testdir/dumps/sh_09_00.dump
@@ -1,20 +1,20 @@
>#+0#0000e05#ffffff0|!|/|b|i|n|/|d|a|s|h| +0#0000000&@63
|#+0#0000e05&| |T|e|s|t| |f|i|l|e| |f|o|r| |v|i|m| |t|h|e| |c|h|e|c|k| |(|)| |s|u|b|s|h|e|l@1|s| +0#0000000&@32
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|1| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@50
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|}| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@48
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@53
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|1| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@50
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|}| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@48
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@53
|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|-|.+0#0000000&|}+0#e000e06&| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |s+0#af5f00255&|e|d| +0#0000000&|-+0#e000e06&|e| +0#0000000&|'+0#af5f00255&|s+0#e000002&|!|$|!|/|!|'+0#af5f00255&| +0#0000000&|-+0#e000e06&|e| +0#0000000&|'+0#af5f00255&|s+0#e000002&|!|/@1|*|$|!|/|!|'+0#af5f00255&| +0#0000000&@20
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|+|.+0#0000000&|}+0#e000e06&| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@45
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|=|.+0#0000000&|}+0#e000e06&| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@45
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|?|}+0#e000e06&| @1|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@45
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@53
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|H|O|M|E| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@47
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|H|O|M|E|}| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@45
-|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|H|O|M|E|}| |)| +0#0000000&||| |w|c| |-+0#e000e06&|c| +0#0000000&@52
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@53
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|+|.+0#0000000&|}+0#e000e06&| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@45
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@53
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|=|.+0#0000000&|}+0#e000e06&| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@45
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@53
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|1|:+0#af5f00255&|?|}+0#e000e06&| @1|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@45
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@53
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|H|O|M|E| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@47
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|H|O|M|E|}| |;+0#af5f00255&| +0#e000e06&|$|p|w|d| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@45
+|(+0#e000e06&| |c+0#af5f00255&|d| +0#e000e06&|$|{|H|O|M|E|}| |)| +0#0000000&||| |w+0#af5f00255&|c| +0#0000000&|-+0#e000e06&|c| +0#0000000&@52
|(|(+0#e000e06&|n+0#00e0e07&|=+0#0000000&|1+0#e000002&|+|2|)+0#e000e06&|)+0#ffffff16#ff404010| +0#0000000#ffffff0@65
|l+0#af5f00255&|e|t| +0#0000000&|n+0#00e0e07&|=+0#0000000&|1+0#e000002&|++0#0000000&|2+0#e000002&| +0#0000000&@65
|i|s|_|d|a|s|h|:| |1|,| |i|s|_|p|o|s|i|x|:| |1|,| |i|s|_|s|h|:| |1|,| @22|1|,|1| @10|A|l@1|
diff --git a/runtime/syntax/testdir/dumps/sh_10_01.dump b/runtime/syntax/testdir/dumps/sh_10_01.dump
deleted file mode 100644
index c1d3531..0000000
--- a/runtime/syntax/testdir/dumps/sh_10_01.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-|p+0#af5f00255#ffffff0|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|o|u|r|'+0#af5f00255&|;| +0#e000e06&|}| +0#0000000&@51
-|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|f+0#e000002&|i|v|e|'+0#af5f00255&| +0#e000002&|;+0#e000e06&|}| +0#0000000&@51
-|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| |e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|i|x|'+0#af5f00255&| +0#0000000&@55
-|}+0#e000e06&| +0#0000000&@73
-|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|{| @7|e+0#af5f00255&|c|h|o| +0#e000002&|'+0#af5f00255&|s+0#e000002&|e|v|e|n|'+0#af5f00255&| +0#e000e06&@3|}| +0#0000000&@41
->e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| |p+0#af5f00255&|r|i|n|t| +0#e000002&|'+0#af5f00255&|e+0#e000002&|i|g|h|t|'+0#af5f00255&| +0#e000e06&@2|}| +0#0000000&@49
-|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|i|n|e|=+0#0000000&|$+0#e000e06&|{| |p+0#af5f00255&|w|d|;| +0#e000e06&|}| +0#0000000&@52
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |V|a|l|u|e| |s|u|b|s|t|i|t|u|t|i|o|n|s| |o|f| |t|h|e| |f|o|r|m| |$|{|||c|o|m@1|a|n|d|}| |a|r|e| |o|n|l|y| +0#0000000&@20
-|#+0#0000e05&| |s|u|p@1|o|r|t|e|d| |b|y| |m|k|s|h|,| |n|o|t| |k|s|h|9|3|.| +0#0000000&@43
-|i+0#af5f00255&|f| |!| +0#0000000&|c+0#af5f00255&|o|m@1|a|n|d| +0#0000000&|e+0#af5f00255&|v|a|l| +0#0000000&|'+0#af5f00255&|(+0#e000002&@1|.|s|h|.|v|e|r|s|i|o|n| |>|=| |2|0@1|7|0|7|0|3|)@1|'+0#af5f00255&| +0#0000000&|2+0#e000002&|>+0#af5f00255&|/+0#0000000&|d|e|v|/|n|u|l@1|;+0#af5f00255&| +0#0000000&|t+0#af5f00255&|h|e|n| +0#0000000&@9
-| +0#00e0e07&@7|v|a|l|s|u|b|f|u|n|c|(|)| |{| +0#0000000&@52
-@16|R+0#e000e06&|E|P|L|Y|=+0#af5f00255&|$+0#e000e06&|1| +0#0000000&@50
-@8|}+0#00e0e07&| +0#0000000&@65
-@8|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|e|n|}| +0#0000000&@43
-@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |e|l|e|v|e|n|;+0#af5f00255&|}+0#e000e06&|"+0#af5f00255&| +0#0000000&@36
-@8|p+0#af5f00255&|r|i|n|t|f| +0#0000000&|'+0#af5f00255&|%+0#e000002&|s|'+0#af5f00255&| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|w|e|l|v|e| @6|}|"+0#af5f00255&| +0#0000000&@24
-@8|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000&@36
-@57|1|9|,|1| @9|4|3|%|
diff --git a/runtime/syntax/testdir/dumps/sh_10_02.dump b/runtime/syntax/testdir/dumps/sh_10_02.dump
deleted file mode 100644
index e03c3f8..0000000
--- a/runtime/syntax/testdir/dumps/sh_10_02.dump
+++ /dev/null
@@ -1,20 +0,0 @@
-| +0&#ffffff0@7|u+0#00e0e07&|n|l|u|c|k|y|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |t|h|i|r|t|e@1|n| +0#0000000&@36
-|}+0#e000e06&| +0#0000000&@73
-@8|t+0#af5f00255&|y|p|e|s|e|t| +0#0000000&|n+0#00e0e07&|o|t|a|f|l|o|a|t|=+0#0000000&|$+0#e000e06&|{|||v|a|l|s|u|b|f|u|n|c| |n|o|t|a|n|u|m|b|e|r| @5|}| +0#0000000&@17
-@8|p+0#af5f00255&|r|i|n|t| +0#e000002&|$+0#e000e06&|u|n|l|u|c|k|y| +0#e000002&|$+0#e000e06&|n|o|t|a|n|u|m|b|e|r| +0#0000000&@40
-@8|$+0#e000e06&|{|||e+0#af5f00255&|c|h|o| +0#e000002&|f|o@1|}+0#e000e06&| +0#0000000&@54
-@8>$+0#e000e06&|{|||e+0#af5f00255&|c|h|o| +0#e000002&|b|a|r| +0#0000000&@55
-|}+0#e000e06&| +0#0000000&@73
-|f+0#af5f00255&|i| +0#0000000&@72
-@75
-|#+0#0000e05&| |=@5| +0#0000000&@66
-|#+0#0000e05&| |S|h|a|r|e|d|-|s|t|a|t|e| |c|o|m@1|a|n|d| |s|u|b|s|t|i|t|u|t|i|o|n|s| |u|s|i|n|g| |t|h|e| |s|y|n|t|a|x| |$|{|<|f|i|l|e|;|}| +0#0000000&@11
-|#+0#0000e05&| |a|r|e| |o|n|l|y| |s|u|p@1|o|r|t|e|d| |b|y| |k|s|h|9|3|,| |n|o|t| |m|k|s|h|.| +0#0000000&@34
-|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{| +0#0000000&@67
-| +0#e000e06&@7|p+0#af5f00255&|r|i|n|t|f| +0#e000e06&|%|s| |s|t|r| +0#0000000&@53
-|}+0#e000e06&| +0#e000002&|>+0#af5f00255&| +0#0000000&|/|t|m|p|/|s|t|r|f|i|l|e| @58
-|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|<+0#af5f00255&|/+0#e000e06&|t|m|p|/|s|t|r|f|i|l|e|;|}| +0#0000000&@52
-@75
-|e+0#af5f00255&|x|i|t| +0#0000000&|0+0#e000002&| +0#0000000&@68
-|~+0#4040ff13&| @73
-| +0#0000000&@56|3|7|,|2|-|9| @7|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump b/runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump
new file mode 100644
index 0000000..dcfb57c
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/sh_bash_sundrous_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|b|a|s|h| +0#0000000&@63
+|b+0#af5f00255&|a|s|e|n|a|m|e| +0#0000000&@66
+|c+0#af5f00255&|a|t| +0#0000000&@71
+|c+0#af5f00255&|h|g|r|p| +0#0000000&@69
+|c+0#af5f00255&|h|m|o|d| +0#0000000&@69
+|c+0#af5f00255&|h|o|w|n| +0#0000000&@69
+|c+0#af5f00255&|k|s|u|m| +0#0000000&@69
+|c+0#af5f00255&|m|p| +0#0000000&@71
+|c+0#af5f00255&|o|m@1| +0#0000000&@70
+|c+0#af5f00255&|p| +0#0000000&@72
+|c+0#af5f00255&|u|t| +0#0000000&@71
+|d+0#af5f00255&|a|t|e| +0#0000000&@70
+|d+0#af5f00255&|i|r|n|a|m|e| +0#0000000&@67
+|e+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+|g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|i|s|_|b|a|s|h|:| |1|,| @45|1|,|1| @10|T|o|p|
diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump b/runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump
new file mode 100644
index 0000000..ad3449d
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/sh_bash_sundrous_01.dump
@@ -0,0 +1,20 @@
+|e+0#af5f00255#ffffff0|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|e+0#af5f00255&|x|p|r| +0#0000000&@70
+|f+0#af5f00255&|g|r|e|p| +0#0000000&@10|#+0#0000e05&| |O|b|s|o|l|e|s|c|e|n|t| +0#0000000&@45
+|f+0#af5f00255&|m|t| +0#0000000&@71
+|f+0#af5f00255&|o|l|d| +0#0000000&@70
+>g+0#af5f00255&|e|t|c|o|n|f| +0#0000000&@67
+|g+0#af5f00255&|r|e|p| +0#0000000&@70
+|h+0#af5f00255&|e|a|d| +0#0000000&@70
+|i+0#af5f00255&|c|o|n|v| +0#0000000&@69
+|i+0#af5f00255&|d| +0#0000000&@72
+|j+0#af5f00255&|o|i|n| +0#0000000&@70
+|l+0#af5f00255&|n| +0#0000000&@72
+|l+0#af5f00255&|o|g|n|a|m|e| +0#0000000&@67
+|l+0#af5f00255&|s| +0#0000000&@72
+|m+0#af5f00255&|d|5|s|u|m| +0#0000000&@68
+|m+0#af5f00255&|k|d|i|r| +0#0000000&@69
+|m+0#af5f00255&|k|f|i|f|o| +0#0000000&@68
+|m+0#af5f00255&|k|t|e|m|p| +0#0000000&@68
+|m+0#af5f00255&|v| +0#0000000&@72
+@57|1|9|,|1| @9|3|4|%|
diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump b/runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump
new file mode 100644
index 0000000..073d29f
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/sh_bash_sundrous_02.dump
@@ -0,0 +1,20 @@
+|m+0#af5f00255#ffffff0|v| +0#0000000&@72
+|o+0#af5f00255&|d| +0#0000000&@72
+|p+0#af5f00255&|a|s|t|e| +0#0000000&@69
+|p+0#af5f00255&|a|t|h|c|h|k| +0#0000000&@67
+|r+0#af5f00255&|e|a|d|l|i|n|k| +0#0000000&@66
+>r+0#af5f00255&|e|a|l|p|a|t|h| +0#0000000&@66
+|r+0#af5f00255&|e|v| +0#0000000&@71
+|r+0#af5f00255&|m| +0#0000000&@72
+|r+0#af5f00255&|m|d|i|r| +0#0000000&@69
+|s+0#af5f00255&|h|a|1|s|u|m| +0#0000000&@67
+|s+0#af5f00255&|h|a|2|5|6|s|u|m| +0#0000000&@65
+|s+0#af5f00255&|h|a|2@1|4|s|u|m| +0#0000000&@65
+|s+0#af5f00255&|h|a|3|8|4|s|u|m| +0#0000000&@65
+|s+0#af5f00255&|h|a|5|1|2|s|u|m| +0#0000000&@65
+|s+0#af5f00255&|t@1|y| +0#0000000&@70
+|s+0#af5f00255&|u|m| +0#0000000&@71
+|s+0#af5f00255&|y|n|c| +0#0000000&@70
+|t+0#af5f00255&|a|i|l| +0#0000000&@70
+|t+0#af5f00255&|e@1| +0#0000000&@71
+@57|3|7|,|1| @9|8|1|%|
diff --git a/runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump b/runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump
new file mode 100644
index 0000000..5a24b40
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/sh_bash_sundrous_03.dump
@@ -0,0 +1,20 @@
+|t+0#af5f00255#ffffff0|e@1| +0#0000000&@71
+|t+0#af5f00255&|r| +0#0000000&@72
+|t+0#af5f00255&@1|y| +0#0000000&@71
+|u+0#af5f00255&|n|a|m|e| +0#0000000&@69
+|u+0#af5f00255&|n|i|q| +0#0000000&@70
+>w+0#af5f00255&|c| +0#0000000&@72
+|x+0#af5f00255&|a|r|g|s| +0#0000000&@69
+|x+0#af5f00255&|g|r|e|p| +0#0000000&@69
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|5@1|,|1| @9|B|o|t|
diff --git a/runtime/syntax/testdir/input/ksh2020.ksh b/runtime/syntax/testdir/input/ksh2020.ksh
new file mode 100644
index 0000000..edb1ab2
--- /dev/null
+++ b/runtime/syntax/testdir/input/ksh2020.ksh
@@ -0,0 +1,146 @@
+#!/bin/ksh2020
+
+# Rendering namespace variables
+echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]}
+echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz}
+echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b}
+echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo}
+echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo}
+echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo}
+echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,}
+
+# 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch).
+alarm --man
+# The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22
+# and 2008-06-02, respectively. However, these were not readily enabled; in
+# 93u+m these can be enabled with the builtin command if libcmd.so is present,
+# either via 'builtin -f' or (in more recent commits) with a regular invocation
+# of the 'builtin' built-in.
+# cf. https://github.com/ksh93/ksh/commit/f15e2c41
+builtin fds pids
+fds; pids
+
+# Unix commands which are provided by ksh as builtins via libcmd.so
+basename
+cat
+chgrp
+chmod
+chown
+cksum
+cmp
+comm
+cp
+cut
+date
+dirname
+egrep # Obsolescent
+expr
+fgrep # Obsolescent
+fmt
+fold
+getconf
+grep
+head
+iconv # 93v-
+id
+join
+ln
+logname
+ls # 93v-
+md5sum
+mkdir
+mkfifo
+mktemp
+mv
+od # 93v-
+paste
+pathchk
+readlink # 93v-
+realpath # 93v-
+rev
+rm
+rmdir
+sha1sum # 93v-
+sha256sum # 93v-
+sha2sum # 93v-
+sha384sum # 93v-
+sha512sum # 93v-
+stty
+sum
+sync
+tail
+tee
+tr # 93v-
+tty
+uname
+uniq
+vmstate # Obsolescent; only available in 93v- and older
+wc
+xargs # 93v-
+xgrep # 93v-
+
+# SHA command not provided as a builtin but included here for completeness
+sha224sum
+
+# poll builtin (93v-)
+poll --man
+
+# mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE)
+mkservice --man; eloop --help
+
+# some mksh builtins
+bind; rename
+
+# ;& and ;;& in case statements
+case x in
+ bar) false ${baz:1} ;&
+ foo) true ${foo:0:0} ;;&
+ *) print ${bar} ;;
+esac
+
+# Below is subshare syntax supported by both ksh93 and mksh.
+print ${ echo one }
+print ${ echo two
+}
+print ${
+echo three }
+print ${ echo 'four'; }
+print ${ echo 'five' ;}
+print ${ echo 'six'
+}
+print ${ echo 'seven' }
+echo ${ print 'eight' }
+typeset nine=${ pwd; }
+
+# Value substitutions of the form ${|command} are only
+# supported by mksh, not ksh93.
+if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
+ valsubfunc() {
+ REPLY=$1
+ }
+ echo ${|valsubfunc ten}
+ print "${|valsubfunc eleven;}"
+ printf '%s' "${|valsubfunc twelve }"
+ unlucky=${|valsubfunc thirteen
+}
+ typeset notafloat=${|valsubfunc notanumber }
+ print $unlucky $notanumber
+ ${|echo foo}
+ ${|echo bar
+}
+fi
+
+# ======
+# Shared-state command substitutions using the syntax ${<file;}
+# are only supported by ksh93, not mksh.
+echo ${
+ printf %s str
+} > /tmp/strfile
+echo ${</tmp/strfile;}
+
+exit 0
+# ksh88 and ksh93 non-dot special variables
+print ${ RANDOM= SRANDOM= SHLVL= JOBMAX= KSH_VERSION= FIGNORE= LC_TIME= LC_NUMERIC= LC_MESSAGES= LC_CTYPE= LC_COLLATE= LC_ALL= LANG= FPATH= PS4= OPTIND= OPTARG= true ;}
+print $(LINENO= SECONDS= TMOUT= PPID= LINES= COLUMNS= VISUAL= OLDPWD= PS3= MAILPATH= CDPATH= FCEDIT= HISTCMD= HISTEDIT= HISTSIZE= HISTFILE= ENV= MAILCHECK= EDITOR= SHELL= false)
+print $(REPLY= MAIL= HOME= PWD= IFS= PS2= PS1= PATH= SH_OPTIONS= ERRNO= COMP_CWORD= COMP_LINE= COMP_POINT= COMP_WORDS= COMP_KEY= COMPREPLY= COMP_WORDBREAKS= COMP_TYPE= compgen)
+print $(BASHPID= EPOCHREALTIME= EXECSHELL= KSHEGID= KSHGID= KSHUID= KSH_MATCH= PATHSEP= PGRP= PIPESTATUS= TMPDIR= USER_ID= VPATH= CSWIDTH= complete)
diff --git a/runtime/syntax/testdir/input/ksh88.ksh b/runtime/syntax/testdir/input/ksh88.ksh
new file mode 100644
index 0000000..20ce318
--- /dev/null
+++ b/runtime/syntax/testdir/input/ksh88.ksh
@@ -0,0 +1,146 @@
+#!/bin/ksh88
+
+# Rendering namespace variables
+echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]}
+echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz}
+echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b}
+echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo}
+echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo}
+echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo}
+echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,}
+
+# 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch).
+alarm --man
+# The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22
+# and 2008-06-02, respectively. However, these were not readily enabled; in
+# 93u+m these can be enabled with the builtin command if libcmd.so is present,
+# either via 'builtin -f' or (in more recent commits) with a regular invocation
+# of the 'builtin' built-in.
+# cf. https://github.com/ksh93/ksh/commit/f15e2c41
+builtin fds pids
+fds; pids
+
+# Unix commands which are provided by ksh as builtins via libcmd.so
+basename
+cat
+chgrp
+chmod
+chown
+cksum
+cmp
+comm
+cp
+cut
+date
+dirname
+egrep # Obsolescent
+expr
+fgrep # Obsolescent
+fmt
+fold
+getconf
+grep
+head
+iconv # 93v-
+id
+join
+ln
+logname
+ls # 93v-
+md5sum
+mkdir
+mkfifo
+mktemp
+mv
+od # 93v-
+paste
+pathchk
+readlink # 93v-
+realpath # 93v-
+rev
+rm
+rmdir
+sha1sum # 93v-
+sha256sum # 93v-
+sha2sum # 93v-
+sha384sum # 93v-
+sha512sum # 93v-
+stty
+sum
+sync
+tail
+tee
+tr # 93v-
+tty
+uname
+uniq
+vmstate # Obsolescent; only available in 93v- and older
+wc
+xargs # 93v-
+xgrep # 93v-
+
+# SHA command not provided as a builtin but included here for completeness
+sha224sum
+
+# poll builtin (93v-)
+poll --man
+
+# mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE)
+mkservice --man; eloop --help
+
+# some mksh builtins
+bind; rename
+
+# ;& and ;;& in case statements
+case x in
+ bar) false ${baz:1} ;&
+ foo) true ${foo:0:0} ;;&
+ *) print ${bar} ;;
+esac
+
+# Below is subshare syntax supported by both ksh93 and mksh.
+print ${ echo one }
+print ${ echo two
+}
+print ${
+echo three }
+print ${ echo 'four'; }
+print ${ echo 'five' ;}
+print ${ echo 'six'
+}
+print ${ echo 'seven' }
+echo ${ print 'eight' }
+typeset nine=${ pwd; }
+
+# Value substitutions of the form ${|command} are only
+# supported by mksh, not ksh93.
+if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
+ valsubfunc() {
+ REPLY=$1
+ }
+ echo ${|valsubfunc ten}
+ print "${|valsubfunc eleven;}"
+ printf '%s' "${|valsubfunc twelve }"
+ unlucky=${|valsubfunc thirteen
+}
+ typeset notafloat=${|valsubfunc notanumber }
+ print $unlucky $notanumber
+ ${|echo foo}
+ ${|echo bar
+}
+fi
+
+# ======
+# Shared-state command substitutions using the syntax ${<file;}
+# are only supported by ksh93, not mksh.
+echo ${
+ printf %s str
+} > /tmp/strfile
+echo ${</tmp/strfile;}
+
+exit 0
+# ksh88 and ksh93 non-dot special variables
+print ${ RANDOM= SRANDOM= SHLVL= JOBMAX= KSH_VERSION= FIGNORE= LC_TIME= LC_NUMERIC= LC_MESSAGES= LC_CTYPE= LC_COLLATE= LC_ALL= LANG= FPATH= PS4= OPTIND= OPTARG= true ;}
+print $(LINENO= SECONDS= TMOUT= PPID= LINES= COLUMNS= VISUAL= OLDPWD= PS3= MAILPATH= CDPATH= FCEDIT= HISTCMD= HISTEDIT= HISTSIZE= HISTFILE= ENV= MAILCHECK= EDITOR= SHELL= false)
+print $(REPLY= MAIL= HOME= PWD= IFS= PS2= PS1= PATH= SH_OPTIONS= ERRNO= COMP_CWORD= COMP_LINE= COMP_POINT= COMP_WORDS= COMP_KEY= COMPREPLY= COMP_WORDBREAKS= COMP_TYPE= compgen)
+print $(BASHPID= EPOCHREALTIME= EXECSHELL= KSHEGID= KSHGID= KSHUID= KSH_MATCH= PATHSEP= PGRP= PIPESTATUS= TMPDIR= USER_ID= VPATH= CSWIDTH= complete)
diff --git a/runtime/syntax/testdir/input/ksh93_generic.ksh b/runtime/syntax/testdir/input/ksh93_generic.ksh
new file mode 100644
index 0000000..58d7e1f
--- /dev/null
+++ b/runtime/syntax/testdir/input/ksh93_generic.ksh
@@ -0,0 +1,146 @@
+#!/bin/ksh93
+
+# Rendering namespace variables
+echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]}
+echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz}
+echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b}
+echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo}
+echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo}
+echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo}
+echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,}
+
+# 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch).
+alarm --man
+# The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22
+# and 2008-06-02, respectively. However, these were not readily enabled; in
+# 93u+m these can be enabled with the builtin command if libcmd.so is present,
+# either via 'builtin -f' or (in more recent commits) with a regular invocation
+# of the 'builtin' built-in.
+# cf. https://github.com/ksh93/ksh/commit/f15e2c41
+builtin fds pids
+fds; pids
+
+# Unix commands which are provided by ksh as builtins via libcmd.so
+basename
+cat
+chgrp
+chmod
+chown
+cksum
+cmp
+comm
+cp
+cut
+date
+dirname
+egrep # Obsolescent
+expr
+fgrep # Obsolescent
+fmt
+fold
+getconf
+grep
+head
+iconv # 93v-
+id
+join
+ln
+logname
+ls # 93v-
+md5sum
+mkdir
+mkfifo
+mktemp
+mv
+od # 93v-
+paste
+pathchk
+readlink # 93v-
+realpath # 93v-
+rev
+rm
+rmdir
+sha1sum # 93v-
+sha256sum # 93v-
+sha2sum # 93v-
+sha384sum # 93v-
+sha512sum # 93v-
+stty
+sum
+sync
+tail
+tee
+tr # 93v-
+tty
+uname
+uniq
+vmstate # Obsolescent; only available in 93v- and older
+wc
+xargs # 93v-
+xgrep # 93v-
+
+# SHA command not provided as a builtin but included here for completeness
+sha224sum
+
+# poll builtin (93v-)
+poll --man
+
+# mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE)
+mkservice --man; eloop --help
+
+# some mksh builtins
+bind; rename
+
+# ;& and ;;& in case statements
+case x in
+ bar) false ${baz:1} ;&
+ foo) true ${foo:0:0} ;;&
+ *) print ${bar} ;;
+esac
+
+# Below is subshare syntax supported by both ksh93 and mksh.
+print ${ echo one }
+print ${ echo two
+}
+print ${
+echo three }
+print ${ echo 'four'; }
+print ${ echo 'five' ;}
+print ${ echo 'six'
+}
+print ${ echo 'seven' }
+echo ${ print 'eight' }
+typeset nine=${ pwd; }
+
+# Value substitutions of the form ${|command} are only
+# supported by mksh, not ksh93.
+if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
+ valsubfunc() {
+ REPLY=$1
+ }
+ echo ${|valsubfunc ten}
+ print "${|valsubfunc eleven;}"
+ printf '%s' "${|valsubfunc twelve }"
+ unlucky=${|valsubfunc thirteen
+}
+ typeset notafloat=${|valsubfunc notanumber }
+ print $unlucky $notanumber
+ ${|echo foo}
+ ${|echo bar
+}
+fi
+
+# ======
+# Shared-state command substitutions using the syntax ${<file;}
+# are only supported by ksh93, not mksh.
+echo ${
+ printf %s str
+} > /tmp/strfile
+echo ${</tmp/strfile;}
+
+exit 0
+# ksh88 and ksh93 non-dot special variables
+print ${ RANDOM= SRANDOM= SHLVL= JOBMAX= KSH_VERSION= FIGNORE= LC_TIME= LC_NUMERIC= LC_MESSAGES= LC_CTYPE= LC_COLLATE= LC_ALL= LANG= FPATH= PS4= OPTIND= OPTARG= true ;}
+print $(LINENO= SECONDS= TMOUT= PPID= LINES= COLUMNS= VISUAL= OLDPWD= PS3= MAILPATH= CDPATH= FCEDIT= HISTCMD= HISTEDIT= HISTSIZE= HISTFILE= ENV= MAILCHECK= EDITOR= SHELL= false)
+print $(REPLY= MAIL= HOME= PWD= IFS= PS2= PS1= PATH= SH_OPTIONS= ERRNO= COMP_CWORD= COMP_LINE= COMP_POINT= COMP_WORDS= COMP_KEY= COMPREPLY= COMP_WORDBREAKS= COMP_TYPE= compgen)
+print $(BASHPID= EPOCHREALTIME= EXECSHELL= KSHEGID= KSHGID= KSHUID= KSH_MATCH= PATHSEP= PGRP= PIPESTATUS= TMPDIR= USER_ID= VPATH= CSWIDTH= complete)
diff --git a/runtime/syntax/testdir/input/ksh93u.ksh b/runtime/syntax/testdir/input/ksh93u.ksh
new file mode 100644
index 0000000..4f7a3f6
--- /dev/null
+++ b/runtime/syntax/testdir/input/ksh93u.ksh
@@ -0,0 +1,146 @@
+#!/bin/ksh93u+
+
+# Rendering namespace variables
+echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]}
+echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz}
+echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b}
+echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo}
+echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo}
+echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo}
+echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,}
+
+# 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch).
+alarm --man
+# The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22
+# and 2008-06-02, respectively. However, these were not readily enabled; in
+# 93u+m these can be enabled with the builtin command if libcmd.so is present,
+# either via 'builtin -f' or (in more recent commits) with a regular invocation
+# of the 'builtin' built-in.
+# cf. https://github.com/ksh93/ksh/commit/f15e2c41
+builtin fds pids
+fds; pids
+
+# Unix commands which are provided by ksh as builtins via libcmd.so
+basename
+cat
+chgrp
+chmod
+chown
+cksum
+cmp
+comm
+cp
+cut
+date
+dirname
+egrep # Obsolescent
+expr
+fgrep # Obsolescent
+fmt
+fold
+getconf
+grep
+head
+iconv # 93v-
+id
+join
+ln
+logname
+ls # 93v-
+md5sum
+mkdir
+mkfifo
+mktemp
+mv
+od # 93v-
+paste
+pathchk
+readlink # 93v-
+realpath # 93v-
+rev
+rm
+rmdir
+sha1sum # 93v-
+sha256sum # 93v-
+sha2sum # 93v-
+sha384sum # 93v-
+sha512sum # 93v-
+stty
+sum
+sync
+tail
+tee
+tr # 93v-
+tty
+uname
+uniq
+vmstate # Obsolescent; only available in 93v- and older
+wc
+xargs # 93v-
+xgrep # 93v-
+
+# SHA command not provided as a builtin but included here for completeness
+sha224sum
+
+# poll builtin (93v-)
+poll --man
+
+# mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE)
+mkservice --man; eloop --help
+
+# some mksh builtins
+bind; rename
+
+# ;& and ;;& in case statements
+case x in
+ bar) false ${baz:1} ;&
+ foo) true ${foo:0:0} ;;&
+ *) print ${bar} ;;
+esac
+
+# Below is subshare syntax supported by both ksh93 and mksh.
+print ${ echo one }
+print ${ echo two
+}
+print ${
+echo three }
+print ${ echo 'four'; }
+print ${ echo 'five' ;}
+print ${ echo 'six'
+}
+print ${ echo 'seven' }
+echo ${ print 'eight' }
+typeset nine=${ pwd; }
+
+# Value substitutions of the form ${|command} are only
+# supported by mksh, not ksh93.
+if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
+ valsubfunc() {
+ REPLY=$1
+ }
+ echo ${|valsubfunc ten}
+ print "${|valsubfunc eleven;}"
+ printf '%s' "${|valsubfunc twelve }"
+ unlucky=${|valsubfunc thirteen
+}
+ typeset notafloat=${|valsubfunc notanumber }
+ print $unlucky $notanumber
+ ${|echo foo}
+ ${|echo bar
+}
+fi
+
+# ======
+# Shared-state command substitutions using the syntax ${<file;}
+# are only supported by ksh93, not mksh.
+echo ${
+ printf %s str
+} > /tmp/strfile
+echo ${</tmp/strfile;}
+
+exit 0
+# ksh88 and ksh93 non-dot special variables
+print ${ RANDOM= SRANDOM= SHLVL= JOBMAX= KSH_VERSION= FIGNORE= LC_TIME= LC_NUMERIC= LC_MESSAGES= LC_CTYPE= LC_COLLATE= LC_ALL= LANG= FPATH= PS4= OPTIND= OPTARG= true ;}
+print $(LINENO= SECONDS= TMOUT= PPID= LINES= COLUMNS= VISUAL= OLDPWD= PS3= MAILPATH= CDPATH= FCEDIT= HISTCMD= HISTEDIT= HISTSIZE= HISTFILE= ENV= MAILCHECK= EDITOR= SHELL= false)
+print $(REPLY= MAIL= HOME= PWD= IFS= PS2= PS1= PATH= SH_OPTIONS= ERRNO= COMP_CWORD= COMP_LINE= COMP_POINT= COMP_WORDS= COMP_KEY= COMPREPLY= COMP_WORDBREAKS= COMP_TYPE= compgen)
+print $(BASHPID= EPOCHREALTIME= EXECSHELL= KSHEGID= KSHGID= KSHUID= KSH_MATCH= PATHSEP= PGRP= PIPESTATUS= TMPDIR= USER_ID= VPATH= CSWIDTH= complete)
diff --git a/runtime/syntax/testdir/input/ksh93v.ksh b/runtime/syntax/testdir/input/ksh93v.ksh
new file mode 100644
index 0000000..33649ed
--- /dev/null
+++ b/runtime/syntax/testdir/input/ksh93v.ksh
@@ -0,0 +1,146 @@
+#!/bin/ksh93v-
+
+# Rendering namespace variables
+echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]}
+echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz}
+echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b}
+echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo}
+echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo}
+echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo}
+echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,}
+
+# 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch).
+alarm --man
+# The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22
+# and 2008-06-02, respectively. However, these were not readily enabled; in
+# 93u+m these can be enabled with the builtin command if libcmd.so is present,
+# either via 'builtin -f' or (in more recent commits) with a regular invocation
+# of the 'builtin' built-in.
+# cf. https://github.com/ksh93/ksh/commit/f15e2c41
+builtin fds pids
+fds; pids
+
+# Unix commands which are provided by ksh as builtins via libcmd.so
+basename
+cat
+chgrp
+chmod
+chown
+cksum
+cmp
+comm
+cp
+cut
+date
+dirname
+egrep # Obsolescent
+expr
+fgrep # Obsolescent
+fmt
+fold
+getconf
+grep
+head
+iconv # 93v-
+id
+join
+ln
+logname
+ls # 93v-
+md5sum
+mkdir
+mkfifo
+mktemp
+mv
+od # 93v-
+paste
+pathchk
+readlink # 93v-
+realpath # 93v-
+rev
+rm
+rmdir
+sha1sum # 93v-
+sha256sum # 93v-
+sha2sum # 93v-
+sha384sum # 93v-
+sha512sum # 93v-
+stty
+sum
+sync
+tail
+tee
+tr # 93v-
+tty
+uname
+uniq
+vmstate # Obsolescent; only available in 93v- and older
+wc
+xargs # 93v-
+xgrep # 93v-
+
+# SHA command not provided as a builtin but included here for completeness
+sha224sum
+
+# poll builtin (93v-)
+poll --man
+
+# mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE)
+mkservice --man; eloop --help
+
+# some mksh builtins
+bind; rename
+
+# ;& and ;;& in case statements
+case x in
+ bar) false ${baz:1} ;&
+ foo) true ${foo:0:0} ;;&
+ *) print ${bar} ;;
+esac
+
+# Below is subshare syntax supported by both ksh93 and mksh.
+print ${ echo one }
+print ${ echo two
+}
+print ${
+echo three }
+print ${ echo 'four'; }
+print ${ echo 'five' ;}
+print ${ echo 'six'
+}
+print ${ echo 'seven' }
+echo ${ print 'eight' }
+typeset nine=${ pwd; }
+
+# Value substitutions of the form ${|command} are only
+# supported by mksh, not ksh93.
+if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
+ valsubfunc() {
+ REPLY=$1
+ }
+ echo ${|valsubfunc ten}
+ print "${|valsubfunc eleven;}"
+ printf '%s' "${|valsubfunc twelve }"
+ unlucky=${|valsubfunc thirteen
+}
+ typeset notafloat=${|valsubfunc notanumber }
+ print $unlucky $notanumber
+ ${|echo foo}
+ ${|echo bar
+}
+fi
+
+# ======
+# Shared-state command substitutions using the syntax ${<file;}
+# are only supported by ksh93, not mksh.
+echo ${
+ printf %s str
+} > /tmp/strfile
+echo ${</tmp/strfile;}
+
+exit 0
+# ksh88 and ksh93 non-dot special variables
+print ${ RANDOM= SRANDOM= SHLVL= JOBMAX= KSH_VERSION= FIGNORE= LC_TIME= LC_NUMERIC= LC_MESSAGES= LC_CTYPE= LC_COLLATE= LC_ALL= LANG= FPATH= PS4= OPTIND= OPTARG= true ;}
+print $(LINENO= SECONDS= TMOUT= PPID= LINES= COLUMNS= VISUAL= OLDPWD= PS3= MAILPATH= CDPATH= FCEDIT= HISTCMD= HISTEDIT= HISTSIZE= HISTFILE= ENV= MAILCHECK= EDITOR= SHELL= false)
+print $(REPLY= MAIL= HOME= PWD= IFS= PS2= PS1= PATH= SH_OPTIONS= ERRNO= COMP_CWORD= COMP_LINE= COMP_POINT= COMP_WORDS= COMP_KEY= COMPREPLY= COMP_WORDBREAKS= COMP_TYPE= compgen)
+print $(BASHPID= EPOCHREALTIME= EXECSHELL= KSHEGID= KSHGID= KSHUID= KSH_MATCH= PATHSEP= PGRP= PIPESTATUS= TMPDIR= USER_ID= VPATH= CSWIDTH= complete)
diff --git a/runtime/syntax/testdir/input/ksh_generic.ksh b/runtime/syntax/testdir/input/ksh_generic.ksh
new file mode 100644
index 0000000..32572f0
--- /dev/null
+++ b/runtime/syntax/testdir/input/ksh_generic.ksh
@@ -0,0 +1,146 @@
+#!/bin/ksh
+
+# Rendering namespace variables
+echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]}
+echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz}
+echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b}
+echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo}
+echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo}
+echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo}
+echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,}
+
+# 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch).
+alarm --man
+# The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22
+# and 2008-06-02, respectively. However, these were not readily enabled; in
+# 93u+m these can be enabled with the builtin command if libcmd.so is present,
+# either via 'builtin -f' or (in more recent commits) with a regular invocation
+# of the 'builtin' built-in.
+# cf. https://github.com/ksh93/ksh/commit/f15e2c41
+builtin fds pids
+fds; pids
+
+# Unix commands which are provided by ksh as builtins via libcmd.so
+basename
+cat
+chgrp
+chmod
+chown
+cksum
+cmp
+comm
+cp
+cut
+date
+dirname
+egrep # Obsolescent
+expr
+fgrep # Obsolescent
+fmt
+fold
+getconf
+grep
+head
+iconv # 93v-
+id
+join
+ln
+logname
+ls # 93v-
+md5sum
+mkdir
+mkfifo
+mktemp
+mv
+od # 93v-
+paste
+pathchk
+readlink # 93v-
+realpath # 93v-
+rev
+rm
+rmdir
+sha1sum # 93v-
+sha256sum # 93v-
+sha2sum # 93v-
+sha384sum # 93v-
+sha512sum # 93v-
+stty
+sum
+sync
+tail
+tee
+tr # 93v-
+tty
+uname
+uniq
+vmstate # Obsolescent; only available in 93v- and older
+wc
+xargs # 93v-
+xgrep # 93v-
+
+# SHA command not provided as a builtin but included here for completeness
+sha224sum
+
+# poll builtin (93v-)
+poll --man
+
+# mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE)
+mkservice --man; eloop --help
+
+# some mksh builtins
+bind; rename
+
+# ;& and ;;& in case statements
+case x in
+ bar) false ${baz:1} ;&
+ foo) true ${foo:0:0} ;;&
+ *) print ${bar} ;;
+esac
+
+# Below is subshare syntax supported by both ksh93 and mksh.
+print ${ echo one }
+print ${ echo two
+}
+print ${
+echo three }
+print ${ echo 'four'; }
+print ${ echo 'five' ;}
+print ${ echo 'six'
+}
+print ${ echo 'seven' }
+echo ${ print 'eight' }
+typeset nine=${ pwd; }
+
+# Value substitutions of the form ${|command} are only
+# supported by mksh, not ksh93.
+if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
+ valsubfunc() {
+ REPLY=$1
+ }
+ echo ${|valsubfunc ten}
+ print "${|valsubfunc eleven;}"
+ printf '%s' "${|valsubfunc twelve }"
+ unlucky=${|valsubfunc thirteen
+}
+ typeset notafloat=${|valsubfunc notanumber }
+ print $unlucky $notanumber
+ ${|echo foo}
+ ${|echo bar
+}
+fi
+
+# ======
+# Shared-state command substitutions using the syntax ${<file;}
+# are only supported by ksh93, not mksh.
+echo ${
+ printf %s str
+} > /tmp/strfile
+echo ${</tmp/strfile;}
+
+exit 0
+# ksh88 and ksh93 non-dot special variables
+print ${ RANDOM= SRANDOM= SHLVL= JOBMAX= KSH_VERSION= FIGNORE= LC_TIME= LC_NUMERIC= LC_MESSAGES= LC_CTYPE= LC_COLLATE= LC_ALL= LANG= FPATH= PS4= OPTIND= OPTARG= true ;}
+print $(LINENO= SECONDS= TMOUT= PPID= LINES= COLUMNS= VISUAL= OLDPWD= PS3= MAILPATH= CDPATH= FCEDIT= HISTCMD= HISTEDIT= HISTSIZE= HISTFILE= ENV= MAILCHECK= EDITOR= SHELL= false)
+print $(REPLY= MAIL= HOME= PWD= IFS= PS2= PS1= PATH= SH_OPTIONS= ERRNO= COMP_CWORD= COMP_LINE= COMP_POINT= COMP_WORDS= COMP_KEY= COMPREPLY= COMP_WORDBREAKS= COMP_TYPE= compgen)
+print $(BASHPID= EPOCHREALTIME= EXECSHELL= KSHEGID= KSHGID= KSHUID= KSH_MATCH= PATHSEP= PGRP= PIPESTATUS= TMPDIR= USER_ID= VPATH= CSWIDTH= complete)
diff --git a/runtime/syntax/testdir/input/mksh.ksh b/runtime/syntax/testdir/input/mksh.ksh
new file mode 100644
index 0000000..c346cee
--- /dev/null
+++ b/runtime/syntax/testdir/input/mksh.ksh
@@ -0,0 +1,146 @@
+#!/bin/mksh
+
+# Rendering namespace variables
+echo ${.foo.bar[adsf]} ${foo.bar[1][2]} ${foo.bar[1][az]} ${.foo.bar[1][2]}
+echo ${.foo[var]} ${.foo.bar[1]} ${.foo.bar[*]} ${foo.bar##baz} ${.foo.bar##baz}
+echo ${.foo.bar[3]##baz} ${.foo.bar[z]##baz} ${sh.version/V/b} ${.sh.version/V/b}
+echo ${foo/%bar/foo} ${foo/#bar/foo} ${foo.bar/%bar/foo} ${foo.bar[d]/#bar/foo}
+echo ${.foo/%barfoo} ${.foo.bar/#bar/foo} ${.bar.foo/%bar/foo} ${.bar/#bar/foo}
+echo ${foo/%barfoo} ${foo/bar/foo} ${barfoo//bar/foo} ${bar/#bar/foo}
+echo ${.sh.version^^} ${.sh.version,,} ${KSH_VERSION^} ${KSH_VERSION,}
+
+# 'alarm' builtin (present in ksh93u+, ksh93v- and the 93u+m dev branch).
+alarm --man
+# The fds and pids builtins. These ksh93 builtins have existed since 2005-05-22
+# and 2008-06-02, respectively. However, these were not readily enabled; in
+# 93u+m these can be enabled with the builtin command if libcmd.so is present,
+# either via 'builtin -f' or (in more recent commits) with a regular invocation
+# of the 'builtin' built-in.
+# cf. https://github.com/ksh93/ksh/commit/f15e2c41
+builtin fds pids
+fds; pids
+
+# Unix commands which are provided by ksh as builtins via libcmd.so
+basename
+cat
+chgrp
+chmod
+chown
+cksum
+cmp
+comm
+cp
+cut
+date
+dirname
+egrep # Obsolescent
+expr
+fgrep # Obsolescent
+fmt
+fold
+getconf
+grep
+head
+iconv # 93v-
+id
+join
+ln
+logname
+ls # 93v-
+md5sum
+mkdir
+mkfifo
+mktemp
+mv
+od # 93v-
+paste
+pathchk
+readlink # 93v-
+realpath # 93v-
+rev
+rm
+rmdir
+sha1sum # 93v-
+sha256sum # 93v-
+sha2sum # 93v-
+sha384sum # 93v-
+sha512sum # 93v-
+stty
+sum
+sync
+tail
+tee
+tr # 93v-
+tty
+uname
+uniq
+vmstate # Obsolescent; only available in 93v- and older
+wc
+xargs # 93v-
+xgrep # 93v-
+
+# SHA command not provided as a builtin but included here for completeness
+sha224sum
+
+# poll builtin (93v-)
+poll --man
+
+# mkservice and eloop (rarely provided; requires SHOPT_MKSERVICE)
+mkservice --man; eloop --help
+
+# some mksh builtins
+bind; rename
+
+# ;& and ;;& in case statements
+case x in
+ bar) false ${baz:1} ;&
+ foo) true ${foo:0:0} ;;&
+ *) print ${$bar} ;; # 93v-
+esac
+
+# Below is subshare syntax supported by both ksh93 and mksh.
+print ${ echo one }
+print ${ echo two
+}
+print ${
+echo three }
+print ${ echo 'four'; }
+print ${ echo 'five' ;}
+print ${ echo 'six'
+}
+print ${ echo 'seven' }
+echo ${ print 'eight' }
+typeset nine=${ pwd; }
+
+# Value substitutions of the form ${|command} are only
+# supported by mksh, not ksh93.
+if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
+ valsubfunc() {
+ REPLY=$1
+ }
+ echo ${|valsubfunc ten}
+ print "${|valsubfunc eleven;}"
+ printf '%s' "${|valsubfunc twelve }"
+ unlucky=${|valsubfunc thirteen
+}
+ typeset notafloat=${|valsubfunc notanumber }
+ print $unlucky $notanumber
+ ${|echo foo}
+ ${|echo bar
+}
+fi
+
+# ======
+# Shared-state command substitutions using the syntax ${<file;}
+# are only supported by ksh93, not mksh.
+echo ${
+ printf %s str
+} > /tmp/strfile
+echo ${</tmp/strfile;}
+
+exit 0
+# ksh88 and ksh93 non-dot special variables
+print ${ RANDOM= SRANDOM= SHLVL= JOBMAX= KSH_VERSION= FIGNORE= LC_TIME= LC_NUMERIC= LC_MESSAGES= LC_CTYPE= LC_COLLATE= LC_ALL= LANG= FPATH= PS4= OPTIND= OPTARG= true ;}
+print $(LINENO= SECONDS= TMOUT= PPID= LINES= COLUMNS= VISUAL= OLDPWD= PS3= MAILPATH= CDPATH= FCEDIT= HISTCMD= HISTEDIT= HISTSIZE= HISTFILE= ENV= MAILCHECK= EDITOR= SHELL= false)
+print $(REPLY= MAIL= HOME= PWD= IFS= PS2= PS1= PATH= SH_OPTIONS= ERRNO= COMP_CWORD= COMP_LINE= COMP_POINT= COMP_WORDS= COMP_KEY= COMPREPLY= COMP_WORDBREAKS= COMP_TYPE= compgen)
+print $(BASHPID= EPOCHREALTIME= EXECSHELL= KSHEGID= KSHGID= KSHUID= KSH_MATCH= PATHSEP= PGRP= PIPESTATUS= TMPDIR= USER_ID= VPATH= CSWIDTH= complete)
diff --git a/runtime/syntax/testdir/input/sh_10.sh b/runtime/syntax/testdir/input/sh_10.sh
deleted file mode 100644
index be463c3..0000000
--- a/runtime/syntax/testdir/input/sh_10.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/ksh
-
-# This script is a test file for ksh93 shared-state
-# command substitutions (subshares) and mksh value
-# substitutions (valsubs).
-
-# ======
-# Below is subshare syntax supported by both ksh93 and mksh.
-print ${ echo one }
-print ${ echo two
-}
-print ${
-echo three }
-print ${ echo 'four'; }
-print ${ echo 'five' ;}
-print ${ echo 'six'
-}
-print ${ echo 'seven' }
-echo ${ print 'eight' }
-typeset nine=${ pwd; }
-
-# ======
-# Value substitutions of the form ${|command} are only
-# supported by mksh, not ksh93.
-if ! command eval '((.sh.version >= 20070703))' 2>/dev/null; then
- valsubfunc() {
- REPLY=$1
- }
- echo ${|valsubfunc ten}
- print "${|valsubfunc eleven;}"
- printf '%s' "${|valsubfunc twelve }"
- unlucky=${|valsubfunc thirteen
-}
- typeset notafloat=${|valsubfunc notanumber }
- print $unlucky $notanumber
- ${|echo foo}
- ${|echo bar
-}
-fi
-
-# ======
-# Shared-state command substitutions using the syntax ${<file;}
-# are only supported by ksh93, not mksh.
-echo ${
- printf %s str
-} > /tmp/strfile
-echo ${</tmp/strfile;}
-
-exit 0
diff --git a/runtime/syntax/testdir/input/sh_bash_sundrous.bash b/runtime/syntax/testdir/input/sh_bash_sundrous.bash
new file mode 100644
index 0000000..8456af2
--- /dev/null
+++ b/runtime/syntax/testdir/input/sh_bash_sundrous.bash
@@ -0,0 +1,57 @@
+#!/bin/bash
+basename
+cat
+chgrp
+chmod
+chown
+cksum
+cmp
+comm
+cp
+cut
+date
+dirname
+egrep # Obsolescent
+expr
+fgrep # Obsolescent
+fmt
+fold
+getconf
+grep
+head
+iconv
+id
+join
+ln
+logname
+ls
+md5sum
+mkdir
+mkfifo
+mktemp
+mv
+od
+paste
+pathchk
+readlink
+realpath
+rev
+rm
+rmdir
+sha1sum
+sha256sum
+sha224sum
+sha384sum
+sha512sum
+stty
+sum
+sync
+tail
+tee
+tr
+tty
+uname
+uniq
+wc
+xargs
+xgrep