Компилятор Си в виде shell-скрипта

Posted on Сб 04 апреля 2026 in misc

Источник

c89cc.sh - standalone C89/ELF64 compiler in pure portable shell

#!/bin/sh
# ISC License

# Copyright (c) 2026 Alexandre Gomes Gaigalas <alganet@gmail.com>

# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.

# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

# ============================================================
# c89cc — standalone C89 parser + compiler (x86-64 ELF64)
# ============================================================
#
# Usage:
#   sh c89cc.sh < prog.c > a.out
#   sh c89cc.sh --no-libc < prog.c > a.out   (skip built-in libc)

# --- core/header.sh ---
set -euf
LC_ALL=C
IFS=''
_EOL='
'
_TAB="  "
# Clear PATH: no external commands needed
PATH=
# Shell compat: aliases in bash, POSIX-like in zsh
shopt -s expand_aliases >/dev/null 2>&1 || :
setopt sh_word_split null_glob glob_subst \
    no_glob no_multios no_equals 2>/dev/null || :
# ksh/mksh fallback: 'local' may not exist, use 'typeset' instead
command -v local >/dev/null 2>&1 || alias local=typeset >/dev/null 2>&1 || :

# Fallback: if 'test' is not a builtin, wrap it via command -p
if ! command -v test >/dev/null 2>&1; then test () { command -p test "$@"; }; fi

# --- Output helpers ---
# Detect best available output primitive:
#   printf > print > echo > command -p printf
# _printn1: print string without newline  _printr1: print string with newline
if command -v printf >/dev/null 2>&1
then
    _printn1 () { printf '%s' "$1"; }
    _printr1 () { printf '%s\n' "$@"; }
elif command -v print >/dev/null 2>&1
then
    _printn1 () { echo -n -E "$1"; }
    _printr1 () { echo -E "$@"; }
elif command -v echo >/dev/null 2>&1
then
    _printn1 () { echo -n "$1"; }
    _printr1 () { echo "$@"; }
else
    # yash fallback
    _printn1 () { command -p printf '%s' "$1"; }
    _printr1 () { command -p printf '%s\n' "$@"; }
fi

# --- Multi-value return and dynamic local variable helpers ---
# Pack variable assignments into REPLY (append mode).
# Caller unpacks with: eval "$REPLY"  (sets globals)
#                   or: eval "local$REPLY"  (sets locals)
# Values containing ' must be pre-escaped with _esc_sq.
# Usage: REPLY=; _retv name val; _retva prefix idx val; eval "local$REPLY"
_retv () { REPLY="$REPLY $1='$2'"; }
_retva () { REPLY="$REPLY ${1}_${2}='$3'"; }

# --- module system (stub, all modules inlined) ---
_MOD="$_EOL"
_mod_has () { return 0; }
_mod_add () { :; }
use () { :; }

# --- modules/str/repeat.sh ---
# Repeat a string N times via exponentiation-by-squaring.
_repeat () {
    case "${2:-}" in
        0|"") return;; 1) REPLY="$1"; return;; 2) REPLY="$1$1"; return;;
        3) REPLY="$1$1$1"; return;; 4) REPLY="$1$1$1$1"; return;;
    esac
    local VALUE="$1" COUNT="$2" POW=2; REPLY=
    while :; do
        if test $POW -gt $COUNT; then
            test $COUNT -gt 0 || break
            REPLY="$REPLY$VALUE" VALUE="$1"
            COUNT=$((COUNT - (POW / 2))) POW=2
            continue; fi
        VALUE="$VALUE$VALUE" POW=$((POW * 2))
    done
}

# Memoized '???...?' pattern generator (used to split long input lines).
_questn () {
    eval "case \${_questn$1:-} in \"\")
        _repeat \\? $1; _questn$1=\$REPLY
    ;; esac; REPLY=\$_questn$1"
}

# --- modules/str/core.sh ---
# Convert string to uppercase (a-z → A-Z). Result in REPLY.
_ucase () {
    local _s="$1" _r= _c
    while test ${#_s} -gt 0; do
        _c="${_s%"${_s#?}"}"; _s="${_s#?}"
        case "$_c" in
        a) _r="${_r}A";; b) _r="${_r}B";; c) _r="${_r}C";;
        d) _r="${_r}D";; e) _r="${_r}E";; f) _r="${_r}F";;
        g) _r="${_r}G";; h) _r="${_r}H";; i) _r="${_r}I";;
        j) _r="${_r}J";; k) _r="${_r}K";; l) _r="${_r}L";;
        m) _r="${_r}M";; n) _r="${_r}N";; o) _r="${_r}O";;
        p) _r="${_r}P";; q) _r="${_r}Q";; r) _r="${_r}R";;
        s) _r="${_r}S";; t) _r="${_r}T";; u) _r="${_r}U";;
        v) _r="${_r}V";; w) _r="${_r}W";; x) _r="${_r}X";;
        y) _r="${_r}Y";; z) _r="${_r}Z";;
        *) _r="${_r}${_c}";;
        esac
    done
    REPLY="$_r"
}

# Convert uppercase char to lowercase. Result in REPLY.
_lcase () {
    case "$1" in A) REPLY=a;; B) REPLY=b;; C) REPLY=c;; D) REPLY=d;;
    E) REPLY=e;; F) REPLY=f;; G) REPLY=g;; H) REPLY=h;;
    I) REPLY=i;; J) REPLY=j;; K) REPLY=k;; L) REPLY=l;;
    M) REPLY=m;; N) REPLY=n;; O) REPLY=o;; P) REPLY=p;;
    Q) REPLY=q;; R) REPLY=r;; S) REPLY=s;; T) REPLY=t;;
    U) REPLY=u;; V) REPLY=v;; W) REPLY=w;; X) REPLY=x;;
    Y) REPLY=y;; Z) REPLY=z;; *) REPLY=;; esac
}

# Convert uppercase string to lowercase. Result in REPLY.
_lcase_str () {
    local _s="$1" _c _r=
    while test ${#_s} -gt 0; do
        _c="${_s%"${_s#?}"}"; _s="${_s#?}"
        _lcase "$_c"
        case "$REPLY" in '') _r="$_r$_c";; *) _r="$_r$REPLY";; esac
    done
    REPLY="$_r"
}

# --- modules/io/readall.sh ---
# Read all of stdin into REPLY (replaces /bin/cat for eval "$(_readall)").
_readall () {
    REPLY=
    while IFS='' read -r _l; do REPLY="$REPLY$_l$_EOL"; done
    REPLY="$REPLY$_l"
}

# --- modules/pos/core.sh ---
# Count newlines in a consumed/skipped string, update _LN/_COL.
# No-newline fast path: just adds string length to _COL.
_nlcount () {
    local _s="$1" _h
    case "$_s" in *"$_EOL"*)
        while :; do
            _h="${_s#*"$_EOL"}"
            case "$_h" in *"$_EOL"*)
                _LN=$((_LN+1)); _s="$_h";;
            *)
                _LN=$((_LN+1))
                _COL=$((${#_h} + 1))
                return;;
            esac
        done;;
    *)
        _COL=$((_COL + ${#_s}));;
    esac
}

# Validate CONSUMED as RFC 8259 number: [-](0|[1-9]d*)[.d+][eE[+-]d+]
_numck () {
    local _n="$CONSUMED"
    case "$_n" in '-'*) _n="${_n#-}";; esac
    case "$_n" in
        '') _error NUMBER;;
        '0'[0-9]*) _error NUMBER;;
        '0'*) _n="${_n#0}";;
        [1-9]*) _n="${_n#[1-9]}"; _n="${_n#"${_n%%[!0-9]*}"}";;
        *) _error NUMBER;;
    esac
    case "$_n" in '.'*)
        _n="${_n#.}"
        case "$_n" in [0-9]*) ;; *) _error NUMBER;; esac
        _n="${_n#"${_n%%[!0-9]*}"}";;
    esac
    case "$_n" in [eE]*)
        _n="${_n#?}"
        case "$_n" in '+'*|'-'*) _n="${_n#?}";; esac
        case "$_n" in [0-9]*) ;; *) _error NUMBER;; esac
        _n="${_n#"${_n%%[!0-9]*}"}";;
    esac
    case "$_n" in '') ;; *) _error NUMBER;; esac
}

# --- modules/err/core.sh ---

_error () {
    IFS=' '
    eval "_a=\"\${_SRC$_LN:-}\""
    _printr1 "$* at $_LN:$_COL"
    case "$_a" in ?*)
        _printr1 "  $_a"
        _repeat ' ' $_COL; _printr1 "  ${REPLY}^"
    ;; esac
    exit 1
}

# --- modules/ast/core.sh ---

# --- Input feeding ---
# Read from stdin into CODE buffer, one line at a time.
# Lines > 128 chars are split into chunks before appending.
# ast_read:   read one line, chunk-split into CODE
# ast_feed: refill when CODE < 16 chars  (tight loop, most branches)
# ast_more: refill when CODE < 1024 chars (bulk reads for names/keywords)
alias ast_read='if IFS= read -r _line
    then
        _RD=$((_RD + 1)); eval "_SRC$_RD=\"\$_line\""
        while test ${#_line} -gt 128; do
            _questn 128
            _b="${_line#${REPLY}}"; _a="${_line%"$_b"}"
            CODE="$CODE$_a"; _line="$_b"
        done
        CODE="$CODE$_line$_EOL"
    else _EOF=1; CODE="$CODE$_line"
        case "$_line" in ?*) _RD=$((_RD + 1)); eval "_SRC$_RD=\"\$_line\"";; esac
    fi'

alias ast_feed='if test ${#CODE} -lt 16 -a $_EOF -eq 0; then ast_read; fi'
alias ast_more='
    while test ${#CODE} -lt 1024 -a $_EOF -eq 0
    do ast_read; done'

# --- Character-level operations ---
# ast_consume  - move 1-4 chars from CODE into CONSUMED
# ast_skip   - discard 1-3 chars or whitespace from CODE
# _ast_xfer    - base: append stripped prefix to CONSUMED
# _ast_xbulk   - base: append REST to CONSUMED, advance CODE
alias _ast_xfer='CONSUMED="$CONSUMED${CODE%"$REST"}"; CODE="$REST"'
alias _ast_xbulk='CONSUMED="$CONSUMED$REST"; CODE="${CODE#"$REST"}"'
alias ast_consume='REST="${CODE#?}"; _ast_xfer; _COL=$((_COL+1))'
alias ast_consume2='REST="${CODE#??}"; _ast_xfer; _COL=$((_COL+2))'
alias ast_consume3='REST="${CODE#???}"; _ast_xfer; _COL=$((_COL+3))'
alias ast_consume4='REST="${CODE#????}"; _ast_xfer; _COL=$((_COL+4))'

alias ast_skip='CODE="${CODE#?}"; _COL=$((_COL+1))'
alias ast_skip2='CODE="${CODE#??}"; _COL=$((_COL+2))'
alias ast_skip3='CODE="${CODE#???}"; _COL=$((_COL+3))'
alias _ast_advcol='_COL=$((_COL+${#REST}))'
alias ast_skip_ws='REST="${CODE%%[! $_TAB]*}"; _ast_advcol; CODE="${CODE#"$REST"}"'
alias ast_skip_wse='REST="${CODE%%[! $_TAB$_EOL]*}"
    CODE="${CODE#"$REST"}"; _nlcount "$REST"'
# Newline-aware variants
alias ast_skip_nl='CODE="${CODE#?}"; _LN=$((_LN+1)); _COL=1'
alias ast_skip2_nl='CODE="${CODE#??}"; _LN=$((_LN+1)); _COL=1'
alias ast_consume_nl='REST="${CODE#?}"; _ast_xfer; _LN=$((_LN+1)); _COL=1'
# ast_bulk - append REST to CONSUMED, advance CODE, loop
alias ast_bulk='_ast_xbulk; _ast_advcol; continue'
alias ast_bulk_nl='_ast_xbulk; _nlcount "$REST"; continue'

# --- AST stack operations ---
# ast_new       - push state, save CONSUMED as V<n>, reset CONSUMED
# ast_push      - create tree node X<n>=<state>, push index onto NODES stack
# ast_pop      - pop state + node stacks
# Primitives (used by composed aliases below):
#   ast_attach    - attach node to parent
#   ast_collapse  - collapse single-valueless-child wrapper into the child
#   pars_attach_op        - ast_attach + operator-precedence: if prev sibling is Ab/Ob/Pb/Bu,
#                restructure so the operator steals the prev sibling
# Composed close operations (all start with ast_pop):
#   ast_discard      - ast_pop + discard (for transient states like Cs)
#   ast_close     - ast_pop + ast_attach
#   pars_close_op    - ast_pop + pars_attach_op
#   ast_close_col     - ast_pop + ast_collapse + ast_attach
#   pars_close_op_col   - ast_pop + ast_collapse + pars_attach_op
#   pars_close_redir - ast_close + error if redirect target is empty
#   ast_flush     - flush CONSUMED as Tx child (a"b"c)
alias ast_new='STATES="$STATES $STATE"; V=$((V + 1))
    case "$CONSUMED" in "");; *) local V$V="$CONSUMED";;esac
    CONSUMED='
alias ast_push='local X$V="$STATE"
    PARN="${NODES##*" "}"
    eval "PARNT=\"\${X$PARN%% *}\""
    NODE=$V; NODES="$NODES $NODE"'
alias ast_pop='STATE="${STATES##*" "}"; STATES="${STATES%" ${STATE}"}"
    PARN="${NODES##*" "}"
    case "$CONSUMED" in ?*) local V$PARN="$CONSUMED";; esac
    CONSUMED=
    NODE=$PARN; NODES="${NODES%" $NODE"}"; PARN="${NODES##*" "}"
    eval "PARNT=\"\${X$PARN%% *}\""'

alias ast_attach='eval "X$PARN=\"\$X$PARN \$NODE\""'
alias ast_collapse='eval "_D=\"\$X$NODE\""; _C="${_D#* }"
    case "$_C" in "$_D"|*" "*) ;;
    *) eval "case \"\${V$NODE:-}\" in \"\") unset X$NODE; NODE=$_C;; esac";;
    esac'
alias ast_discard='ast_pop;unset X$NODE'
alias ast_close='ast_pop;ast_attach'
alias ast_close_col='ast_pop;ast_collapse;ast_attach'
alias ast_flush='case "$CONSUMED" in ?*) ast_Tx;ast_close;; esac'

# Register AST node types. Each type gets an ast_XX alias
# that creates a new node, sets STATE, and pushes onto the stack.
# Register AST node types. Outputs alias definitions to be eval'd.
# Usage: eval "$(ast_tokens "Ty Pe Na Me")"
ast_tokens () {
    IFS=' '
    for _s in $1; do
        _printr1 "alias ast_$_s=\"ast_new;STATE=$_s;ast_push\""
    done
    IFS=''
}

# Walk the AST from root, printing V<n> (value) and X<n> (node) in tree order.
# Format: X<n>='<type> [<child_indices>...]'  V<n>='<value>'
# Uses dynamic scoping to access caller's V<n>/X<n> locals.
ast_out () {
    set -- 0
    while test $# -gt 0; do
        NODE=$1; shift
        eval "_pq=\"\${V$NODE:-}\"; _D=\"\$X$NODE\""
        case "$_pq" in ?*)
            # Escape single quotes in values: 'abc'd'ef' -> 'abc'\''ef'
            case "$_pq" in *"'"*)
                _printn1 "V$NODE="
                while :; do
                    case "$_pq" in *"'"*) ;; *) break;; esac
                    _printn1 "'${_pq%%"'"*}'\\'"; _pq="${_pq#*"'"}"
                done
                _printn1 "'$_pq'$_EOL";;
            *) _printr1 "V$NODE='$_pq'";;
            esac;; esac
        _printr1 "X$NODE='$_D'"
        _C="${_D#* }"
        case "$_C" in "$_D") ;; ?*)
            IFS=' '; set -- $_C "$@"; IFS=''
        ;; esac
    done
}

# --- Progress check (loop detection) ---
# Two-level check:
#  1. Exact repeat (same CODE length + state + position) → immediate error
#  2. No input consumed for 4096 iterations → stuck in state cycle
alias pars_progress='case "${#CODE}.$STATE.$_LN.$_COL" in "$_PREV") _error INTERNAL LOOP;; esac; _PREV="${#CODE}.$STATE.$_LN.$_COL"; case ${#CODE} in "$_PLEN") _PLC=$((_PLC+1)); case $((_PLC>4096)) in 1) _error INTERNAL LOOP;; esac;; *) _PLEN=${#CODE}; _PLC=0;; esac'

# --- Error reporting helpers ---
alias _pars_err='eval "_a=\"\${_EXP_$STATE:-token}\""; _error "expected: $_a"'
alias _pars_err_eof='eval "_a=\"\${_EXP_$STATE:-token}\""; _error "unexpected end of input, expected: $_a"'

# --- Parser epilogue (emitter wrappers, footer, dispatch) ---
# $1=grammar name, $2=script arg (optional command override).
# Called after the emitter function is defined.
_ast_core_pars_epilogue () {
    eval "_emit_${1}_root () { _emit_$1 \"\$@\"; }"
    . "$_DIR/core/footer.sh"
    eval "unast_$1 () { _readall; eval \"\$REPLY\"; _emit_${1}_root 0; _printr1 \"\$REPLY\"; }"
    eval "reast_$1 () { pars_$1 | unast_$1; }"
    case "${PARS_LIB:-}" in "")
        case "${2:-}" in
        "") "pars_$1";;
        pars_*|unast_*|reast_*) $2;;
        *) _printr1 "usage: $0 [pars_$1 | unast_$1 | reast_$1]"
            _printr1 "  pars_$1    parse stdin, print AST (default)"
            _printr1 "  unast_$1   read AST from stdin, print source"
            _printr1 "  reast_$1   parse stdin, print source (round-trip)"
            exit 1;;
        esac
    ;; esac
}

# --- modules/ast/consume.sh ---
# --- Match/operator consumption ---
# Used by parsers with keyword matching or precedence climbing.
# Skip MATCH from CODE (keyword skip after case-insensitive match)
alias ast_skip_match='CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))'
# Consume MATCH into CONSUMED (keyword consumed as AST value)
alias ast_consume_match='CONSUMED="$MATCH"; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))'
# Consume _OP into CONSUMED (binary operator consumption)
alias ast_consume_op='CONSUMED="$_OP"; CODE="${CODE#"$_OP"}"; _COL=$((_COL+${#_OP}))'

# --- modules/ast/prec.sh ---
# --- Precedence climbing helpers ---
# Used by parsers with #!precedence directives.
# Close node and re-enter precedence climbing loop.
alias ast_close_xc='ast_close; _XC=1; _PREV=; continue'
alias ast_close_col_xc='ast_close_col; _XC=1; _PREV=; continue'

# --- modules/ast/comment.sh ---
# --- Comment skip ---
# Used by parsers with #!comment directives.
# Requires variables set by the generated parser:
#   _CMT_S, _CMT_SL  -- block comment start marker and its length
#   _CMT_E, _CMT_EL  -- block comment end marker and its length

# Line comment: skip from current position to end of line
alias ast_cmt_line='REST="${CODE%%"$_EOL"*}"
    CODE="${CODE#"$REST"}"
    _COL=$((_COL+${#REST})); continue'

# Block comment: skip from start marker to end marker, counting newlines
alias ast_cmt_block='CODE="${CODE#"$_CMT_S"}"; _COL=$((_COL+_CMT_SL))
    while :; do
        case "$CODE" in *"$_CMT_E"*)
            REST="${CODE%%"$_CMT_E"*}"
            _nlcount "$REST"
            CODE="${CODE#"$REST"}"; CODE="${CODE#"$_CMT_E"}"
            _COL=$((_COL+_CMT_EL)); break;;
        *) case $_EOF in 1) _error "unclosed comment";; esac
            _nlcount "$CODE"; CODE=; ast_read;;
        esac
    done; continue'

# --- modules/c89/parser.sh ---

alias ast_Ca="ast_new;STATE=Ca;ast_push"
alias ast_Cb="ast_new;STATE=Cb;ast_push"
alias ast_Cc="ast_new;STATE=Cc;ast_push"
alias ast_Cd="ast_new;STATE=Cd;ast_push"
alias ast_Ce="ast_new;STATE=Ce;ast_push"
alias ast_Cf="ast_new;STATE=Cf;ast_push"
alias ast_Cg="ast_new;STATE=Cg;ast_push"
alias ast_Ch="ast_new;STATE=Ch;ast_push"
alias ast_Ci="ast_new;STATE=Ci;ast_push"
alias ast_Cj="ast_new;STATE=Cj;ast_push"
alias ast_Ck="ast_new;STATE=Ck;ast_push"
alias ast_Cl="ast_new;STATE=Cl;ast_push"
alias ast_Cm="ast_new;STATE=Cm;ast_push"
alias ast_Cn="ast_new;STATE=Cn;ast_push"
alias ast_Co="ast_new;STATE=Co;ast_push"
alias ast_Cp="ast_new;STATE=Cp;ast_push"
alias ast_Cq="ast_new;STATE=Cq;ast_push"
alias ast_Cr="ast_new;STATE=Cr;ast_push"
alias ast_Cs="ast_new;STATE=Cs;ast_push"
alias ast_Ct="ast_new;STATE=Ct;ast_push"
alias ast_Cu="ast_new;STATE=Cu;ast_push"
alias ast_Cv="ast_new;STATE=Cv;ast_push"
alias ast_Cw="ast_new;STATE=Cw;ast_push"
alias ast_Cx="ast_new;STATE=Cx;ast_push"
alias ast_Cy="ast_new;STATE=Cy;ast_push"
alias ast_Cz="ast_new;STATE=Cz;ast_push"
alias ast_C1="ast_new;STATE=C1;ast_push"
alias ast_C2="ast_new;STATE=C2;ast_push"
alias ast_C3="ast_new;STATE=C3;ast_push"
alias ast_C4="ast_new;STATE=C4;ast_push"
alias ast_C5="ast_new;STATE=C5;ast_push"
alias ast_C6="ast_new;STATE=C6;ast_push"
alias ast_C7="ast_new;STATE=C7;ast_push"
alias ast_C8="ast_new;STATE=C8;ast_push"
alias ast_C9="ast_new;STATE=C9;ast_push"
alias ast_C10="ast_new;STATE=C10;ast_push"
alias ast_C11="ast_new;STATE=C11;ast_push"
alias ast_C12="ast_new;STATE=C12;ast_push"
alias ast_C13="ast_new;STATE=C13;ast_push"
alias ast_C14="ast_new;STATE=C14;ast_push"
alias ast_C15="ast_new;STATE=C15;ast_push"
alias ast_C16="ast_new;STATE=C16;ast_push"
alias ast_C17="ast_new;STATE=C17;ast_push"
alias ast_C18="ast_new;STATE=C18;ast_push"
alias ast_C19="ast_new;STATE=C19;ast_push"
alias ast_C20="ast_new;STATE=C20;ast_push"
alias ast_C21="ast_new;STATE=C21;ast_push"
alias ast_C22="ast_new;STATE=C22;ast_push"
alias ast_C23="ast_new;STATE=C23;ast_push"
alias ast_C24="ast_new;STATE=C24;ast_push"
alias ast_C25="ast_new;STATE=C25;ast_push"
alias ast_C26="ast_new;STATE=C26;ast_push"
alias ast_C27="ast_new;STATE=C27;ast_push"
alias ast_C28="ast_new;STATE=C28;ast_push"
alias ast_C29="ast_new;STATE=C29;ast_push"
alias ast_C30="ast_new;STATE=C30;ast_push"
alias ast_C31="ast_new;STATE=C31;ast_push"
alias ast_C32="ast_new;STATE=C32;ast_push"
alias ast_C33="ast_new;STATE=C33;ast_push"
alias ast_C34="ast_new;STATE=C34;ast_push"
alias ast_C35="ast_new;STATE=C35;ast_push"
alias ast_C36="ast_new;STATE=C36;ast_push"
alias ast_C37="ast_new;STATE=C37;ast_push"
alias ast_C38="ast_new;STATE=C38;ast_push"
alias ast_C39="ast_new;STATE=C39;ast_push"
alias ast_C40="ast_new;STATE=C40;ast_push"
alias ast_C41="ast_new;STATE=C41;ast_push"
alias ast_C42="ast_new;STATE=C42;ast_push"
alias ast_C43="ast_new;STATE=C43;ast_push"
alias ast_C44="ast_new;STATE=C44;ast_push"
alias ast_C45="ast_new;STATE=C45;ast_push"
alias ast_C46="ast_new;STATE=C46;ast_push"
alias ast_C47="ast_new;STATE=C47;ast_push"
alias ast_C48="ast_new;STATE=C48;ast_push"
alias ast_C49="ast_new;STATE=C49;ast_push"
alias ast_C50="ast_new;STATE=C50;ast_push"
alias ast_C51="ast_new;STATE=C51;ast_push"
alias ast_C52="ast_new;STATE=C52;ast_push"
alias ast_C53="ast_new;STATE=C53;ast_push"
alias ast_C54="ast_new;STATE=C54;ast_push"
alias ast_C55="ast_new;STATE=C55;ast_push"
alias ast_C56="ast_new;STATE=C56;ast_push"
alias ast_C57="ast_new;STATE=C57;ast_push"
alias ast_C58="ast_new;STATE=C58;ast_push"
alias ast_C59="ast_new;STATE=C59;ast_push"
alias ast_C60="ast_new;STATE=C60;ast_push"
alias ast_C61="ast_new;STATE=C61;ast_push"
alias ast_C62="ast_new;STATE=C62;ast_push"
alias ast_C63="ast_new;STATE=C63;ast_push"
alias ast_C64="ast_new;STATE=C64;ast_push"
alias ast_C65="ast_new;STATE=C65;ast_push"
alias ast_C66="ast_new;STATE=C66;ast_push"
alias ast_C67="ast_new;STATE=C67;ast_push"
alias ast_C68="ast_new;STATE=C68;ast_push"
alias ast_C69="ast_new;STATE=C69;ast_push"
alias ast_C70="ast_new;STATE=C70;ast_push"
alias ast_C71="ast_new;STATE=C71;ast_push"
alias ast_C72="ast_new;STATE=C72;ast_push"
alias ast_C73="ast_new;STATE=C73;ast_push"
alias ast_C74="ast_new;STATE=C74;ast_push"
alias ast_C75="ast_new;STATE=C75;ast_push"
alias ast_C76="ast_new;STATE=C76;ast_push"
alias ast_C77="ast_new;STATE=C77;ast_push"
alias ast_C78="ast_new;STATE=C78;ast_push"
alias ast_C79="ast_new;STATE=C79;ast_push"
alias ast_C80="ast_new;STATE=C80;ast_push"
alias ast_C81="ast_new;STATE=C81;ast_push"
alias ast_C82="ast_new;STATE=C82;ast_push"
alias ast_C83="ast_new;STATE=C83;ast_push"
alias ast_C84="ast_new;STATE=C84;ast_push"
alias ast_C85="ast_new;STATE=C85;ast_push"
alias ast_C86="ast_new;STATE=C86;ast_push"
alias ast_C87="ast_new;STATE=C87;ast_push"
alias ast_C88="ast_new;STATE=C88;ast_push"
alias ast_C89="ast_new;STATE=C89;ast_push"
alias ast_C90="ast_new;STATE=C90;ast_push"
alias ast_C91="ast_new;STATE=C91;ast_push"
alias ast_C92="ast_new;STATE=C92;ast_push"
alias ast_C93="ast_new;STATE=C93;ast_push"
alias ast_C94="ast_new;STATE=C94;ast_push"
alias ast_C95="ast_new;STATE=C95;ast_push"
alias ast_C96="ast_new;STATE=C96;ast_push"
alias ast_C97="ast_new;STATE=C97;ast_push"
alias ast_C98="ast_new;STATE=C98;ast_push"
alias ast_C99="ast_new;STATE=C99;ast_push"
alias ast_C100="ast_new;STATE=C100;ast_push"
alias ast_C101="ast_new;STATE=C101;ast_push"
alias ast_C102="ast_new;STATE=C102;ast_push"
alias ast_C103="ast_new;STATE=C103;ast_push"
alias ast_C104="ast_new;STATE=C104;ast_push"
alias ast_C105="ast_new;STATE=C105;ast_push"
alias ast_C106="ast_new;STATE=C106;ast_push"
alias ast_C107="ast_new;STATE=C107;ast_push"
alias ast_C108="ast_new;STATE=C108;ast_push"
alias ast_C109="ast_new;STATE=C109;ast_push"
alias ast_C110="ast_new;STATE=C110;ast_push"
alias ast_C111="ast_new;STATE=C111;ast_push"
alias ast_C112="ast_new;STATE=C112;ast_push"
alias ast_C113="ast_new;STATE=C113;ast_push"
alias ast_C114="ast_new;STATE=C114;ast_push"
alias ast_C115="ast_new;STATE=C115;ast_push"
alias ast_C116="ast_new;STATE=C116;ast_push"
alias ast_C117="ast_new;STATE=C117;ast_push"
alias ast_C118="ast_new;STATE=C118;ast_push"
alias ast_C119="ast_new;STATE=C119;ast_push"
alias ast_C120="ast_new;STATE=C120;ast_push"
alias ast_C121="ast_new;STATE=C121;ast_push"
alias ast_C122="ast_new;STATE=C122;ast_push"
alias ast_C123="ast_new;STATE=C123;ast_push"
alias ast_C124="ast_new;STATE=C124;ast_push"
alias ast_C125="ast_new;STATE=C125;ast_push"
alias ast_C126="ast_new;STATE=C126;ast_push"
alias ast_C127="ast_new;STATE=C127;ast_push"
alias ast_C128="ast_new;STATE=C128;ast_push"
alias ast_C129="ast_new;STATE=C129;ast_push"
alias ast_C130="ast_new;STATE=C130;ast_push"
alias ast_C131="ast_new;STATE=C131;ast_push"
alias ast_C132="ast_new;STATE=C132;ast_push"
alias ast_C133="ast_new;STATE=C133;ast_push"
alias ast_C134="ast_new;STATE=C134;ast_push"
alias ast_C135="ast_new;STATE=C135;ast_push"
alias ast_C136="ast_new;STATE=C136;ast_push"
alias ast_C137="ast_new;STATE=C137;ast_push"
alias ast_C138="ast_new;STATE=C138;ast_push"
alias ast_C139="ast_new;STATE=C139;ast_push"
alias ast_C140="ast_new;STATE=C140;ast_push"
alias ast_C141="ast_new;STATE=C141;ast_push"
alias ast_C142="ast_new;STATE=C142;ast_push"
alias ast_C143="ast_new;STATE=C143;ast_push"
alias ast_C144="ast_new;STATE=C144;ast_push"
alias ast_C145="ast_new;STATE=C145;ast_push"
alias ast_C146="ast_new;STATE=C146;ast_push"
alias ast_C147="ast_new;STATE=C147;ast_push"
alias ast_C148="ast_new;STATE=C148;ast_push"
alias ast_C149="ast_new;STATE=C149;ast_push"
alias ast_C150="ast_new;STATE=C150;ast_push"
alias ast_C151="ast_new;STATE=C151;ast_push"
alias ast_C152="ast_new;STATE=C152;ast_push"
alias ast_C153="ast_new;STATE=C153;ast_push"
alias ast_C154="ast_new;STATE=C154;ast_push"
alias ast_C155="ast_new;STATE=C155;ast_push"
alias ast_C156="ast_new;STATE=C156;ast_push"
alias ast_C157="ast_new;STATE=C157;ast_push"
alias ast_C158="ast_new;STATE=C158;ast_push"
alias ast_C159="ast_new;STATE=C159;ast_push"
alias ast_C160="ast_new;STATE=C160;ast_push"
alias ast_C161="ast_new;STATE=C161;ast_push"
alias ast_C162="ast_new;STATE=C162;ast_push"
alias ast_C163="ast_new;STATE=C163;ast_push"
alias ast_C164="ast_new;STATE=C164;ast_push"
alias ast_C165="ast_new;STATE=C165;ast_push"
alias ast_C166="ast_new;STATE=C166;ast_push"
alias ast_C167="ast_new;STATE=C167;ast_push"
alias ast_C168="ast_new;STATE=C168;ast_push"
alias ast_C169="ast_new;STATE=C169;ast_push"
alias ast_C170="ast_new;STATE=C170;ast_push"
alias ast_C171="ast_new;STATE=C171;ast_push"
alias ast_C172="ast_new;STATE=C172;ast_push"
alias ast_C173="ast_new;STATE=C173;ast_push"
alias ast_C174="ast_new;STATE=C174;ast_push"
alias ast_C175="ast_new;STATE=C175;ast_push"
alias ast_C176="ast_new;STATE=C176;ast_push"
alias ast_C177="ast_new;STATE=C177;ast_push"
alias ast_C178="ast_new;STATE=C178;ast_push"
alias ast_C179="ast_new;STATE=C179;ast_push"
alias ast_C180="ast_new;STATE=C180;ast_push"
alias ast_C181="ast_new;STATE=C181;ast_push"
alias ast_C182="ast_new;STATE=C182;ast_push"
alias ast_C183="ast_new;STATE=C183;ast_push"
alias ast_C184="ast_new;STATE=C184;ast_push"
alias ast_C185="ast_new;STATE=C185;ast_push"
alias ast_C186="ast_new;STATE=C186;ast_push"
alias ast_C187="ast_new;STATE=C187;ast_push"
alias ast_C188="ast_new;STATE=C188;ast_push"

# State codes:
#  Ca=_doc_  Cb=file_body  Cc=item  Cd=int_item  Ce=char_item  Cf=void_item  Cg=long_item  Ch=short_item  Ci=float_item  Cj=double_item  Ck=signed_item  Cl=unsigned_item  Cm=const_item  Cn=static_item  Co=extern_item  Cp=volatile_item  Cq=auto_item  Cr=register_item  Cs=typedef_item  Ct=struct_item  Cu=union_item  Cv=enum_item  Cw=decl_rest  Cx=ptr_decl  Cy=ident_decl  Cz=after_name  C1=func_def  C2=func_end  C3=func_block  C4=array_decl  C5=init_part  C6=more_decls  C7=declarator  C8=param  C9=param_rest  C10=param_ptr  C11=param_type  C12=param_struct  C13=param_union  C14=param_enum  C15=struct_rest  C16=enum_rest  C17=enum_tail  C18=enum_vars  C19=enumerator_list  C20=enumerator  C21=initializer  C22=brace_init  C23=return_item  C24=break_item  C25=continue_item  C26=goto_item  C27=if_item  C28=while_item  C29=for_item  C30=do_item  C31=switch_item  C32=case_item  C33=default_item  C34=sizeof_item  C35=pp_line  C36=block_item  C37=block_body  C38=expr_item  C39=expr  C40=atom  C41=sizeof_expr  C42=sizeof_body  C43=paren_expr  C44=arg_list  C45=str  C46=chr  C47=number  C48=ident  C49=_unary_1  C50=_unary_2  C51=_unary_3  C52=_unary_4  C53=_unary_5  C54=_unary_6
#  cont: C55 C56 C57 C58 C59 C60 C61 C62 C63 C64 C65 C66 C67 C68 C69 C70 C71 C72 C73 C74 C75 C76 C77 C78 C79 C80 C81 C82 C83 C84 C85 C86 C87 C88 C89 C90 C91 C92 C93 C94 C95 C96 C97 C98 C99 C100 C101 C102 C103 C104 C105 C106 C107 C108 C109 C110 C111 C112 C113 C114 C115 C116 C117 C118 C119 C120 C121 C122 C123 C124 C125 C126 C127 C128 C129 C130 C131 C132 C133 C134 C135 C136 C137 C138 C139 C140 C141 C142 C143 C144 C145 C146 C147 C148 C149 C150 C151 C152 C153 C154 C155 C156 C157 C158 C159 C160 C161 C162 C163 C164 C165 C166 C167 C168 C169 C170 C171 C172 C173 C174 C175 C176 C177 C178 C179 C180 C181 C182 C183 C184 C185 C186 C187 C188
_c89_sg_C45='[\\"]*'
_c89_sg_C46='[\\'"'"']*'

_EXP_Ca='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_Cb='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_Cc='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or '\''w'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_Cd=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Ce=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cf=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cg=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Ch=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Ci=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cj=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Ck=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cl=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cm=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cn=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Co=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cp=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cq=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cr=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cs=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Ct='identifier'
_EXP_Cu='identifier'
_EXP_Cv=''\''{'\'' or identifier'
_EXP_Cw=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cx=''\''*'\'' or '\'';'\'' or identifier'
_EXP_Cy='identifier'
_EXP_Cz=''\''('\'' or '\'';'\'' or '\''['\'' or '\''='\'' or '\'','\'''
_EXP_C1=''\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\'')'\'''
_EXP_C2=''\''{'\'' or '\'';'\'' or '\'','\'''
_EXP_C3='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or '\''}'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C4='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or '\'']'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C5='"\"" or '\'''\'''\'' or '\''S'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C6=''\'';'\'' or '\'','\'''
_EXP_C7=''\''*'\'' or identifier'
_EXP_C8=''\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'''
_EXP_C9=''\''*'\'' or identifier'
_EXP_C10=''\''*'\'' or identifier'
_EXP_C11=''\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'''
_EXP_C12='identifier'
_EXP_C13='identifier'
_EXP_C14='identifier'
_EXP_C15='identifier'
_EXP_C16='identifier'
_EXP_C17=''\''*'\'' or '\'';'\'' or identifier'
_EXP_C18=''\''*'\'' or '\'';'\'' or identifier'
_EXP_C19='identifier'
_EXP_C20='identifier'
_EXP_C21='"\"" or '\'''\'''\'' or '\''S'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C22='"\"" or '\'''\'''\'' or '\''S'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C23='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or '\'';'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C24=''\'';'\'''
_EXP_C25=''\'';'\'''
_EXP_C26='identifier'
_EXP_C27=''\''('\'''
_EXP_C28=''\''('\'''
_EXP_C29=''\''('\'''
_EXP_C30='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C31=''\''('\'''
_EXP_C32='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C33=''\'':'\'''
_EXP_C34=''\''('\'''
_EXP_C35='identifier'
_EXP_C36='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or '\''}'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C37='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or '\''}'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C38='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C39='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C40='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C41=''\''('\'''
_EXP_C42='identifier'
_EXP_C43='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C44='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C45='"\"" or '\''\'\'''
_EXP_C46=''\''\'\'' or '\'''\'''\'''
_EXP_C49='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C50='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C51='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C52='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C53='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C54='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C55='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C56='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\'')'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C57=''\'')'\'''
_EXP_C58='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\'']'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C59=''\'']'\'''
_EXP_C60='identifier'
_EXP_C61='identifier'
_EXP_C64='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C65=''\'':'\'''
_EXP_C66='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C67='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C90=''\''('\'' or '\'';'\'' or '\''['\'' or '\''='\'' or '\'','\'''
_EXP_C93=''\''{'\'' or '\'';'\'' or '\'','\'''
_EXP_C94=''\'','\'''
_EXP_C95=''\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'''
_EXP_C99=''\'';'\'' or '\'','\'''
_EXP_C101=''\'';'\'' or '\'','\'''
_EXP_C103=''\''*'\'' or identifier'
_EXP_C104=''\''['\'' or '\''='\'''
_EXP_C105='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or '\'']'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C106='"\"" or '\'''\'''\'' or '\''S'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C107=''\''*'\'' or identifier'
_EXP_C115=''\''*'\'' or '\'';'\'' or identifier'
_EXP_C118=''\''{'\'' or '\''*'\'' or '\'';'\'' or identifier'
_EXP_C120=''\''}'\'''
_EXP_C121=''\''*'\'' or '\'';'\'' or identifier'
_EXP_C124=''\''}'\'''
_EXP_C125=''\''*'\'' or '\'';'\'' or identifier'
_EXP_C127=''\'','\'''
_EXP_C128='identifier'
_EXP_C129=''\''='\'''
_EXP_C130='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C132=''\'','\'' or '\''}'\'''
_EXP_C133='"\"" or '\'''\'''\'' or '\''S'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C134=''\'';'\'''
_EXP_C135='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C136=''\'')'\'''
_EXP_C137='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C138=''\''E'\'' or '\''e'\'''
_EXP_C139='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C140='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C141=''\'')'\'''
_EXP_C142='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C144='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or '\'';'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C145='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or '\'';'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C146='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or '\'')'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C147='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C149=''\''w'\'' or '\''W'\'''
_EXP_C150=''\''('\'''
_EXP_C151='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C152=''\'')'\'''
_EXP_C153=''\'';'\'''
_EXP_C154='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C155=''\'')'\'''
_EXP_C156='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C158=''\'':'\'''
_EXP_C159='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C161='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C163='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'
_EXP_C164=''\'')'\'''
_EXP_C165=''\'';'\'''
_EXP_C169='"\"" or '\'''\'''\'' or '\''I'\'' or '\''C'\'' or '\''V'\'' or '\''L'\'' or '\''S'\'' or '\''F'\'' or '\''D'\'' or '\''U'\'' or '\''E'\'' or '\''A'\'' or '\''R'\'' or '\''T'\'' or '\''B'\'' or '\''G'\'' or '\''#'\'' or '\''{'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''i'\'' or '\''c'\'' or '\''v'\'' or '\''l'\'' or '\''s'\'' or '\''f'\'' or '\''d'\'' or '\''u'\'' or '\''e'\'' or '\''a'\'' or '\''r'\'' or '\''t'\'' or '\''b'\'' or '\''g'\'' or '\''}'\'' or identifier or [0-9a-fA-FxXuUlL.] or text'
_EXP_C171=''\'';'\'''
_EXP_C173='identifier'
_EXP_C174=''\'')'\'''
_EXP_C175=''\''*'\'' or identifier'
_EXP_C176=''\'')'\'''
_EXP_C177=''\'','\'''
_EXP_C178='"\"" or '\'''\'''\'' or '\''S'\'' or '\''+'\'' or '\''&'\'' or '\''*'\'' or '\''~'\'' or '\''!'\'' or '\''-'\'' or '\''('\'' or '\''s'\'' or identifier or [0-9a-fA-FxXuUlL.]'

# Steal last sibling from parent, make it first child of current NODE
alias _steal='eval "_W=\"\${X$PARN##*\" \"}\"
    X$PARN=\"\${X$PARN% *}\"
    X$NODE=\"\$X$NODE \$_W\""'

_c89_parser_prec () {
    case "$1" in
        '=') REPLY=1;;
        '+=') REPLY=1;;
        '-=') REPLY=1;;
        '*=') REPLY=1;;
        '/=') REPLY=1;;
        '%=') REPLY=1;;
        '&=') REPLY=1;;
        '|=') REPLY=1;;
        '^=') REPLY=1;;
        '<<=') REPLY=1;;
        '>>=') REPLY=1;;
        '||') REPLY=2;;
        '&&') REPLY=3;;
        '|') REPLY=4;;
        '^') REPLY=5;;
        '&') REPLY=6;;
        '==') REPLY=7;;
        '!=') REPLY=7;;
        '<') REPLY=8;;
        '>') REPLY=8;;
        '<=') REPLY=8;;
        '>=') REPLY=8;;
        '<<') REPLY=9;;
        '>>') REPLY=9;;
        '+') REPLY=10;;
        '-') REPLY=10;;
        '*') REPLY=11;;
        '/') REPLY=11;;
        '%') REPLY=11;;
        '?') REPLY=0;;
        '-') REPLY=12;;
        '!') REPLY=12;;
        '~') REPLY=12;;
        '*') REPLY=12;;
        '&') REPLY=12;;
        '++') REPLY=12;;
        *) REPLY=0;;
    esac
}

c89_parser () {
    local CODE= STATE=Ca V=0 CONSUMED= STATES= NODES=" 0" X0="Ca" \
        NODE= PARN= PARNT= SIBL= REST= MATCH= _a= _W= _ST= _D= _C= _pq= \
        _EOF=0 _line= _PREV= _PLEN= _PLC=0 _JT=0 \
        _XC=0 _OP= _np=0 _cp=0 \
        _CMT_S='/*' _CMT_SL=2 _CMT_E='*/' _CMT_EL=2 \
        _LN=1 _COL=1 _RD=0

    while :; do
        pars_progress
        ast_feed

        # --- Expression completion (precedence climbing) ---
        case $_XC in 1) _XC=0; case $STATE in C39|C55|C64|C66)
            case "$CODE" in ' '*|"$_TAB"*|"$_EOL"*) ast_skip_wse;; esac
            case "$CODE" in
            '-''>'*) CODE="${CODE#"->"}"; _COL=$((_COL+2)); ast_C61; _steal; continue;;
            '+''+'*) CODE="${CODE#"++"}"; _COL=$((_COL+2)); ast_C62; _steal; ast_close_xc;;
            '-''-'*) CODE="${CODE#"--"}"; _COL=$((_COL+2)); ast_C63; _steal; ast_close_xc;;
            '('*) CODE="${CODE#"("}"; _COL=$((_COL+1)); ast_C56; _steal; continue;;
            '['*) CODE="${CODE#"["}"; _COL=$((_COL+1)); ast_C58; _steal; continue;;
            '.'*) CODE="${CODE#"."}"; _COL=$((_COL+1)); ast_C60; _steal; continue;;
            esac
            _OP=
            case "$CODE" in
            '<''<''='*) _OP="<<="; _np=1;;
            '>''>''='*) _OP=">>="; _np=1;;
            '+''='*) _OP="+="; _np=1;;
            '-''='*) _OP="-="; _np=1;;
            '*''='*) _OP="*="; _np=1;;
            '/''='*) _OP="/="; _np=1;;
            '%''='*) _OP="%="; _np=1;;
            '&''='*) _OP="&="; _np=1;;
            '|''='*) _OP="|="; _np=1;;
            '^''='*) _OP="^="; _np=1;;
            '|''|'*) _OP="||"; _np=2;;
            '&''&'*) _OP="&&"; _np=3;;
            '=''='*) _OP="=="; _np=7;;
            '!''='*) _OP="!="; _np=7;;
            '<''='*) _OP="<="; _np=8;;
            '>''='*) _OP=">="; _np=8;;
            '<''<'*) _OP="<<"; _np=9;;
            '>''>'*) _OP=">>"; _np=9;;
            '='*) _OP="="; _np=1;;
            '|'*) _OP="|"; _np=4;;
            '^'*) _OP="^"; _np=5;;
            '&'*) _OP="&"; _np=6;;
            '<'*) _OP="<"; _np=8;;
            '>'*) _OP=">"; _np=8;;
            '+'*) _OP="+"; _np=10;;
            '-'*) _OP="-"; _np=10;;
            '*'*) _OP="*"; _np=11;;
            '/'*) _OP="/"; _np=11;;
            '%'*) _OP="%"; _np=11;;
            '?'*) _OP="?"; _np=0;;
            esac
            case "$_OP" in ?*)
                case $STATE in C55|C64|C66)
                    _W="${NODES##*" "}"; eval "_W=\"\${V$_W:-}\""
                    _c89_parser_prec "$_W"; _cp=$REPLY
                    case "$_OP" in '='|'+='|'-='|'*='|'/='|'%='|'&='|'|='|'^='|'<<='|'>>='|'?') case $((_np < _cp)) in 1) ast_close_xc;; esac;;
                    *) case $((_np <= _cp)) in 1) ast_close_xc;; esac;; esac
                ;; esac
                ast_consume_op
                case "$_OP" in '?') ast_C64; _steal; continue;; esac
                ast_C55; _steal; continue
            ;; esac
            case $STATE in C64) STATE=C65; continue;; esac
            case $STATE in C66) ast_close_xc;; esac
            case $STATE in C55) ast_close_xc;; esac
            case $STATE in C39) ast_close; _PREV=; continue;; esac
        ;; esac;; esac

        # --- Fast paths (bulk accumulation) ---
        case $STATE in
        # str: accumulate (stops at close/esc)
        C45) case $CODE in '"'*|'\'*|'') ;; *)
            ast_more; REST="${CODE%%$_c89_sg_C45}"; ast_bulk_nl;; esac;;
        # chr: accumulate (stops at close/esc)
        C46) case $CODE in "'"*|'\'*|'') ;; *)
            ast_more; REST="${CODE%%$_c89_sg_C46}"; ast_bulk_nl;; esac;;
        # number: accumulate [0-9a-fA-FxXuUlL.]
        C47) ast_more; REST="${CODE%%[!0-9a-fA-FxXuUlL.]*}"
            case "$REST" in ?*) ast_bulk_nl;; *) ast_close; _XC=1; _PREV=; continue;; esac;;
        # ident: accumulate [a-zA-Z_0-9]
        C48) ast_more; REST="${CODE%%[!a-zA-Z_0-9]*}"
            case "$REST" in ?*) ast_bulk_nl;; *) ast_close; _XC=1; _PREV=; continue;; esac;;
        Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|Cy|Cz|C1|C2|C3|C4|C5|C6|C7|C8|C9|C10|C11|C12|C13|C14|C15|C16|C17|C18|C19|C20|C21|C22|C23|C24|C25|C26|C27|C28|C29|C31|C32|C33|C34|C35|C36|C37|C38|C39|C40|C41|C42|C43|C44|C49|C50|C51|C52|C53|C54|C55|C56|C57|C58|C59|C60|C61|C62|C63|C64|C65|C66|C67|C90|C93|C94|C95|C99|C101|C103|C104|C105|C106|C107|C115|C118|C120|C121|C124|C125|C127|C128|C129|C130|C132|C133|C134|C135|C136|C138|C140|C141|C142|C144|C145|C146|C147|C149|C150|C151|C152|C153|C154|C155|C156|C158|C159|C161|C163|C164|C165|C171|C173|C174|C175|C176|C177|C178)
            case $CODE in ' '*|"$_TAB"*|"$_EOL"*)
                ast_skip; continue;; esac;;
        esac

        # Block comment skip
        case $CODE in '/*'*)
            ast_cmt_block;;
        esac

        # --- Character dispatch ---
        case $CODE in

        '"'*)
            case $STATE in
            C45) ast_close; ast_skip; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C45; ast_skip; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '\'*)
            case $STATE in
            C45)
                case ${CODE#?} in
                '"'*|'\'*|'/'*|'b'*|'f'*|'n'*|'r'*|'t'*)
                    ast_consume2;;
                'u'*) case $CODE in
                '\u'[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]*)
                        REST="${CODE#??????}"; _ast_xfer; _COL=$((_COL+6));;
                    *) _error UNICODE;; esac;;
                *) _error ESCAPE;;
                esac; continue;;
            C46) ast_consume2; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C3|C99|C101|C107|C115|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        "'"*)
            case $STATE in
            C46) ast_close; ast_skip; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C46; ast_skip; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'I'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'INT') STATE=C68; ast_Cd; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'IF') STATE=C68; ast_C27; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'INT') CONSUMED='int'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'C'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'CHAR') STATE=C68; ast_Ce; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'CONST') STATE=C68; ast_Cm; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'CONTINUE') STATE=C68; ast_C25; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'CASE') STATE=C68; ast_C32; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'CHAR') CONSUMED='char'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                'CONST') CONSUMED='const'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                *) CONSUMED="$MATCH"; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'V'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'VOID') STATE=C68; ast_Cf; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'VOLATILE') STATE=C68; ast_Cp; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'VOID') CONSUMED='void'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'L'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'LONG') STATE=C68; ast_Cg; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'LONG') CONSUMED='long'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'S'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'SHORT') STATE=C68; ast_Ch; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'SIGNED') STATE=C68; ast_Ck; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'STATIC') STATE=C68; ast_Cn; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'STRUCT') STATE=C68; ast_Ct; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'SWITCH') STATE=C68; ast_C31; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'SIZEOF') STATE=C68; ast_C34; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'SHORT') CONSUMED='short'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                'SIGNED') CONSUMED='signed'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                'STRUCT') STATE=C111; ast_C12; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) CONSUMED="$MATCH"; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'SIZEOF') STATE=C172; ast_C41; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C172; ast_C48; continue;;
                esac;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'F'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'FLOAT') STATE=C68; ast_Ci; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'FOR') STATE=C68; ast_C29; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'FLOAT') CONSUMED='float'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'D'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'DOUBLE') STATE=C68; ast_Cj; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'DO') STATE=C68; ast_C30; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'DEFAULT') STATE=C68; ast_C33; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'DOUBLE') CONSUMED='double'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'U'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'UNSIGNED') STATE=C68; ast_Cl; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'UNION') STATE=C68; ast_Cu; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'UNSIGNED') CONSUMED='unsigned'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                'UNION') STATE=C111; ast_C13; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) CONSUMED="$MATCH"; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'E'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'EXTERN') STATE=C68; ast_Co; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'ENUM') STATE=C68; ast_Cv; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'ENUM') STATE=C111; ast_C14; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C138)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'ELSE') ast_skip_match; STATE=C139; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; continue;;
                esac;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'A'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'AUTO') STATE=C68; ast_Cq; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'R'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'REGISTER') STATE=C68; ast_Cr; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'RETURN') STATE=C68; ast_C23; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'T'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'TYPEDEF') STATE=C68; ast_Cs; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'B'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'BREAK') STATE=C68; ast_C24; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'G'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'GOTO') STATE=C68; ast_C26; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '#'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C35; ast_skip; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C21|C35|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '{'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C36; ast_skip; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            C93) STATE=C96; ast_C2; continue;;
            C2) STATE=C97; ast_C3; ast_skip; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C21) STATE=C131; ast_C22; ast_skip; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cw|Cx|C90|Cz|C99|C101|C107|C115|C35|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '+'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C54; ast_skip; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '&'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C53; ast_skip; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '*'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Cw) STATE=C88; ast_Cx; ast_skip; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) ast_skip; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C10; ast_skip; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C17) STATE=C126; ast_C18; continue;;
            C18) ast_Cx; ast_skip; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C52; ast_skip; continue;;
            C175) ast_skip; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|Ct|Cu|Cv|C90|Cz|C93|C2|C99|C101|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '~'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C51; ast_skip; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '!'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C50; ast_skip; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '-'*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C49; ast_skip; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '('*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            C90) STATE=C91; ast_Cz; continue;;
            Cz) STATE=C92; ast_C1; ast_skip; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C27) ast_skip; STATE=C135; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C28) ast_skip; STATE=C140; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C29) ast_skip; STATE=C144; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C150) ast_skip; STATE=C151; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C31) ast_skip; STATE=C154; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C34) ast_skip; STATE=C163; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C43; ast_skip; continue;;
            C41) ast_skip; STATE=C173; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C93|C2|C99|C101|C107|C115|C35|C42|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'i'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'INT') STATE=C68; ast_Cd; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'IF') STATE=C68; ast_C27; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'INT') CONSUMED='int'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'c'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'CHAR') STATE=C68; ast_Ce; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'CONST') STATE=C68; ast_Cm; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'CONTINUE') STATE=C68; ast_C25; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'CASE') STATE=C68; ast_C32; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'CHAR') CONSUMED='char'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                'CONST') CONSUMED='const'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                *) CONSUMED="$MATCH"; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'v'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'VOID') STATE=C68; ast_Cf; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'VOLATILE') STATE=C68; ast_Cp; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'VOID') CONSUMED='void'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'l'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'LONG') STATE=C68; ast_Cg; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'LONG') CONSUMED='long'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        's'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'SHORT') STATE=C68; ast_Ch; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'SIGNED') STATE=C68; ast_Ck; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'STATIC') STATE=C68; ast_Cn; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'STRUCT') STATE=C68; ast_Ct; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'SWITCH') STATE=C68; ast_C31; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'SIZEOF') STATE=C68; ast_C34; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'SHORT') CONSUMED='short'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                'SIGNED') CONSUMED='signed'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                'STRUCT') STATE=C111; ast_C12; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) CONSUMED="$MATCH"; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C40)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'SIZEOF') STATE=C172; ast_C41; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C172; ast_C48; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'f'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'FLOAT') STATE=C68; ast_Ci; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'FOR') STATE=C68; ast_C29; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'FLOAT') CONSUMED='float'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'd'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'DOUBLE') STATE=C68; ast_Cj; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'DO') STATE=C68; ast_C30; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'DEFAULT') STATE=C68; ast_C33; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'DOUBLE') CONSUMED='double'; ast_skip_match
                    ast_C11; ast_close; STATE=C111; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'u'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'UNSIGNED') STATE=C68; ast_Cl; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'UNION') STATE=C68; ast_Cu; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'UNSIGNED') CONSUMED='unsigned'; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C11; ast_close; STATE=C111; continue;;
                'UNION') STATE=C111; ast_C13; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) CONSUMED="$MATCH"; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH}))
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'e'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'EXTERN') STATE=C68; ast_Co; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'ENUM') STATE=C68; ast_Cv; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C11)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'ENUM') STATE=C111; ast_C14; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C111; continue;;
                esac;;
            C138)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'ELSE') ast_skip_match; STATE=C139; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C1) STATE=C94; ast_C8; continue;;
            C95) STATE=C94; ast_C8; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C8) STATE=C107; ast_C11; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C94) STATE=C94; ast_C8; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'a'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'AUTO') STATE=C68; ast_Cq; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'r'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'REGISTER') STATE=C68; ast_Cr; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                'RETURN') STATE=C68; ast_C23; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        't'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'TYPEDEF') STATE=C68; ast_Cs; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'b'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'BREAK') STATE=C68; ast_C24; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'g'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'GOTO') STATE=C68; ast_C26; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'w'*)
            case $STATE in
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; CODE="${CODE#"$MATCH"}"; _COL=$((_COL+${#MATCH})); continue;;
                *) STATE=C68; ast_C38; continue;;
                esac;;
            C149)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') ast_skip_match; STATE=C150; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        ';'*)
            case $STATE in
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Cw) ast_Cw; ast_skip; ast_close; STATE=C88; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            C90) STATE=C91; ast_Cz; continue;;
            Cz) STATE=C92; ast_C6; continue;;
            C93) STATE=C96; ast_C2; continue;;
            C2) STATE=C97; ast_C6; continue;;
            C99) STATE=C100; ast_C6; continue;;
            C101) STATE=C102; ast_C6; continue;;
            C6) ast_skip; ast_close; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C17) STATE=C126; ast_C18; continue;;
            C18) ast_Cw; ast_skip; ast_close; continue;;
            C23) ast_skip; ast_close; continue;;
            C24) ast_skip; ast_close; continue;;
            C25) ast_skip; ast_close; continue;;
            C134) ast_skip; ast_close; continue;;
            C144) ast_skip; STATE=C145; continue;;
            C145) ast_skip; STATE=C146; continue;;
            C153) ast_skip; ast_close; continue;;
            C165) ast_skip; ast_close; continue;;
            C171) ast_skip; ast_close; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cc|Ct|Cu|Cv|C3|C107|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '['*)
            case $STATE in
            C90) STATE=C91; ast_Cz; continue;;
            Cz) STATE=C92; ast_C4; ast_skip; continue;;
            C104) ast_skip; STATE=C105; continue;;
            C105) ast_skip; STATE=C105; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C93|C2|C3|C99|C101|C107|C115|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '='*)
            case $STATE in
            C90) STATE=C91; ast_Cz; continue;;
            Cz) STATE=C92; ast_C5; ast_skip; continue;;
            C104) ast_skip; STATE=C106; continue;;
            C129) ast_skip; STATE=C130; continue;;
            C105) ast_skip; STATE=C106; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C108|C109|C111|C116|C117|C119|C123|C127|C131|C138|C168|C170|C172|C175|C177|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C93|C2|C3|C99|C101|C107|C115|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        ','*)
            case $STATE in
            C90) STATE=C91; ast_Cz; continue;;
            Cz) STATE=C92; ast_C6; continue;;
            C94) ast_skip; STATE=C95; continue;;
            C93) STATE=C96; ast_C2; continue;;
            C2) STATE=C97; ast_C6; continue;;
            C99) STATE=C100; ast_C6; continue;;
            C101) STATE=C102; ast_C6; continue;;
            C6) ast_skip; STATE=C103; continue;;
            C127) ast_skip; STATE=C128; continue;;
            C132) ast_skip; STATE=C133; continue;;
            C177) ast_skip; STATE=C178; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C129|C131|C138|C168|C170|C172|C175|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C3|C107|C115|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        ')'*)
            case $STATE in
            C1) ast_skip; STATE=C93; continue;;
            C136) ast_skip; STATE=C137; continue;;
            C141) ast_skip; STATE=C142; continue;;
            C146) ast_skip; STATE=C147; continue;;
            C152) ast_skip; STATE=C153; continue;;
            C155) ast_skip; STATE=C156; continue;;
            C164) ast_skip; STATE=C165; continue;;
            C174) ast_skip; ast_close; continue;;
            C176) ast_skip; ast_close; continue;;
            C56) ast_skip; ast_close_xc;;
            C57) ast_skip; ast_close_xc;;
            C94) ast_skip; STATE=C93; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C3|C99|C101|C107|C115|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '}'*)
            case $STATE in
            C3) STATE=C98; ast_C37; continue;;
            C120) ast_skip; STATE=C121; continue;;
            C124) ast_skip; STATE=C125; continue;;
            C132) ast_skip; ast_close; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) ast_C37; ast_skip; ast_close; STATE=C168; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C21|C142|C147|C156|C159|C161|C35|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        ']'*)
            case $STATE in
            C4) ast_skip; STATE=C99; continue;;
            C105) ast_skip; STATE=C104; continue;;
            C58) ast_skip; ast_close_xc;;
            C59) ast_skip; ast_close_xc;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C3|C99|C101|C107|C115|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        'W'*)
            case $STATE in
            C149)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') ast_skip_match; STATE=C150; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; continue;;
                esac;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        ':'*)
            case $STATE in
            C158) ast_skip; STATE=C159; continue;;
            C33) ast_skip; STATE=C161; continue;;
            C65) ast_skip; STATE=C66; continue;;
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C67|C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C3|C99|C101|C107|C115|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        [a-zA-Z_0-90-9a-fA-FxXuUlL.]*)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc) STATE=C68; ast_C38; continue;;
            Cd) STATE=C69; ast_Cw; continue;;
            Ce) STATE=C70; ast_Cw; continue;;
            Cf) STATE=C71; ast_Cw; continue;;
            Cg) STATE=C72; ast_Cw; continue;;
            Ch) STATE=C73; ast_Cw; continue;;
            Ci) STATE=C74; ast_Cw; continue;;
            Cj) STATE=C75; ast_Cw; continue;;
            Ck) STATE=C76; ast_Cw; continue;;
            Cl) STATE=C77; ast_Cw; continue;;
            Cm) STATE=C78; ast_Cw; continue;;
            Cn) STATE=C79; ast_Cw; continue;;
            Co) STATE=C80; ast_Cw; continue;;
            Cp) STATE=C81; ast_Cw; continue;;
            Cq) STATE=C82; ast_Cw; continue;;
            Cr) STATE=C83; ast_Cw; continue;;
            Cs) STATE=C84; ast_Cw; continue;;
            Ct) STATE=C85; ast_C15; continue;;
            Cu) STATE=C86; ast_C15; continue;;
            Cv) STATE=C87; ast_C16; continue;;
            Cw) STATE=C88; ast_Cy; continue;;
            Cx) STATE=C89; ast_Cw; continue;;
            Cy) STATE=C90; ast_C48; continue;;
            C3) STATE=C98; ast_C37; continue;;
            C4) ast_C39; continue;;
            C5) STATE=C101; ast_C21; continue;;
            C103) STATE=C6; ast_C7; continue;;
            C7) STATE=C104; ast_C48; continue;;
            C105) ast_C39; continue;;
            C106) STATE=C104; ast_C21; continue;;
            C107) STATE=C108; ast_C9; continue;;
            C9) STATE=C109; ast_C48; continue;;
            C10) STATE=C110; ast_C9; continue;;
            C12) STATE=C112; ast_C48; continue;;
            C13) STATE=C113; ast_C48; continue;;
            C14) STATE=C114; ast_C48; continue;;
            C15) STATE=C115; ast_C48; continue;;
            C115) STATE=C116; ast_Cw; continue;;
            C16) STATE=C118; ast_C48; continue;;
            C118) STATE=C119; ast_C17; continue;;
            C121) STATE=C122; ast_C18; continue;;
            C17) STATE=C124; ast_C19; continue;;
            C125) STATE=C126; ast_C18; continue;;
            C18) ast_Cy; continue;;
            C19) STATE=C127; ast_C20; continue;;
            C128) STATE=C127; ast_C20; continue;;
            C20) STATE=C129; ast_C48; continue;;
            C130) STATE=C129; ast_C39; continue;;
            C21) STATE=C131; ast_C39; continue;;
            C22) STATE=C132; ast_C21; continue;;
            C133) STATE=C132; ast_C21; continue;;
            C23) ast_C39; continue;;
            C26) STATE=C134; ast_C48; continue;;
            C135) STATE=C136; ast_C39; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C140) STATE=C141; ast_C39; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C144) ast_C39; continue;;
            C145) ast_C39; continue;;
            C146) ast_C39; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C151) STATE=C152; ast_C39; continue;;
            C154) STATE=C155; ast_C39; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C32) STATE=C158; ast_C39; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C163) STATE=C164; ast_C39; continue;;
            C35) STATE=C166; ast_C48; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            C38) STATE=C171; ast_C39; continue;;
            C39) ast_C40; continue;;
            C40) STATE=C172; ast_C48; continue;;
            C173) STATE=C174; ast_C42; continue;;
            C42) STATE=C175; ast_C48; continue;;
            C175) ast_C48; continue;;
            C43) STATE=C176; ast_C39; continue;;
            C44) STATE=C177; ast_C39; continue;;
            C178) STATE=C177; ast_C39; continue;;
            C49) STATE=C179; ast_C40; continue;;
            C50) STATE=C180; ast_C40; continue;;
            C51) STATE=C181; ast_C40; continue;;
            C52) STATE=C182; ast_C40; continue;;
            C53) STATE=C183; ast_C40; continue;;
            C54) STATE=C184; ast_C40; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C55) ast_C40; continue;;
            C56) STATE=C57; ast_C44; continue;;
            C58) STATE=C59; ast_C39; continue;;
            C60) STATE=C185; ast_C48; continue;;
            C61) STATE=C186; ast_C48; continue;;
            C64) ast_C40; continue;;
            C66) ast_C40; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C177|C90|Cz|C93|C2|C99|C101|C185|C186|C187|C188|C94) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;

        '')
            case $STATE in
            C67|C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cc|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C3|C99|C101|C107|C115|C21|C142|C147|C156|C159|C161|C35|C36|C37|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            C55) ast_close; continue;;
            C39) ast_close; continue;;
            Ca) break;;
            *) _pars_err_eof;;
            esac;;

        *)
            case $STATE in
            Cb) STATE=C67; ast_Cc; continue;;
            C67) ast_Cb; continue;;
            Cc)
                ast_more; MATCH="${CODE%%[!a-zA-Z0-9_]*}"
                _ucase "$MATCH"
                case "$REPLY" in
                'WHILE') STATE=C68; ast_C28; ast_skip_match; continue;;
                *) ast_consume_match
                    ast_C48; ast_close; STATE=C68; continue;;
                esac;;
            C3) STATE=C98; ast_C37; continue;;
            C137) STATE=C138; ast_Cc; continue;;
            C139) STATE=C138; ast_Cc; continue;;
            C142) STATE=C143; ast_Cc; continue;;
            C147) STATE=C148; ast_Cc; continue;;
            C30) STATE=C149; ast_Cc; continue;;
            C156) STATE=C157; ast_Cc; continue;;
            C159) STATE=C160; ast_Cc; continue;;
            C161) STATE=C162; ast_Cc; continue;;
            C36) STATE=C167; ast_C37; continue;;
            C37) STATE=C169; ast_Cc; continue;;
            C169) STATE=C170; ast_C37; continue;;
            Ca) STATE=Ca; ast_Cb; continue;;
            C68|C88|C91|C92|C97|C104|C108|C109|C111|C116|C117|C119|C123|C127|C129|C131|C138|C168|C170|C172|C175|C177|Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs|Ct|Cu|Cv|Cw|Cx|C90|Cz|C93|C2|C99|C101|C107|C115|C21|C35|C40|C42|C49|C50|C51|C52|C53|C54|C185|C186|C187|C188|C94|C105) ast_close_col_xc;;
            C69|C70|C71|C72|C73|C74|C75|C76|C77|C78|C79|C80|C81|C82|C83|C84|C85|C86|C87|C89|C96|C98|C100|C102|C110|C112|C113|C114|C122|C126|C143|C148|C157|C160|C162|C166|C167|C179|C180|C181|C182|C183|C184) ast_close_xc;;
            *) _pars_err;;
            esac;;
        esac
    done

    ast_out
}

# --- modules/c89/unast.sh ---


# --- Emitter (AST to source reconstruction) ---

_c89_unast_emit () {
    local _n=$1 _t _v _r _ch
    IFS=' '; eval "set -- \$X$_n"; IFS=''
    _t=$1; shift
    eval "_v=\"\${V$_n:-}\""

    case "$_t" in
    Ca) _r=
        for _ch in "$@"; do
            case "$_r" in ?*) _r="$_r$_EOL";; esac
            _c89_unast_emit "$_ch"; _r="$_r$REPLY"
        done; REPLY="$_r";;
    Cb) _c89_unast_emit "$1"; _r="$REPLY"
        shift 1
        _si=1
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r} $REPLY"; shift;; esac
        REPLY="${_r}";;
    Cc) case $# in 0) REPLY="$_v";; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    Cd) _c89_unast_emit "$1"; REPLY="int ${REPLY}";;
    Ce) _c89_unast_emit "$1"; REPLY="char ${REPLY}";;
    Cf) _c89_unast_emit "$1"; REPLY="void ${REPLY}";;
    Cg) _c89_unast_emit "$1"; REPLY="long ${REPLY}";;
    Ch) _c89_unast_emit "$1"; REPLY="short ${REPLY}";;
    Ci) _c89_unast_emit "$1"; REPLY="float ${REPLY}";;
    Cj) _c89_unast_emit "$1"; REPLY="double ${REPLY}";;
    Ck) _c89_unast_emit "$1"; REPLY="signed ${REPLY}";;
    Cl) _c89_unast_emit "$1"; REPLY="unsigned ${REPLY}";;
    Cm) _c89_unast_emit "$1"; REPLY="const ${REPLY}";;
    Cn) _c89_unast_emit "$1"; REPLY="static ${REPLY}";;
    Co) _c89_unast_emit "$1"; REPLY="extern ${REPLY}";;
    Cp) _c89_unast_emit "$1"; REPLY="volatile ${REPLY}";;
    Cq) _c89_unast_emit "$1"; REPLY="auto ${REPLY}";;
    Cr) _c89_unast_emit "$1"; REPLY="register ${REPLY}";;
    Cs) _c89_unast_emit "$1"; REPLY="typedef ${REPLY}";;
    Ct) _c89_unast_emit "$1"; REPLY="struct ${REPLY}";;
    Cu) _c89_unast_emit "$1"; REPLY="union ${REPLY}";;
    Cv) _c89_unast_emit "$1"; REPLY="enum ${REPLY}";;
    Cw) case $# in 0) case "$_v" in ?*) REPLY="$_v";; *) REPLY=";";; esac;; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    Cx) _c89_unast_emit "$1"; REPLY="*${REPLY}";;
    Cy) _c89_unast_emit "$1"; _r="$REPLY"
        _c89_unast_emit "$2"; REPLY="${_r} ${REPLY}";;
    Cz) case $# in 0) case "$_v" in ?*) REPLY="$_v";; *) REPLY=";";; esac;; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C1) _r="("
        while test $# -gt 1; do
            case "$_r" in "(") ;; *) _r="$_r,";; esac
            _c89_unast_emit "$1"; _r="$_r$REPLY"; shift
        done
        _r="$_r)"
        _c89_unast_emit "$1"; REPLY="$_r${REPLY}";;
    C2) case $# in 0) REPLY="$_v";; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C3) _c89_unast_emit "$1"; REPLY="{${REPLY}";;
    C4) _r="["
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r}$REPLY"; shift;; esac
        _si=1
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r}]$REPLY"; shift;; esac
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r} $REPLY"; shift;; esac
        REPLY="${_r}";;
    C5) _c89_unast_emit "$1"; _r="=$REPLY"
        _c89_unast_emit "$2"; REPLY="${_r} ${REPLY}";;
    C6) _r=""
        for _ch in "$@"; do
            case "$_r" in "") ;; *) _r="$_r,";; esac
            _c89_unast_emit "$_ch"; _r="$_r$REPLY"
        done; REPLY="$_r;";;
    C7) _r=""
        while test $# -gt 3; do
            case "$_r" in "") ;; *) _r="$_r ";; esac
            _c89_unast_emit "$1"; _r="$_r$REPLY"; shift
        done
        _c89_unast_emit "$1"; REPLY="$_r${REPLY}";;
    C8) _c89_unast_emit "$1"; _r="$REPLY"
        _c89_unast_emit "$2"; REPLY="${_r} ${REPLY}";;
    C9) case $# in 0) REPLY="$_v";; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C10) _c89_unast_emit "$1"; REPLY="*${REPLY}";;
    C11) case $# in 0) REPLY="$_v";; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C12) _c89_unast_emit "$1"; REPLY="struct ${REPLY}";;
    C13) _c89_unast_emit "$1"; REPLY="union ${REPLY}";;
    C14) _c89_unast_emit "$1"; REPLY="enum ${REPLY}";;
    C15) _c89_unast_emit "$1"; _r="$REPLY"
        _c89_unast_emit "$2"; REPLY="${_r} ${REPLY}";;
    C16) case $# in 0) REPLY="$_v";; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C17) case $# in 0) REPLY="$_v";; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C18) case $# in 0) REPLY="$_v";; *) _c89_unast_emit "$1";; esac;;
    C19) _r=""
        for _ch in "$@"; do
            case "$_r" in "") ;; *) _r="$_r,";; esac
            _c89_unast_emit "$_ch"; _r="$_r$REPLY"
        done; REPLY="$_r";;
    C20) _c89_unast_emit "$1"; _r="$REPLY"
        shift 1
        _si=1
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r} = $REPLY"; shift;; esac
        REPLY="${_r}";;
    C21) case $# in 0) REPLY="$_v";; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C22) _r="{"
        for _ch in "$@"; do
            case "$_r" in "{") ;; *) _r="$_r,";; esac
            _c89_unast_emit "$_ch"; _r="$_r$REPLY"
        done; REPLY="$_r,}";;
    C23) case $# in 0) REPLY="return ;";; *) _c89_unast_emit "$1"; REPLY="return ${REPLY};";; esac;;
    C24) REPLY="break;";;
    C25) REPLY="continue;";;
    C26) _c89_unast_emit "$1"; REPLY="goto ${REPLY};";;
    C27) _c89_unast_emit "$1"; _r="if($REPLY"
        _c89_unast_emit "$2"; _r="${_r})$REPLY"
        shift 2
        _si=2
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r} else $REPLY"; shift;; esac
        REPLY="${_r}";;
    C28) _c89_unast_emit "$1"; _r="while($REPLY"
        _c89_unast_emit "$2"; REPLY="${_r})${REPLY}";;
    C29) _r="for("
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r}$REPLY"; shift;; esac
        _si=1
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r};$REPLY"; shift;; esac
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r};$REPLY"; shift;; esac
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r})$REPLY"; shift;; esac
        case $# in 0) ;; *) _c89_unast_emit "$1"; _r="${_r} $REPLY"; shift;; esac
        REPLY="${_r}";;
    C30) _c89_unast_emit "$1"; _r="do $REPLY"
        _c89_unast_emit "$2"; REPLY="${_r} while(${REPLY});";;
    C31) _c89_unast_emit "$1"; _r="switch($REPLY"
        _c89_unast_emit "$2"; REPLY="${_r})${REPLY}";;
    C32) _c89_unast_emit "$1"; _r="case $REPLY"
        _c89_unast_emit "$2"; REPLY="${_r}: ${REPLY}";;
    C33) _c89_unast_emit "$1"; REPLY="default:${REPLY}";;
    C34) _c89_unast_emit "$1"; REPLY="sizeof(${REPLY});";;
    C35) _c89_unast_emit "$1"; REPLY="#${REPLY}";;
    C36) _c89_unast_emit "$1"; REPLY="{${REPLY}";;
    C37) case $# in 0) case "$_v" in ?*) REPLY="$_v";; *) REPLY="}";; esac;; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C38) _c89_unast_emit "$1"; REPLY="${REPLY};";;
    C39) case $# in 0) REPLY="$_v";; *) _c89_unast_emit "$1";; esac;;
    C40) case $# in 0) REPLY="$_v";; 1) _c89_unast_emit "$1";; *) _r=; for _ch in "$@"; do _c89_unast_emit "$_ch"; _r="$_r$REPLY"; done; REPLY="$_r";; esac;;
    C41) _c89_unast_emit "$1"; REPLY="sizeof(${REPLY})";;
    C42) _r=""
        for _ch in "$@"; do
            case "$_r" in "") ;; *) _r="$_r ";; esac
            _c89_unast_emit "$_ch"; _r="$_r$REPLY"
        done; REPLY="$_r";;
    C43) _c89_unast_emit "$1"; REPLY="(${REPLY})";;
    C44) _r=""
        for _ch in "$@"; do
            case "$_r" in "") ;; *) _r="$_r,";; esac
            _c89_unast_emit "$_ch"; _r="$_r$REPLY"
        done; REPLY="$_r";;
    C45) REPLY="\"$_v\"";;
    C46) REPLY="'$_v'";;
    C47) REPLY="$_v";;
    C48) REPLY="$_v";;
    C49) _c89_unast_emit "$1"; REPLY="-${REPLY}";;
    C50) _c89_unast_emit "$1"; REPLY="!${REPLY}";;
    C51) _c89_unast_emit "$1"; REPLY="~${REPLY}";;
    C52) _c89_unast_emit "$1"; REPLY="*${REPLY}";;
    C53) _c89_unast_emit "$1"; REPLY="&${REPLY}";;
    C54) _c89_unast_emit "$1"; REPLY="++${REPLY}";;
    C55) _c89_unast_emit "$1"; _r="$REPLY"
        _c89_unast_emit "$2"; REPLY="$_r$_v$REPLY";;
    C56) _c89_unast_emit "$1"; _r="$REPLY("; shift
        local _sep=
        for _ch in "$@"; do
            case "$_sep" in ?*) _r="$_r, ";; esac
            _c89_unast_emit "$_ch"; _r="$_r$REPLY"; _sep=1
        done; REPLY="$_r)";;
    C58) _c89_unast_emit "$1"; _r="$REPLY["; shift
        local _sep=
        for _ch in "$@"; do
            case "$_sep" in ?*) _r="$_r, ";; esac
            _c89_unast_emit "$_ch"; _r="$_r$REPLY"; _sep=1
        done; REPLY="$_r]";;
    C60) _c89_unast_emit "$1"; _r="$REPLY."
        _c89_unast_emit "$2"; REPLY="$_r$REPLY";;
    C61) _c89_unast_emit "$1"; _r="$REPLY->"
        _c89_unast_emit "$2"; REPLY="$_r$REPLY";;
    C62) _c89_unast_emit "$1"; REPLY="$REPLY++";;
    C63) _c89_unast_emit "$1"; REPLY="$REPLY--";;
    C64) _c89_unast_emit "$1"; _r="$REPLY?"
        _c89_unast_emit "$2"; _r="$_r$REPLY:"
        _c89_unast_emit "$3"; REPLY="$_r$REPLY";;
    *) REPLY="??${_t}??";;
    esac
}

_c89_unast_emit_root () { _c89_unast_emit "$@"; }

c89_unast () {
    _readall; eval "$REPLY"
    _c89_unast_emit_root 0
    _printr1 "$REPLY"
}

# --- modules/tool/c89cc.sh ---
# ============================================================
# C89 Compiler: AST → x86-64 ELF64 binary
# ============================================================
# Usage: printf '%s' 'int main(){return 42;}' | sh gen/c89.sh | sh gen/c89cc.sh > a.out
#        chmod +x a.out && ./a.out; echo $?
#
# Reads AST (V*/X* variable assignments) from stdin.
# Outputs a Linux x86-64 ELF64 executable to stdout.


# ============================================================
# Pure-shell number/character conversion (no printf, no PATH)
# ============================================================

# Decimal (0-255) → 2-char uppercase hex. Result in REPLY.
_tool_c89cc_d2h () {
    local _hi=$(($1 / 16)) _lo=$(($1 % 16)) _hc _lc
    case $_hi in 0) _hc=0;; 1) _hc=1;; 2) _hc=2;; 3) _hc=3;;
    4) _hc=4;; 5) _hc=5;; 6) _hc=6;; 7) _hc=7;; 8) _hc=8;;
    9) _hc=9;; 10) _hc=A;; 11) _hc=B;; 12) _hc=C;;
    13) _hc=D;; 14) _hc=E;; 15) _hc=F;; esac
    case $_lo in 0) _lc=0;; 1) _lc=1;; 2) _lc=2;; 3) _lc=3;;
    4) _lc=4;; 5) _lc=5;; 6) _lc=6;; 7) _lc=7;; 8) _lc=8;;
    9) _lc=9;; 10) _lc=A;; 11) _lc=B;; 12) _lc=C;;
    13) _lc=D;; 14) _lc=E;; 15) _lc=F;; esac
    REPLY="$_hc$_lc"
}

# Character → decimal ASCII value. Result in REPLY.
_tool_c89cc_c2d () {
    case "$1" in
    ' ') REPLY=32;; '!') REPLY=33;; '"') REPLY=34;; '#') REPLY=35;;
    '$') REPLY=36;; '%') REPLY=37;; '&') REPLY=38;; "'") REPLY=39;;
    '(') REPLY=40;; ')') REPLY=41;; '*') REPLY=42;; '+') REPLY=43;;
    ',') REPLY=44;; '-') REPLY=45;; '.') REPLY=46;; '/') REPLY=47;;
    0) REPLY=48;; 1) REPLY=49;; 2) REPLY=50;; 3) REPLY=51;;
    4) REPLY=52;; 5) REPLY=53;; 6) REPLY=54;; 7) REPLY=55;;
    8) REPLY=56;; 9) REPLY=57;; ':') REPLY=58;; ';') REPLY=59;;
    '<') REPLY=60;; '=') REPLY=61;; '>') REPLY=62;; '?') REPLY=63;;
    '@') REPLY=64;;
    A) REPLY=65;; B) REPLY=66;; C) REPLY=67;; D) REPLY=68;;
    E) REPLY=69;; F) REPLY=70;; G) REPLY=71;; H) REPLY=72;;
    I) REPLY=73;; J) REPLY=74;; K) REPLY=75;; L) REPLY=76;;
    M) REPLY=77;; N) REPLY=78;; O) REPLY=79;; P) REPLY=80;;
    Q) REPLY=81;; R) REPLY=82;; S) REPLY=83;; T) REPLY=84;;
    U) REPLY=85;; V) REPLY=86;; W) REPLY=87;; X) REPLY=88;;
    Y) REPLY=89;; Z) REPLY=90;; '[') REPLY=91;; '\') REPLY=92;;
    ']') REPLY=93;; '^') REPLY=94;; '_') REPLY=95;; '`') REPLY=96;;
    a) REPLY=97;; b) REPLY=98;; c) REPLY=99;; d) REPLY=100;;
    e) REPLY=101;; f) REPLY=102;; g) REPLY=103;; h) REPLY=104;;
    i) REPLY=105;; j) REPLY=106;; k) REPLY=107;; l) REPLY=108;;
    m) REPLY=109;; n) REPLY=110;; o) REPLY=111;; p) REPLY=112;;
    q) REPLY=113;; r) REPLY=114;; s) REPLY=115;; t) REPLY=116;;
    u) REPLY=117;; v) REPLY=118;; w) REPLY=119;; x) REPLY=120;;
    y) REPLY=121;; z) REPLY=122;; '{') REPLY=123;; '|') REPLY=124;;
    '}') REPLY=125;; '~') REPLY=126;; *) REPLY=63;; # unknown → '?'
    esac
}

# Decimal → raw byte to stdout (uses fastest available output primitive)
if command -v printf >/dev/null 2>&1; then
    _out_byte () { printf "\\$(($1/64))$((($1/8)%8))$(($1%8))"; }
elif command -v print >/dev/null 2>&1; then
    _out_byte () { print -n "\\0$(($1/64))$((($1/8)%8))$(($1%8))"; }
else
    _out_byte () { command -p printf "\\$(($1/64))$((($1/8)%8))$(($1%8))"; }
fi

# Emit a single hex byte from a decimal value
_tool_c89cc_emit_d () { _tool_c89cc_d2h "$1"; _tool_c89cc_emit "$REPLY"; }

# Emit a stack-offset from rbp. Uses 1-byte disp8 for off<=127, 4-byte disp32 otherwise.
# Caller must use the right opcode: 45/85 for mov, 45/85 for lea (ModRM byte differs).
# This function is called AFTER the opcode+ModRM byte is emitted.
_tool_c89cc_emit_off () {
    if test $1 -le 127; then
        _tool_c89cc_d2h $(( 256 - $1 ))
        _tool_c89cc_emit "$REPLY"
    else
        _tool_c89cc_emit_le32 $(( 0 - $1 ))
    fi
}

# Emit mov rax, [rbp-off]
_tool_c89cc_load_local () {
    if test $1 -le 127; then _tool_c89cc_emit "48 8B 45"
    else _tool_c89cc_emit "48 8B 85"; fi
    _tool_c89cc_emit_off $1
}
# Emit mov [rbp-off], rax
_tool_c89cc_store_local () {
    if test $1 -le 127; then _tool_c89cc_emit "48 89 45"
    else _tool_c89cc_emit "48 89 85"; fi
    _tool_c89cc_emit_off $1
}
# Emit lea rax, [rbp-off]
_tool_c89cc_lea_local () {
    if test $1 -le 127; then _tool_c89cc_emit "48 8D 45"
    else _tool_c89cc_emit "48 8D 85"; fi
    _tool_c89cc_emit_off $1
}

# ============================================================
# Code Buffer
# ============================================================
# Code is stored as per-byte variables: _CB_0, _CB_1, ...
# Each holds a 2-char hex string (e.g., "E8", "FF").
# _IP tracks the current offset (in bytes).
_IP=0

# Append hex bytes to the code buffer. Args: hex pairs (e.g., "48 89 E5")
_tool_c89cc_emit () {
    for _b in $1; do
        eval "_CB_$_IP=\$_b"
        _IP=$((_IP + 1))
    done
}

# Read a byte from the code buffer at offset $1. Result in REPLY.
_tool_c89cc_byte () { eval "REPLY=\$_CB_$1"; }

# Emit a 32-bit little-endian immediate value
_tool_c89cc_emit_le32 () {
    local _v=$1
    _tool_c89cc_emit_d $(( _v & 255 ))
    _tool_c89cc_emit_d $(( (_v >> 8) & 255 ))
    _tool_c89cc_emit_d $(( (_v >> 16) & 255 ))
    _tool_c89cc_emit_d $(( (_v >> 24) & 255 ))
}

# Emit a 64-bit little-endian value
_tool_c89cc_emit_le64 () {
    _tool_c89cc_emit_le32 "$1"
    _tool_c89cc_emit_le32 0
}

# ============================================================
# Labels and Relocations
# ============================================================
_LABELS=       # space-separated "name=offset" pairs
_RELOCS=       # space-separated "offset=name" pairs (rel32 fixups)
_JMP_N=0       # jump label counter
_BRK_LBL=      # current break target label (loop/switch exit)
_CONT_LBL=     # current continue target label (loop top)
_SW_OFF=        # current switch value stack offset (for case comparisons)

_tool_c89cc_label () {
    _LABELS="$_LABELS $1=$_IP"
}

# Emit a rel32 placeholder and record relocation
_tool_c89cc_reloc_rel32 () {
    _RELOCS="$_RELOCS ${_IP}=$1"
    _tool_c89cc_emit "00 00 00 00"    # placeholder
}

# Allocate a jump label name. Returns name in REPLY.
_tool_c89cc_jmp_label () {
    _JMP_N=$((_JMP_N + 1))
    REPLY=".LJ$_JMP_N"
}

# Emit a conditional jump (6 bytes: 0F 8x rel32) with auto-label.
# $1 = condition code (84=je, 85=jne, 8C=jl, 8F=jg, 8E=jle, 8D=jge)
# Returns: label name in REPLY (to be defined later at target)
_tool_c89cc_emit_jcc () {
    _tool_c89cc_jmp_label
    local _jlbl=$REPLY
    _tool_c89cc_emit "0F $1"
    _RELOCS="$_RELOCS J${_IP}=$_jlbl"
    _tool_c89cc_emit "00 00 00 00"
    REPLY=$_jlbl
}

# Emit an unconditional jump (5 bytes: E9 rel32) with auto-label.
_tool_c89cc_emit_jmp () {
    _tool_c89cc_jmp_label
    local _jlbl=$REPLY
    _tool_c89cc_emit "E9"
    _RELOCS="$_RELOCS J${_IP}=$_jlbl"
    _tool_c89cc_emit "00 00 00 00"
    REPLY=$_jlbl
}

# Define a jump label at current position
_tool_c89cc_jmp_target () {
    _tool_c89cc_label "$1"
}

# Resolve all relocations after code generation
_tool_c89cc_fixup () {
    # Calculate data section addresses for string/global fixups
    local _str_base_addr=$(( _BASE_ADDR + _HDR_SIZE + _IP ))
    local _str_size=$(( ${#_STR_DATA} / 2 ))
    local _glob_base_addr=$(( _str_base_addr + _str_size ))

    for _rel in $_RELOCS; do
        local _src="${_rel%%=*}" _tgt_name="${_rel#*=}"

        # String address relocation: S<offset>=STR<id>
        case "$_src" in S*)
            local _soff=${_src#S}
            local _str_id=${_tgt_name#STR}
            eval "local _sdataoff=\$_STR_OFF_$_str_id"
            # sdataoff is hex char offset, convert to byte offset
            local _sbyte=$(( _sdataoff / 2 ))
            local _addr=$(( _str_base_addr + _sbyte ))
            _tool_c89cc_patch_le64 $_soff $_addr
            continue;; esac

        # Global address relocation: G<offset>=GLOB<data_off>
        case "$_src" in G*)
            local _goff=${_src#G}
            local _gdataoff=${_tgt_name#GLOB}
            local _addr=$(( _glob_base_addr + _gdataoff ))
            _tool_c89cc_patch_le64 $_goff $_addr
            continue;; esac

        # Jump relocation: J<offset>=<label>
        case "$_src" in J*)
            local _jsrc=${_src#J}
            local _jtgt_off=
            for _lbl in $_LABELS; do
                case "$_lbl" in "${_tgt_name}="*)
                    _jtgt_off="${_lbl#*=}"; break;; esac
            done
            case "$_jtgt_off" in ?*)
                local _jdisp=$(( _jtgt_off - (_jsrc + 4) ))
                _tool_c89cc_patch_le32 $_jsrc $_jdisp;; esac
            continue;; esac

        # Regular rel32 relocation (call)
        local _tgt_off=
        for _lbl in $_LABELS; do
            case "$_lbl" in "${_tgt_name}="*)
                _tgt_off="${_lbl#*=}"; break;; esac
        done
        case "$_tgt_off" in '') continue;; esac
        local _disp=$(( _tgt_off - (_src + 4) ))
        _tool_c89cc_patch_le32 $_src $_disp
    done
}

# Patch 8 bytes (64-bit address) at offset in code buffer
_tool_c89cc_patch_le64 () {
    local _off=$1 _v=$2 _i=0
    while test $_i -lt 8; do
        _tool_c89cc_d2h $(( _v % 256 ))
        eval "_CB_$((_off + _i))=\$REPLY"
        _v=$(( _v / 256 ))
        _i=$((_i + 1))
    done
}

# Patch 4 bytes at offset in code buffer
_tool_c89cc_patch_le32 () {
    local _off=$1 _v=$2
    _tool_c89cc_d2h $(( _v & 255 )); eval "_CB_$_off=\$REPLY"
    _tool_c89cc_d2h $(( (_v >> 8) & 255 )); eval "_CB_$((_off+1))=\$REPLY"
    _tool_c89cc_d2h $(( (_v >> 16) & 255 )); eval "_CB_$((_off+2))=\$REPLY"
    _tool_c89cc_d2h $(( (_v >> 24) & 255 )); eval "_CB_$((_off+3))=\$REPLY"
}

# ============================================================
# Symbol Table
# ============================================================
_SYM_N=0       # number of symbols
_SCOPE=0       # current scope depth
_FRAME_SIZE=0  # current function's stack frame size

# Add a symbol: name, kind, offset, elem_size (for pointer subscript scale)
_tool_c89cc_sym_add () {
    _SYM_N=$((_SYM_N + 1))
    eval "_SYM_NAME_$_SYM_N=\"\$1\""
    eval "_SYM_KIND_$_SYM_N=\"\$2\""     # func, local, global, param
    eval "_SYM_SCOPE_$_SYM_N=$_SCOPE"
    eval "_SYM_OFF_$_SYM_N=\$3"          # stack offset or 0
    eval "_SYM_ESIZE_$_SYM_N=\${4:-8}"  # element size for subscript (default 8)
}

# Look up symbol by name (searches current scope outward)
# Returns: "kind offset esize"
_tool_c89cc_sym_find () {
    local _i=$_SYM_N _n
    while test $_i -gt 0; do
        eval "_n=\"\$_SYM_NAME_$_i\""
        case "$_n" in "$1")
            eval "REPLY=\"\$_SYM_KIND_$_i \$_SYM_OFF_$_i \$_SYM_ESIZE_$_i\""
            return 0;; esac
        _i=$((_i - 1))
    done
    REPLY=
    return 1
}

# Allocate a local variable on the stack. Returns offset.
_tool_c89cc_alloc_local () {
    _FRAME_SIZE=$((_FRAME_SIZE + 8))
    REPLY=$_FRAME_SIZE
}

# Resolve element size for a pointer expression node.
# Walks AST to find the base variable and returns its esize in REPLY.
# Used by the * dereference handler to decide byte vs qword load.
_tool_c89cc_resolve_esize () {
    local _re_n=$1 _re_t
    _tool_c89cc_type "$_re_n"; _re_t=$REPLY
    case "$_re_t" in
    C39) # expr — delegate to child
        _tool_c89cc_children "$_re_n"
        _tool_c89cc_resolve_esize "$REPLY";;
    C48) # ident — look up symbol esize
        _tool_c89cc_val "$_re_n"
        case "$REPLY" in [a-zA-Z_]*)
            if _tool_c89cc_sym_find "$REPLY"; then
                local _re_rest="$REPLY"
                _re_rest="${_re_rest#* }"; _re_rest="${_re_rest#* }"
                REPLY="${_re_rest%% *}"; return
            fi;; esac
        REPLY=8;;
    C53) # unary & — esize of the operand variable
        _tool_c89cc_children "$_re_n"
        _tool_c89cc_resolve_esize "$REPLY";;
    C55) # binary op (e.g., ptr + n) — esize of LHS
        _tool_c89cc_children "$_re_n"
        _tool_c89cc_resolve_esize "${REPLY%% *}";;
    C43) # paren_expr — delegate to child
        _tool_c89cc_children "$_re_n"
        _tool_c89cc_resolve_esize "$REPLY";;
    C58) # subscript a[i] — esize of base variable's element type
        _tool_c89cc_children "$_re_n"
        _tool_c89cc_resolve_esize "${REPLY%% *}";;
    *) REPLY=8;;
    esac
}

# ============================================================
# Global Variables
# ============================================================
_GLOB_N=0        # number of globals
_GLOB_DATA=      # hex bytes for .data section

_tool_c89cc_glob_add () {
    _GLOB_N=$((_GLOB_N + 1))
    eval "_GLOB_NAME_$_GLOB_N=\"\$1\""
    eval "_GLOB_SIZE_$_GLOB_N=\$2"
    # Allocate in data section (offset from data start)
    local _doff=0 _i=1
    while test $_i -lt $_GLOB_N; do
        eval "_doff=\$((_doff + \$_GLOB_SIZE_$_i))"
        _i=$((_i + 1))
    done
    eval "_GLOB_OFF_$_GLOB_N=$_doff"
    _tool_c89cc_sym_add "$1" "global" "$_doff" "${3:-8}"
    # Zero-fill in data section
    local _j=0
    while test $_j -lt $2; do _GLOB_DATA="${_GLOB_DATA}00"; _j=$((_j + 1)); done
}

# Look up global by name → offset in data section
_tool_c89cc_glob_find () {
    local _i=1
    while test $_i -le $_GLOB_N; do
        eval "case \"\$_GLOB_NAME_$_i\" in \"\$1\") eval \"REPLY=\\\$_GLOB_OFF_$_i\"; return 0;; esac"
        _i=$((_i + 1))
    done
    return 1
}

# ============================================================
# Struct Type Registry
# ============================================================
_STRUCT_N=0

# Register a struct: name, field_count, field_names, field_sizes
_tool_c89cc_struct_def () {
    _STRUCT_N=$((_STRUCT_N + 1))
    eval "_STRUCT_NAME_$_STRUCT_N=\"\$1\""
    eval "_STRUCT_NFIELDS_$_STRUCT_N=0"
}

# Add field to last defined struct
_tool_c89cc_struct_field () {
    local _si=$_STRUCT_N _nf
    eval "_nf=\$_STRUCT_NFIELDS_$_si"
    _nf=$((_nf + 1))
    eval "_STRUCT_NFIELDS_$_si=$_nf"
    eval "_STRUCT_FNAME_${_si}_${_nf}=\"\$1\""
    eval "_STRUCT_FSIZE_${_si}_${_nf}=\$2"
}

# Look up struct field offset by struct name + field name
_tool_c89cc_struct_field_off () {
    local _sname=$1 _fname=$2 _i=1
    while test $_i -le $_STRUCT_N; do
        eval "local _sn=\"\$_STRUCT_NAME_$_i\""
        case "$_sn" in "$_sname")
            local _j=1 _off=0 _nf
            eval "_nf=\$_STRUCT_NFIELDS_$_i"
            while test $_j -le $_nf; do
                eval "local _fn=\"\$_STRUCT_FNAME_${_i}_${_j}\""
                case "$_fn" in "$_fname") REPLY=$_off; return 0;; esac
                eval "local _fs=\$_STRUCT_FSIZE_${_i}_${_j}"
                # Align to 8 bytes
                _off=$(( (_off + _fs + 7) & -8 ))
                _j=$((_j + 1))
            done
            REPLY=$_off; return 1;;  # field not found
        esac
        _i=$((_i + 1))
    done
    return 1
}

# ============================================================
# String Literals
# ============================================================
_STR_N=0
_STR_DATA=

_tool_c89cc_add_string () {
    _STR_N=$((_STR_N + 1))
    eval "_STR_OFF_$_STR_N=${#_STR_DATA}"
    # Convert string to hex bytes, add null terminator
    local _s="$1" _c
    while test ${#_s} -gt 0; do
        _c="${_s%"${_s#?}"}"; _s="${_s#?}"
        case "$_c" in
        '\') # escape sequence
            _c="${_s%"${_s#?}"}"; _s="${_s#?}"
            case "$_c" in
            n) _STR_DATA="${_STR_DATA}0A";;
            t) _STR_DATA="${_STR_DATA}09";;
            r) _STR_DATA="${_STR_DATA}0D";;
            0) _STR_DATA="${_STR_DATA}00";;
            '\') _STR_DATA="${_STR_DATA}5C";;
            '"') _STR_DATA="${_STR_DATA}22";;
            *) _tool_c89cc_c2d "$_c"; _tool_c89cc_d2h "$REPLY"; _STR_DATA="${_STR_DATA}$REPLY";;
            esac;;
        *) _tool_c89cc_c2d "$_c"; _tool_c89cc_d2h "$REPLY"; _STR_DATA="${_STR_DATA}$REPLY";;
        esac
    done
    _STR_DATA="${_STR_DATA}00"  # null terminator
    REPLY=$_STR_N
}

# ============================================================
# AST Walker
# ============================================================

# Get node type code (first word of X<n>)
_tool_c89cc_type () { eval "REPLY=\"\${X$1%% *}\""; }

# Get node value
_tool_c89cc_val () { eval "REPLY=\"\${V$1:-}\""; }

# Get node children (everything after type code)
_tool_c89cc_children () {
    eval "local _x=\"\$X$1\""
    REPLY="${_x#* }"
    case "$REPLY" in "$_x") REPLY=;; esac  # no children
}

# Main recursive AST walker
_tool_c89cc_node () {
    local _n=$1 _t _v
    _tool_c89cc_type "$_n"; _t=$REPLY
    _tool_c89cc_val "$_n"; _v=$REPLY

    case "$_t" in
    Ca) # Document root: process all children
        _tool_c89cc_children "$_n"; local _ca_chs="$REPLY"
        for _ch in $_ca_chs; do _tool_c89cc_node "$_ch"; done;;

    Cb) # file_body: process children
        _tool_c89cc_children "$_n"; local _cb_chs="$REPLY"
        for _ch in $_cb_chs; do _tool_c89cc_node "$_ch"; done;;

    Cd|Ce|Cf|Cg|Ch|Ci|Cj|Ck|Cl|Cm|Cn|Co|Cp|Cq|Cr|Cs) # type_item (int, char, void, ...)
        _tool_c89cc_children "$_n"; local _dt_chs="$REPLY"
        for _ch in $_dt_chs; do _tool_c89cc_decl "$_t" "$_ch"; done;;

    Ct|Cu) # struct/union item
        _tool_c89cc_children "$_n"
        for _ch in $REPLY; do _tool_c89cc_decl "$_t" "$_ch"; done;;

    C38) # expr_item: compile expression, discard result
        _tool_c89cc_children "$_n"; local _ei_chs="$REPLY"
        for _ch in $_ei_chs; do _tool_c89cc_expr "$_ch"; done;;

    C23) # return_item
        _tool_c89cc_children "$_n"
        case "$REPLY" in
        ?*) _tool_c89cc_expr "$REPLY";;    # return expr → result in rax
        *) ;;                       # bare return
        esac
        # Epilogue: leave + ret
        _tool_c89cc_emit "C9"               # leave
        _tool_c89cc_emit "C3";;             # ret

    C24) # break_item — jump to break label
        case "$_BRK_LBL" in ?*)
            _tool_c89cc_emit "E9"
            _RELOCS="$_RELOCS J${_IP}=$_BRK_LBL"
            _tool_c89cc_emit "00 00 00 00";; esac;;
    C25) # continue_item — jump to continue label
        case "$_CONT_LBL" in ?*)
            _tool_c89cc_emit "E9"
            _RELOCS="$_RELOCS J${_IP}=$_CONT_LBL"
            _tool_c89cc_emit "00 00 00 00";; esac;;

    C27) # if_item: if(expr) item [else item]
        _tool_c89cc_children "$_n"; local _if_chs="$REPLY"
        set -- $_if_chs
        local _if_cond="$1" _if_then="$2" _if_else="${3:-}"
        _tool_c89cc_expr "$_if_cond"
        _tool_c89cc_emit "48 85 C0"          # test rax, rax
        _tool_c89cc_emit_jcc "84"; local _else_lbl=$REPLY  # je else/end
        _tool_c89cc_node "$_if_then"
        case "$_if_else" in ?*)
            _tool_c89cc_emit_jmp; local _end_lbl=$REPLY  # jmp end
            _tool_c89cc_jmp_target "$_else_lbl"
            _tool_c89cc_node "$_if_else"
            _tool_c89cc_jmp_target "$_end_lbl";;
        *)
            _tool_c89cc_jmp_target "$_else_lbl";;
        esac;;

    C28) # while_item: while(expr) item
        _tool_c89cc_children "$_n"; local _wh_chs="$REPLY"
        set -- $_wh_chs
        local _wh_cond="$1" _wh_body="$2"
        local _sav_brk=$_BRK_LBL _sav_cont=$_CONT_LBL
        _tool_c89cc_jmp_label; local _wh_top=$REPLY
        _tool_c89cc_jmp_target "$_wh_top"
        _tool_c89cc_expr "$_wh_cond"
        _tool_c89cc_emit "48 85 C0"
        _tool_c89cc_emit_jcc "84"; local _wh_exit=$REPLY
        _BRK_LBL=$_wh_exit; _CONT_LBL=$_wh_top
        _tool_c89cc_node "$_wh_body"
        # Jump back to top
        _tool_c89cc_emit "E9"
        _RELOCS="$_RELOCS J${_IP}=$_wh_top"
        _tool_c89cc_emit "00 00 00 00"
        _tool_c89cc_jmp_target "$_wh_exit"
        _BRK_LBL=$_sav_brk; _CONT_LBL=$_sav_cont;;

    C29) # for_item: for(init;cond;incr) item
        _tool_c89cc_children "$_n"; local _for_chs="$REPLY"
        set -- $_for_chs
        local _for_body _for_init= _for_cond= _for_incr=
        case $# in
        1) _for_body=$1;;
        2) _for_cond=$1; _for_body=$2;;
        3) _for_init=$1; _for_cond=$2; _for_body=$3;;
        4) _for_init=$1; _for_cond=$2; _for_incr=$3; _for_body=$4;;
        esac
        local _sav_brk=$_BRK_LBL _sav_cont=$_CONT_LBL
        case "$_for_init" in ?*) _tool_c89cc_expr "$_for_init";; esac
        _tool_c89cc_jmp_label; local _for_top=$REPLY
        _tool_c89cc_jmp_target "$_for_top"
        local _for_exit_lbl=
        case "$_for_cond" in ?*)
            _tool_c89cc_expr "$_for_cond"
            _tool_c89cc_emit "48 85 C0"
            _tool_c89cc_emit_jcc "84"; _for_exit_lbl=$REPLY;;
        esac
        _tool_c89cc_jmp_label; local _for_cont=$REPLY
        _BRK_LBL=${_for_exit_lbl:-}; _CONT_LBL=$_for_cont
        _tool_c89cc_node "$_for_body"
        _tool_c89cc_jmp_target "$_for_cont"
        case "$_for_incr" in ?*) _tool_c89cc_expr "$_for_incr";; esac
        # Jump back to top
        _tool_c89cc_emit "E9"
        _RELOCS="$_RELOCS J${_IP}=$_for_top"
        _tool_c89cc_emit "00 00 00 00"
        case "$_for_exit_lbl" in ?*) _tool_c89cc_jmp_target "$_for_exit_lbl";; esac
        _BRK_LBL=$_sav_brk; _CONT_LBL=$_sav_cont;;

    C30) # do_item: do item while(expr)
        _tool_c89cc_children "$_n"; local _do_chs="$REPLY"
        set -- $_do_chs
        local _do_body="$1" _do_cond="$2"
        local _sav_brk=$_BRK_LBL _sav_cont=$_CONT_LBL
        _tool_c89cc_jmp_label; local _do_top=$REPLY
        _tool_c89cc_jmp_label; local _do_exit=$REPLY
        _BRK_LBL=$_do_exit; _CONT_LBL=$_do_top
        _tool_c89cc_jmp_target "$_do_top"
        _tool_c89cc_node "$_do_body"
        _tool_c89cc_expr "$_do_cond"
        _tool_c89cc_emit "48 85 C0"
        _tool_c89cc_emit "0F 85"
        _RELOCS="$_RELOCS J${_IP}=$_do_top"
        _tool_c89cc_emit "00 00 00 00"
        _tool_c89cc_jmp_target "$_do_exit"
        _BRK_LBL=$_sav_brk; _CONT_LBL=$_sav_cont;;

    C31) # switch_item: switch(expr) { cases }
        _tool_c89cc_children "$_n"; local _sw_chs="$REPLY"
        set -- $_sw_chs
        local _sw_cond="$1" _sw_body="$2"
        local _sav_brk=$_BRK_LBL _sav_sw=$_SW_OFF
        # Compile condition, save result as a local
        _tool_c89cc_expr "$_sw_cond"
        _tool_c89cc_alloc_local; local _sw_loc=$REPLY
        _SW_OFF=$_sw_loc
        _tool_c89cc_store_local $_sw_loc  # mov [rbp-off], rax
        # Set up break label
        _tool_c89cc_jmp_label; local _sw_end=$REPLY
        _BRK_LBL=$_sw_end
        # Process switch body (case/default labels handled below)
        _tool_c89cc_node "$_sw_body"
        _tool_c89cc_jmp_target "$_sw_end"
        _BRK_LBL=$_sav_brk; _SW_OFF=$_sav_sw;;

    C32) # case_item: case <value>: <statements>
        _tool_c89cc_children "$_n"; local _cs_chs="$REPLY"
        set -- $_cs_chs
        local _cs_val="$1"; shift
        # Compare switch value with case value
        _tool_c89cc_load_local $_SW_OFF  # mov rax, [rbp-sw_off]
        _tool_c89cc_emit "50"                                 # push rax (save switch val)
        _tool_c89cc_expr "$_cs_val"                           # rax = case value
        _tool_c89cc_emit "48 89 C1"                           # mov rcx, rax
        _tool_c89cc_emit "58"                                 # pop rax (switch val)
        _tool_c89cc_emit "48 39 C8"                           # cmp rax, rcx
        _tool_c89cc_emit_jcc "85"; local _cs_skip=$REPLY      # jne → skip
        # Case body: compile remaining children
        for _ch in "$@"; do _tool_c89cc_node "$_ch"; done
        _tool_c89cc_jmp_target "$_cs_skip";;

    C33) # default_item: default: <statements>
        _tool_c89cc_children "$_n"; local _df_chs="$REPLY"
        for _ch in $_df_chs; do _tool_c89cc_node "$_ch"; done;;

    C36) # block_item: { block_body }
        _tool_c89cc_children "$_n"; local _bi_chs="$REPLY"
        for _ch in $_bi_chs; do _tool_c89cc_node "$_ch"; done;;

    C37) # block_body: process children
        _tool_c89cc_children "$_n"; local _bb_chs="$REPLY"
        for _ch in $_bb_chs; do _tool_c89cc_node "$_ch"; done;;

    *) ;; # Unknown node type — skip
    esac
}

# ============================================================
# Declaration Handler
# ============================================================
_tool_c89cc_decl () {
    local _type_code=$1 _child=$2 _t _v
    _tool_c89cc_type "$_child"; _t=$REPLY
    _tool_c89cc_val "$_child"; _v=$REPLY
    # Determine element size from type keyword
    # char/char * → esize=1 (byte element); char ** → esize=8 (pointer elements)
    # Third arg ($3) overrides when passed from Cx recursion — skip recomputation
    local _decl_esize=8
    case "${3+set}" in set) _decl_esize=$3;; *)
        case "$_type_code" in Ce)
            _decl_esize=1
            case "$_t" in Cx)
                _tool_c89cc_children "$_child"
                _tool_c89cc_type "$REPLY"
                case "$REPLY" in Cx) _decl_esize=8;; esac
            ;; esac
        ;; esac
    ;; esac

    case "$_t" in
    Cy) # ident_decl: name + after_name
        _tool_c89cc_children "$_child"
        local _name_node="${REPLY%% *}" _rest="${REPLY#* }"
        _tool_c89cc_val "$_name_node"; local _name=$REPLY

        # Check what follows: func_def or variable
        case "$_rest" in '')
            # Simple declaration (no initializer, no function)
            case "$_SCOPE" in
            0) _tool_c89cc_glob_add "$_name" 8 "$_decl_esize";;     # global
            *) _tool_c89cc_alloc_local; _tool_c89cc_sym_add "$_name" "local" "$REPLY" "$_decl_esize";;
            esac;;
        *)
            _tool_c89cc_type "$_rest"; local _rest_t=$REPLY
            case "$_rest_t" in
            C1) # func_def
                _tool_c89cc_func "$_name" "$_rest";;
            C5) # init_part (= initializer)
                case "$_SCOPE" in
                0) # Global with initializer — TODO: static init
                    _tool_c89cc_glob_add "$_name" 8 "$_decl_esize";;
                *)
                    _tool_c89cc_alloc_local
                    local _off=$REPLY
                    _tool_c89cc_sym_add "$_name" "local" "$_off" "$_decl_esize"
                    # Compile initializer expression
                    _tool_c89cc_children "$_rest"
                    local _init_expr="${REPLY%% *}"
                    _tool_c89cc_expr "$_init_expr"
                    # Store rax to local
                    _tool_c89cc_store_local $_off;;
                esac;;
            Cz) # after_name: could be ; or array or init
                case "$_SCOPE" in
                0) _tool_c89cc_glob_add "$_name" 8 "$_decl_esize";;
                *) _tool_c89cc_alloc_local; _tool_c89cc_sym_add "$_name" "local" "$REPLY" "$_decl_esize";;
                esac;;
            *) # Other (more_decls, etc.)
                case "$_SCOPE" in
                0) _tool_c89cc_glob_add "$_name" 8 "$_decl_esize";;
                *) _tool_c89cc_alloc_local; _tool_c89cc_sym_add "$_name" "local" "$REPLY" "$_decl_esize";;
                esac;;
            esac;;
        esac;;

    Cw) # decl_rest — delegate (pass esize through)
        _tool_c89cc_children "$_child"
        case "$REPLY" in ?*) _tool_c89cc_decl "$_type_code" "$REPLY" "$_decl_esize";; esac;;

    Cx) # ptr_decl — pointer type, delegate to inner (pass esize through)
        _tool_c89cc_children "$_child"
        case "$REPLY" in ?*) _tool_c89cc_decl "$_type_code" "$REPLY" "$_decl_esize";; esac;;

    *) ;; # skip unknown
    esac
}

# Look up field offset by field name.
# Uses struct registry if available, falls back to sequential 8-byte offsets.
_tool_c89cc_field_off () {
    local _fname=$1
    # Check struct registry first
    local _si=1
    while test $_si -le $_STRUCT_N; do
        local _j=1 _off=0 _nf
        eval "_nf=\$_STRUCT_NFIELDS_$_si"
        while test $_j -le $_nf; do
            eval "local _fn=\"\$_STRUCT_FNAME_${_si}_${_j}\""
            case "$_fn" in "$_fname") REPLY=$_off; return;; esac
            eval "local _fs=\$_STRUCT_FSIZE_${_si}_${_j}"
            _off=$(( (_off + _fs + 7) & -8 ))  # align to 8
            _j=$((_j + 1))
        done
        _si=$((_si + 1))
    done
    # Fallback: assume sequential 8-byte fields
    REPLY=0
}

# Count pointer depth in a param AST node (number of * levels)
_tool_c89cc_ptr_depth () {
    local _pdn=$1 _depth=0 _pdt
    _tool_c89cc_children "$_pdn"
    local _pd_chs="$REPLY"
    for _pdc in $_pd_chs; do
        _tool_c89cc_type "$_pdc"; _pdt=$REPLY
        case "$_pdt" in
        C10) # param_ptr: count this * and recurse
            _tool_c89cc_ptr_depth "$_pdc"
            _depth=$((_depth + 1 + REPLY))
            REPLY=$_depth; return;;
        C9) # param_rest: recurse
            _tool_c89cc_ptr_depth "$_pdc"
            _depth=$((_depth + REPLY))
            REPLY=$_depth; return;;
        esac
    done
    REPLY=$_depth
}

# Extract parameter name from param AST node (walks into param_ptr chains)
_tool_c89cc_param_name () {
    local _pn=$1 _pt
    _tool_c89cc_children "$_pn"
    local _pn_chs="$REPLY"
    REPLY=
    for _pc in $_pn_chs; do
        _tool_c89cc_type "$_pc"; _pt=$REPLY
        case "$_pt" in
        C48) _tool_c89cc_val "$_pc"; return;;        # direct ident
        C10|C9) _tool_c89cc_param_name "$_pc"; return;; # param_ptr or param_rest: recurse
        esac
    done
}

# ============================================================
# Function Compiler
# ============================================================
_tool_c89cc_func () {
    local _name=$1 _fdef_node=$2
    local _saved_frame=$_FRAME_SIZE _saved_sym=$_SYM_N

    # Check if this is a definition (has func_block) or just a declaration
    _tool_c89cc_children "$_fdef_node"
    local _fd_chs="$REPLY" _params= _body=
    for _ch in $_fd_chs; do
        _tool_c89cc_type "$_ch"
        case "$REPLY" in
        C3) _body=$_ch;;       # func_block
        C8) _params="$_params $_ch";;  # param
        esac
    done

    # If no body, this is a forward declaration — skip codegen
    case "$_body" in '') return;; esac

    _tool_c89cc_label "$_name"
    _FRAME_SIZE=0
    _SCOPE=$((_SCOPE + 1))

    # Function prologue
    _tool_c89cc_emit "55"                # push rbp
    _tool_c89cc_emit "48 89 E5"          # mov rbp, rsp

    # Reserve space for sub rsp — we'll patch this later
    local _sub_rsp_pos=$_IP
    _tool_c89cc_emit "48 81 EC"          # sub rsp, imm32
    _tool_c89cc_emit "00 00 00 00"       # placeholder (patched after body)

    # Allocate params as locals (System V ABI: rdi, rsi, rdx, rcx, r8, r9)
    local _pi=0
    for _p in $_params; do
        _pi=$((_pi + 1))
        # Get param name (may be nested inside param_ptr chains)
        _tool_c89cc_param_name "$_p"
        local _pname=$REPLY
        case "$_pname" in '') _pname="_param_$_pi";; esac

        # Detect param type and pointer depth for element size
        local _param_esize=8 _param_ptrdepth=0 _base_type=int
        _tool_c89cc_children "$_p"
        local _p_chs="$REPLY"
        for _ptc in $_p_chs; do
            _tool_c89cc_type "$_ptc"
            case "$REPLY" in
            C11) _tool_c89cc_val "$_ptc"; _base_type=$REPLY;;
            esac
        done
        # Count pointer depth by walking param_ptr chain
        _tool_c89cc_ptr_depth "$_p"; _param_ptrdepth=$REPLY
        # char* with 1 pointer → byte elements; everything else → 8
        case "$_base_type" in char)
            case "$_param_ptrdepth" in 1) _param_esize=1;; esac;; esac

        _tool_c89cc_alloc_local
        _tool_c89cc_sym_add "$_pname" "param" "$REPLY" "$_param_esize"
        local _off=$REPLY

        # Copy register arg to stack (mod=01 for disp8, mod=10 for disp32)
        if test $_off -le 127; then
            case $_pi in
            1) _tool_c89cc_emit "48 89 7D";; 2) _tool_c89cc_emit "48 89 75";;
            3) _tool_c89cc_emit "48 89 55";; 4) _tool_c89cc_emit "48 89 4D";;
            5) _tool_c89cc_emit "4C 89 45";; 6) _tool_c89cc_emit "4C 89 4D";;
            esac
        else
            case $_pi in
            1) _tool_c89cc_emit "48 89 BD";; 2) _tool_c89cc_emit "48 89 B5";;
            3) _tool_c89cc_emit "48 89 95";; 4) _tool_c89cc_emit "48 89 8D";;
            5) _tool_c89cc_emit "4C 89 85";; 6) _tool_c89cc_emit "4C 89 8D";;
            esac
        fi
        _tool_c89cc_emit_off $_off
    done

    # Compile function body
    case "$_body" in ?*)
        _tool_c89cc_children "$_body"; local _fb_chs="$REPLY"
        for _ch in $_fb_chs; do _tool_c89cc_node "$_ch"; done;;
    esac

    # Default return (in case no explicit return)
    _tool_c89cc_emit "48 31 C0"          # xor rax, rax (return 0)
    _tool_c89cc_emit "C9"                # leave
    _tool_c89cc_emit "C3"                # ret

    # Patch sub rsp with actual frame size (align to 16)
    local _aligned=$(( (_FRAME_SIZE + 15) & -16 ))
    _tool_c89cc_patch_le32 $((_sub_rsp_pos + 3)) $_aligned

    # Restore scope
    _SCOPE=$((_SCOPE - 1))
    _SYM_N=$_saved_sym
    _FRAME_SIZE=$_saved_frame
}

# ============================================================
# Lvalue Compiler (address of expression in %rax)
# ============================================================
_tool_c89cc_lvalue () {
    local _n=$1 _t _v
    _tool_c89cc_type "$_n"; _t=$REPLY
    _tool_c89cc_val "$_n"; _v=$REPLY

    case "$_t" in
    C39) # expr: delegate
        _tool_c89cc_children "$_n"
        _tool_c89cc_lvalue "$REPLY";;
    C48) # ident: address of variable
        case "$_v" in
        [0-9]*) echo "ERROR: cannot take address of number" >&2;;
        *)
            if _tool_c89cc_sym_find "$_v"; then
                local _lv_rest="$REPLY"
                local _kind="${_lv_rest%% *}"; _lv_rest="${_lv_rest#* }"
                local _off="${_lv_rest%% *}"
                case "$_kind" in
                global)
                    _tool_c89cc_emit "48 B8"
                    _RELOCS="$_RELOCS G${_IP}=GLOB${_off}"
                    _tool_c89cc_emit "00 00 00 00 00 00 00 00";;
                *)
                    _tool_c89cc_lea_local $_off;;
                esac
            else
                echo "ERROR: undefined variable for lvalue: $_v" >&2
            fi;;
        esac;;
    C52) # *expr: address is the pointer value itself
        _tool_c89cc_children "$_n"
        _tool_c89cc_expr "$REPLY";;
    C58) # a[i]: address = base + index * elem_size
        _tool_c89cc_children "$_n"
        local _ab="${REPLY%% *}" _ai="${REPLY#* }"
        local _lv_esize=8
        _tool_c89cc_val "$_ab"
        case "$REPLY" in [a-zA-Z_]*)
            if _tool_c89cc_sym_find "$REPLY"; then
                local _le_rest="$REPLY"
                _le_rest="${_le_rest#* }"; _le_rest="${_le_rest#* }"
                _lv_esize="${_le_rest%% *}"
            fi;; esac
        _tool_c89cc_expr "$_ab"
        _tool_c89cc_emit "50"
        _tool_c89cc_expr "$_ai"
        case "$_lv_esize" in
        1) ;;
        2) _tool_c89cc_emit "48 C1 E0 01";;
        4) _tool_c89cc_emit "48 C1 E0 02";;
        8) _tool_c89cc_emit "48 C1 E0 03";;
        esac
        _tool_c89cc_emit "59"
        _tool_c89cc_emit "48 01 C8";;
    C60) # s.field: address = &s + offset
        _tool_c89cc_children "$_n"
        local _sb="${REPLY%% *}" _sf="${REPLY#* }"
        _tool_c89cc_lvalue "$_sb"
        _tool_c89cc_val "$_sf"; local _sfn=$REPLY
        _tool_c89cc_field_off "$_sfn"
        case "$REPLY" in 0) ;; *)
            _tool_c89cc_emit "48 05"; _tool_c89cc_emit_le32 $REPLY;; esac;;
    C61) # p->field: address = *p + offset
        _tool_c89cc_children "$_n"
        local _pb="${REPLY%% *}" _pf="${REPLY#* }"
        _tool_c89cc_expr "$_pb"                  # rax = pointer value
        _tool_c89cc_val "$_pf"; local _pfn=$REPLY
        _tool_c89cc_field_off "$_pfn"
        case "$REPLY" in 0) ;; *)
            _tool_c89cc_emit "48 05"; _tool_c89cc_emit_le32 $REPLY;; esac;;
    *) echo "ERROR: not an lvalue (type=$_t)" >&2;;
    esac
}

# ============================================================
# Expression Compiler (result in %rax)
# ============================================================
_tool_c89cc_expr () {
    local _n=$1 _t _v
    _tool_c89cc_type "$_n"; _t=$REPLY
    _tool_c89cc_val "$_n"; _v=$REPLY

    case "$_t" in
    C39) # expr: delegate to child
        _tool_c89cc_children "$_n"
        _tool_c89cc_expr "$REPLY";;

    C48) # ident or number literal
        case "$_v" in
        [0-9]*) # Number literal
            local _num
            case "$_v" in
            0x*|0X*) _num=$(( _v ));;           # hex
            0[0-7]*) _num=$(( _v ));;            # octal (shell handles)
            *) _num=$_v;;                         # decimal
            esac
            _tool_c89cc_emit "48 C7 C0"                   # mov rax, imm32
            _tool_c89cc_emit_le32 $_num
            ;;
        *) # Variable reference — load from stack or global
            if _tool_c89cc_sym_find "$_v"; then
                local _vr_rest="$REPLY"
                local _kind="${_vr_rest%% *}"; _vr_rest="${_vr_rest#* }"
                local _off="${_vr_rest%% *}"
                case "$_kind" in
                global)
                    _tool_c89cc_emit "48 B8"
                    _RELOCS="$_RELOCS G${_IP}=GLOB${_off}"
                    _tool_c89cc_emit "00 00 00 00 00 00 00 00"
                    _tool_c89cc_emit "48 8B 00";;
                *)
                    _tool_c89cc_load_local $_off;;
                esac
            else
                echo "ERROR: undefined variable: $_v" >&2
            fi;;
        esac;;

    C55) # binary operator (precedence climbing)
        _tool_c89cc_children "$_n"
        local _lhs="${REPLY%% *}" _rhs="${REPLY#* }"
        # Compile left operand
        _tool_c89cc_expr "$_lhs"
        _tool_c89cc_emit "50"                # push rax (save left)
        # Compile right operand
        _tool_c89cc_expr "$_rhs"
        _tool_c89cc_emit "48 89 C1"          # mov rcx, rax (right in rcx)
        _tool_c89cc_emit "58"                # pop rax (left in rax)
        # Apply operator
        case "$_v" in
        '+')  _tool_c89cc_emit "48 01 C8";;           # add rax, rcx
        '-')  _tool_c89cc_emit "48 29 C8";;           # sub rax, rcx
        '*')  _tool_c89cc_emit "48 0F AF C1";;        # imul rax, rcx
        '/')  _tool_c89cc_emit "48 99"                # cqo (sign-extend rax → rdx:rax)
              _tool_c89cc_emit "48 F7 F9";;           # idiv rcx
        '%')  _tool_c89cc_emit "48 99"                # cqo
              _tool_c89cc_emit "48 F7 F9"             # idiv rcx
              _tool_c89cc_emit "48 89 D0";;           # mov rax, rdx (remainder)
        '&')  _tool_c89cc_emit "48 21 C8";;           # and rax, rcx
        '|')  _tool_c89cc_emit "48 09 C8";;           # or rax, rcx
        '^')  _tool_c89cc_emit "48 31 C8";;           # xor rax, rcx
        '<<') _tool_c89cc_emit "48 D3 E0";;           # shl rax, cl
        '>>') _tool_c89cc_emit "48 D3 E8";;           # shr rax, cl
        '==') _tool_c89cc_emit "48 39 C8"             # cmp rax, rcx
              _tool_c89cc_emit "0F 94 C0"             # sete al
              _tool_c89cc_emit "48 0F B6 C0";;        # movzx rax, al
        '!=') _tool_c89cc_emit "48 39 C8"
              _tool_c89cc_emit "0F 95 C0"             # setne al
              _tool_c89cc_emit "48 0F B6 C0";;
        '<')  _tool_c89cc_emit "48 39 C8"
              _tool_c89cc_emit "0F 9C C0"             # setl al
              _tool_c89cc_emit "48 0F B6 C0";;
        '>')  _tool_c89cc_emit "48 39 C8"
              _tool_c89cc_emit "0F 9F C0"             # setg al
              _tool_c89cc_emit "48 0F B6 C0";;
        '<=') _tool_c89cc_emit "48 39 C8"
              _tool_c89cc_emit "0F 9E C0"             # setle al
              _tool_c89cc_emit "48 0F B6 C0";;
        '>=') _tool_c89cc_emit "48 39 C8"
              _tool_c89cc_emit "0F 9D C0"             # setge al
              _tool_c89cc_emit "48 0F B6 C0";;
        '=')  # Assignment: compute lvalue address, store rvalue
              # rcx = right value. Now compute left address and store.
              _tool_c89cc_emit "51"              # push rcx (save rvalue)
              _tool_c89cc_lvalue "$_lhs"         # rax = address of lvalue
              _tool_c89cc_emit "59"              # pop rcx (restore rvalue)
              # Byte store for *ptr and ptr[i] when char; 8-byte for vars
              _tool_c89cc_resolve_esize "$_lhs"; local _asgn_esz=$REPLY
              # But plain variables always get 8-byte store (stack slots are 8 bytes)
              # Only use byte store when LHS is a deref (*p) or subscript (a[i])
              local _asgn_inner=$_lhs
              _tool_c89cc_type "$_asgn_inner"
              case "$REPLY" in C39) _tool_c89cc_children "$_asgn_inner"; _asgn_inner=$REPLY; _tool_c89cc_type "$_asgn_inner";; esac
              case "$REPLY" in
              C52|C58) # deref or subscript: use resolved esize
                   case "$_asgn_esz" in
                   1) _tool_c89cc_emit "88 08";;      # mov [rax], cl (byte store)
                   *) _tool_c89cc_emit "48 89 08";;   # mov [rax], rcx (qword store)
                   esac;;
              *) _tool_c89cc_emit "48 89 08";;        # mov [rax], rcx (qword store)
              esac
              _tool_c89cc_emit "48 89 C8";;      # mov rax, rcx (returns value)
        '+='|'-='|'*='|'/='|'%='|'&='|'|='|'^='|'<<='|'>>=')
              # Compound assignment: load current, apply op, store back
              _tool_c89cc_emit "51"              # push rcx (save rvalue)
              _tool_c89cc_lvalue "$_lhs"         # rax = address of lvalue
              _tool_c89cc_emit "50"              # push rax (save address)
              _tool_c89cc_emit "48 8B 00"        # mov rax, [rax] (load current)
              _tool_c89cc_emit "5A"              # pop rdx (address in rdx)
              _tool_c89cc_emit "59"              # pop rcx (rvalue)
              local _base_op="${_v%=}"
              case "$_base_op" in
              '+')  _tool_c89cc_emit "48 01 C8";;
              '-')  _tool_c89cc_emit "48 29 C8";;
              '*')  _tool_c89cc_emit "48 0F AF C1";;
              '/')  _tool_c89cc_emit "48 99"; _tool_c89cc_emit "48 F7 F9";;
              '%')  _tool_c89cc_emit "48 99"; _tool_c89cc_emit "48 F7 F9"; _tool_c89cc_emit "48 89 D0";;
              '&')  _tool_c89cc_emit "48 21 C8";;
              '|')  _tool_c89cc_emit "48 09 C8";;
              '^')  _tool_c89cc_emit "48 31 C8";;
              '<<') _tool_c89cc_emit "48 D3 E0";;
              '>>') _tool_c89cc_emit "48 D3 E8";;
              esac
              _tool_c89cc_emit "48 89 02"        # mov [rdx], rax (store result)
              ;;
        '&&') # Logical AND: short-circuit
              # Left in rax. If 0, skip right.
              _tool_c89cc_emit "48 85 C0"             # test rax, rax
              _tool_c89cc_emit "0F 84"                # je <skip>
              local _and_skip=$_IP
              _tool_c89cc_emit "00 00 00 00"
              _tool_c89cc_expr "$_rhs"                # evaluate right
              # Normalize to 0/1
              _tool_c89cc_emit "48 85 C0"             # test rax, rax
              _tool_c89cc_emit "0F 95 C0"             # setne al
              _tool_c89cc_emit "48 0F B6 C0"          # movzx rax, al
              local _and_end=$_IP
              _tool_c89cc_patch_le32 $_and_skip $(( _and_end - (_and_skip + 4) ))
              # If skipped, rax is 0 (left was 0). Result correct.
              ;;
        '||') # Logical OR: short-circuit
              _tool_c89cc_emit "48 85 C0"             # test rax, rax
              _tool_c89cc_emit "0F 85"                # jne <skip>
              local _or_skip=$_IP
              _tool_c89cc_emit "00 00 00 00"
              _tool_c89cc_expr "$_rhs"                # evaluate right
              local _or_end=$_IP
              _tool_c89cc_patch_le32 $_or_skip $(( _or_end - (_or_skip + 4) ))
              # Normalize to 0/1
              _tool_c89cc_emit "48 85 C0"             # test rax, rax
              _tool_c89cc_emit "0F 95 C0"             # setne al
              _tool_c89cc_emit "48 0F B6 C0"          # movzx rax, al
              ;;
        esac;;

    C56) # Function call postfix: fn(args)
        _tool_c89cc_children "$_n"
        local _fn_node="${REPLY%% *}" _arg_node="${REPLY#* }"
        case "$_arg_node" in "$REPLY") _arg_node=;; esac
        _tool_c89cc_val "$_fn_node"; local _fn_name=$REPLY

        # Compile arguments and push them
        local _argc=0 _argi=0
        case "$_arg_node" in ?*)
            _tool_c89cc_children "$_arg_node"; local _arg_chs="$REPLY"
            # Count and compile args (push in reverse for stack, but use regs)
            for _a in $_arg_chs; do _argc=$((_argc + 1)); done
            # Compile each arg, push on stack
            for _a in $_arg_chs; do
                _tool_c89cc_expr "$_a"
                _tool_c89cc_emit "50"         # push rax
            done;;
        esac

        # __syscall intrinsic: syscall(nr, a1, a2, a3, a4, a5, a6)
        # Uses: rax=nr, rdi=a1, rsi=a2, rdx=a3, r10=a4, r8=a5, r9=a6
        case "$_fn_name" in __syscall)
            _argi=$_argc
            while test $_argi -gt 0; do
                case $_argi in
                1) _tool_c89cc_emit "58";;       # pop rax (syscall number)
                2) _tool_c89cc_emit "5F";;       # pop rdi (arg1)
                3) _tool_c89cc_emit "5E";;       # pop rsi (arg2)
                4) _tool_c89cc_emit "5A";;       # pop rdx (arg3)
                5) _tool_c89cc_emit "41 5A";;    # pop r10 (arg4)
                6) _tool_c89cc_emit "41 58";;    # pop r8 (arg5)
                7) _tool_c89cc_emit "41 59";;    # pop r9 (arg6)
                esac
                _argi=$((_argi - 1))
            done
            _tool_c89cc_emit "0F 05";;           # syscall; result in rax
        *)
            # Pop args into registers (System V ABI order)
            _argi=$_argc
            while test $_argi -gt 0; do
                case $_argi in
                1) _tool_c89cc_emit "5F";;       # pop rdi (1st arg)
                2) _tool_c89cc_emit "5E";;       # pop rsi (2nd arg)
                3) _tool_c89cc_emit "5A";;       # pop rdx (3rd arg)
                4) _tool_c89cc_emit "59";;       # pop rcx (4th arg)
                5) _tool_c89cc_emit "41 58";;    # pop r8 (5th arg)
                6) _tool_c89cc_emit "41 59";;    # pop r9 (6th arg)
                *) ;; # leave on stack for >6 args
                esac
                _argi=$((_argi - 1))
            done

            # Call function
            _tool_c89cc_emit "E8"                # call <rel32>
            _tool_c89cc_reloc_rel32 "$_fn_name"
            # Result is in rax
        ;; esac
        ;;

    C49|C50|C51|C52|C53|C54) # unary operators
        _tool_c89cc_children "$_n"
        case "$_t" in
        C52) # unary * (dereference): compute address, then load
             local _deref_child="$REPLY" _deref_esz=8
             _tool_c89cc_resolve_esize "$_deref_child"; _deref_esz=$REPLY
             _tool_c89cc_expr "$_deref_child"
             case "$_deref_esz" in
             1) _tool_c89cc_emit "48 0F B6 00";;      # movzx rax, byte [rax]
             *) _tool_c89cc_emit "48 8B 00";;          # mov rax, [rax]
             esac;;
        C53) # unary & (address-of): compute lvalue address
             _tool_c89cc_lvalue "$REPLY";;
        *)   # other unary: compute value first
             _tool_c89cc_expr "$REPLY"
             case "$_t" in
             C49) _tool_c89cc_emit "48 F7 D8";;       # neg rax (unary -)
             C50) # Logical NOT
                  _tool_c89cc_emit "48 85 C0"          # test rax, rax
                  _tool_c89cc_emit "0F 94 C0"          # sete al
                  _tool_c89cc_emit "48 0F B6 C0";;     # movzx rax, al
             C51) _tool_c89cc_emit "48 F7 D0";;       # not rax (bitwise ~)
             C54) ;; # unary ++ (pre-increment) — TODO
             esac;;
        esac;;

    C64) # Ternary operator: cond ? true_expr : false_expr
        _tool_c89cc_children "$_n"
        set -- $REPLY
        local _tc="$1" _tt="$2" _tf="$3"
        _tool_c89cc_expr "$_tc"
        _tool_c89cc_emit "48 85 C0"                   # test rax, rax
        _tool_c89cc_emit_jcc "84"; local _tern_f=$REPLY  # je false_branch
        _tool_c89cc_expr "$_tt"
        _tool_c89cc_emit_jmp; local _tern_e=$REPLY    # jmp end
        _tool_c89cc_jmp_target "$_tern_f"
        _tool_c89cc_expr "$_tf"
        _tool_c89cc_jmp_target "$_tern_e";;

    C58) # Array subscript: a[i] → base + index * elem_size
        _tool_c89cc_children "$_n"
        local _arr_base="${REPLY%% *}" _arr_idx="${REPLY#* }"
        # Determine element size from base variable type
        local _arr_esize=8
        _tool_c89cc_val "$_arr_base"
        case "$REPLY" in [a-zA-Z_]*)
            if _tool_c89cc_sym_find "$REPLY"; then
                local _ae_rest="$REPLY"
                _ae_rest="${_ae_rest#* }"; _ae_rest="${_ae_rest#* }"  # skip kind, off
                _arr_esize="${_ae_rest%% *}"
            fi;; esac
        _tool_c89cc_expr "$_arr_base"            # base address in rax
        _tool_c89cc_emit "50"                    # push rax
        _tool_c89cc_expr "$_arr_idx"             # index in rax
        case "$_arr_esize" in
        1) ;;                            # no scaling for char
        2) _tool_c89cc_emit "48 C1 E0 01";;     # shl rax, 1
        4) _tool_c89cc_emit "48 C1 E0 02";;     # shl rax, 2
        8) _tool_c89cc_emit "48 C1 E0 03";;     # shl rax, 3
        *) _tool_c89cc_emit "48 6B C0"; _tool_c89cc_emit_d $_arr_esize;; # imul rax, imm8
        esac
        _tool_c89cc_emit "59"                    # pop rcx (base)
        _tool_c89cc_emit "48 01 C8"              # add rax, rcx
        # Load: byte for char, qword for others
        case "$_arr_esize" in
        1) _tool_c89cc_emit "48 0F B6 00";;      # movzx rax, byte [rax]
        *) _tool_c89cc_emit "48 8B 00";;         # mov rax, [rax]
        esac;;

    C62) # Postfix ++
        _tool_c89cc_children "$_n"
        _tool_c89cc_lvalue "$REPLY"              # rax = address
        _tool_c89cc_emit "48 8B 08"              # mov rcx, [rax] (old value)
        _tool_c89cc_emit "50"                    # push rax (save address)
        _tool_c89cc_emit "48 8D 41 01"           # lea rax, [rcx+1]
        _tool_c89cc_emit "5A"                    # pop rdx (address)
        _tool_c89cc_emit "48 89 02"              # mov [rdx], rax (store incremented)
        _tool_c89cc_emit "48 89 C8";;            # mov rax, rcx (return OLD value)

    C63) # Postfix --
        _tool_c89cc_children "$_n"
        _tool_c89cc_lvalue "$REPLY"
        _tool_c89cc_emit "48 8B 08"              # mov rcx, [rax]
        _tool_c89cc_emit "50"
        _tool_c89cc_emit "48 8D 41 FF"           # lea rax, [rcx-1]
        _tool_c89cc_emit "5A"
        _tool_c89cc_emit "48 89 02"
        _tool_c89cc_emit "48 89 C8";;

    C60) # Member access: s.field → base + offset
        _tool_c89cc_children "$_n"
        local _dot_base="${REPLY%% *}" _dot_field="${REPLY#* }"
        _tool_c89cc_lvalue "$_dot_base"          # rax = address of struct
        _tool_c89cc_val "$_dot_field"; local _fn60=$REPLY
        local _foff=0
        _tool_c89cc_field_off "$_fn60"; _foff=$REPLY
        # Add field offset if nonzero
        case "$_foff" in 0) ;; *)
            _tool_c89cc_emit "48 05"             # add rax, imm32
            _tool_c89cc_emit_le32 $_foff;; esac
        _tool_c89cc_emit "48 8B 00";;            # mov rax, [rax]

    C61) # Arrow access: p->field → deref pointer + field offset
        _tool_c89cc_children "$_n"
        local _arr_base="${REPLY%% *}" _arr_field="${REPLY#* }"
        _tool_c89cc_expr "$_arr_base"            # rax = pointer value (address)
        _tool_c89cc_val "$_arr_field"; local _fn61=$REPLY
        local _foff=0
        _tool_c89cc_field_off "$_fn61"; _foff=$REPLY
        # Add field offset if nonzero
        case "$_foff" in 0) ;; *)
            _tool_c89cc_emit "48 05"             # add rax, imm32
            _tool_c89cc_emit_le32 $_foff;; esac
        _tool_c89cc_emit "48 8B 00";;            # mov rax, [rax]

    C45) # String literal
        _tool_c89cc_add_string "$_v"
        local _str_id=$REPLY
        # Load address of string: will be patched during ELF generation
        # For now: emit mov rax, imm64 with placeholder
        _tool_c89cc_emit "48 B8"                 # movabs rax, imm64
        eval "local _soff=\$_STR_OFF_$_str_id"
        # Record string relocation (patched after code+data layout is known)
        _RELOCS="$_RELOCS S${_IP}=STR${_str_id}"
        _tool_c89cc_emit "00 00 00 00 00 00 00 00";;  # placeholder

    C46) # Character literal: 'x' → ASCII value
        local _charval
        case "$_v" in
        '\\n') _charval=10;;
        '\\t') _charval=9;;
        '\\0') _charval=0;;
        '\\\\') _charval=92;;
        "\\'") _charval=39;;
        '\\r') _charval=13;;
        *) _tool_c89cc_c2d "$_v"; _charval=$REPLY;;
        esac
        _tool_c89cc_emit "48 C7 C0"
        _tool_c89cc_emit_le32 $_charval;;

    C43) # Parenthesized expression: ( expr )
        _tool_c89cc_children "$_n"
        _tool_c89cc_expr "$REPLY";;

    C41) # sizeof_expr → compile-time constant
        _tool_c89cc_children "$_n"
        # sizeof_body children are type names; default to 8 (pointer size)
        _tool_c89cc_emit "48 C7 C0"
        _tool_c89cc_emit_le32 8;;

    *) ;; # Unknown — emit 0
    esac
}

# ============================================================
# ELF64 Header Generation
# ============================================================
_BASE_ADDR=4194304  # 0x400000
_HDR_SIZE=120       # 64 (ELF) + 56 (1 program header)

_tool_c89cc_write_elf () {
    local _code_size=$_IP
    local _str_size=$(( ${#_STR_DATA} / 2 ))
    local _glob_size=$(( ${#_GLOB_DATA} / 2 ))
    local _data_size=$(( _str_size + _glob_size ))
    local _total_size=$(( _HDR_SIZE + _code_size + _data_size ))
    local _entry=$(( _BASE_ADDR + _HDR_SIZE ))
    # Data starts right after code
    local _str_base=$(( _BASE_ADDR + _HDR_SIZE + _code_size ))
    local _glob_base=$(( _str_base + _str_size ))

    # ELF64 Header (64 bytes)
    # e_ident: magic + class + data + version + OS/ABI + padding
    _out_byte 127; _out_byte 69; _out_byte 76; _out_byte 70  # \x7fELF
    _out_byte 2; _out_byte 1; _out_byte 1; _out_byte 0       # 64-bit, LE, v1, SysV
    _out_byte 0; _out_byte 0; _out_byte 0; _out_byte 0       # padding
    _out_byte 0; _out_byte 0; _out_byte 0; _out_byte 0

    # e_type (2) + e_machine (2) + e_version (4)
    _out_byte 2; _out_byte 0                                  # ET_EXEC
    _out_byte 62; _out_byte 0                                 # EM_X86_64
    _out_byte 1; _out_byte 0; _out_byte 0; _out_byte 0       # EV_CURRENT

    # e_entry (8 bytes, little-endian)
    _tool_c89cc_le64 $_entry

    # e_phoff (8) = 64 (right after ELF header)
    _tool_c89cc_le64 64

    # e_shoff (8) = 0 (no section headers)
    _tool_c89cc_le64 0

    # e_flags (4) + e_ehsize (2) + e_phentsize (2)
    _out_byte 0; _out_byte 0; _out_byte 0; _out_byte 0       # flags
    _out_byte 64; _out_byte 0                                 # ehsize = 64
    _out_byte 56; _out_byte 0                                 # phentsize = 56

    # e_phnum (2) + e_shentsize (2) + e_shnum (2) + e_shstrndx (2)
    _out_byte 1; _out_byte 0                                  # 1 program header
    _out_byte 0; _out_byte 0                                  # shentsize = 0
    _out_byte 0; _out_byte 0                                  # shnum = 0
    _out_byte 0; _out_byte 0                                  # shstrndx = 0

    # Program Header (56 bytes)
    # p_type (4) = PT_LOAD
    _out_byte 1; _out_byte 0; _out_byte 0; _out_byte 0

    # p_flags (4) = PF_R | PF_W | PF_X = 7
    _out_byte 7; _out_byte 0; _out_byte 0; _out_byte 0

    # p_offset (8) = 0 (load from start of file)
    _tool_c89cc_le64 0

    # p_vaddr (8) = base address
    _tool_c89cc_le64 $_BASE_ADDR

    # p_paddr (8) = same
    _tool_c89cc_le64 $_BASE_ADDR

    # p_filesz (8) = total file size
    _tool_c89cc_le64 $_total_size

    # p_memsz (8) = same (no BSS yet)
    _tool_c89cc_le64 $_total_size

    # p_align (8) = 0x1000
    _tool_c89cc_le64 4096

    # Code section
    _tool_c89cc_write_code

    # String data section
    case "$_STR_DATA" in ?*) _tool_c89cc_write_hex_str "$_STR_DATA";; esac

    # Global data section
    case "$_GLOB_DATA" in ?*) _tool_c89cc_write_hex_str "$_GLOB_DATA";; esac
}

# Write a 64-bit little-endian value as raw bytes
_tool_c89cc_le64 () {
    local _v=$1 _i=0
    while test $_i -lt 8; do
        _out_byte $(( _v % 256 ))
        _v=$(( _v / 256 ))
        _i=$((_i + 1))
    done
}

# Convert 2-char hex to decimal. Result in REPLY.
_tool_c89cc_hex2dec () {
    local _h1="${1%?}" _h2="${1#?}" _d1 _d2
    case "$_h1" in
    0) _d1=0;; 1) _d1=1;; 2) _d1=2;; 3) _d1=3;; 4) _d1=4;;
    5) _d1=5;; 6) _d1=6;; 7) _d1=7;; 8) _d1=8;; 9) _d1=9;;
    [Aa]) _d1=10;; [Bb]) _d1=11;; [Cc]) _d1=12;;
    [Dd]) _d1=13;; [Ee]) _d1=14;; [Ff]) _d1=15;; esac
    case "$_h2" in
    0) _d2=0;; 1) _d2=1;; 2) _d2=2;; 3) _d2=3;; 4) _d2=4;;
    5) _d2=5;; 6) _d2=6;; 7) _d2=7;; 8) _d2=8;; 9) _d2=9;;
    [Aa]) _d2=10;; [Bb]) _d2=11;; [Cc]) _d2=12;;
    [Dd]) _d2=13;; [Ee]) _d2=14;; [Ff]) _d2=15;; esac
    REPLY=$(( _d1 * 16 + _d2 ))
}


# Write the code buffer as raw bytes
_tool_c89cc_write_code () {
    local _i=0
    while test $_i -lt $_IP; do
        eval "_tool_c89cc_hex2dec \"\$_CB_$_i\""
        _out_byte "$REPLY"
        _i=$((_i + 1))
    done
}

# Write a hex-pair string as raw bytes (for string/global data sections)
_tool_c89cc_write_hex_str () {
    local _s="${1:-}" _c1 _c2
    while test ${#_s} -gt 0; do
        _c1="${_s%"${_s#?}"}"; _s="${_s#?}"
        _c2="${_s%"${_s#?}"}"; _s="${_s#?}"
        _tool_c89cc_hex2dec "$_c1$_c2"
        _out_byte "$REPLY"
    done
}

# ============================================================
# Entry Point
# ============================================================
_tool_c89cc_init () {
    # Ensure word splitting works for for-loops
    IFS=' '

    # Register common struct layouts (for hex2 compatibility)
    _tool_c89cc_struct_def "input_files"
    _tool_c89cc_struct_field "next" 8
    _tool_c89cc_struct_field "filename" 8
    _tool_c89cc_struct_def "entry"
    _tool_c89cc_struct_field "next" 8
    _tool_c89cc_struct_field "target" 8
    _tool_c89cc_struct_field "name" 8
}

# ============================================================
# Entry Point
# ============================================================
cc_c89 () {
    # Read AST from stdin (line-by-line to avoid eval size limits)
    while IFS='' read -r _ast_line; do eval "$_ast_line"; done
    case "${_ast_line:-}" in ?*) eval "$_ast_line";; esac

    _tool_c89cc_init

    # ELF mode: emit _start entry point
    _tool_c89cc_label "_start"
    _tool_c89cc_emit "E8"; _tool_c89cc_reloc_rel32 "main"
    _tool_c89cc_emit "48 89 C7"
    _tool_c89cc_emit "48 C7 C0"; _tool_c89cc_emit_le32 60
    _tool_c89cc_emit "0F 05"
    _tool_c89cc_node 0
    _tool_c89cc_fixup
    _tool_c89cc_write_elf
}

tool_c89cc () { cc_c89; }

# --- core/footer.sh ---
# ksh93 fix: re-declare functions via eval.
# In ksh93, functions defined via `. file` don't get alias expansion.
# Re-declaring via eval fixes this. Two modes:
#   - Dynamic-scoped (POSIX name(){}): functions that read/write caller-scope
#     variables (_LN, _COL, _SRC*, CONSUMED, V*, X*, etc.) or entry points
#     whose locals must be visible to callees (parsers, generators, tests).
#   - Static-scoped (AT&T function name {}): everything else, especially
#     recursive emitters (_*_emit) that need isolated locals per call frame.
# Convention: new utility functions (str_*, io_*, ds_*, codegen_*, opt_*)
# use only their own locals + REPLY, so static scoping (the default) is correct.
_Ldefn_fix=
eval "_Ldefn_fix(){ typeset _Ldefn_fix=local;} 2>/dev/null"
_Ldefn_fix 2>/dev/null || :
case $_Ldefn_fix in "local")
    _Ldefn_fix () {
        case "$1" in _Ldefn_fix) return;; esac
        _Ldefn_fix="$(typeset -f "$1" 2>/dev/null)" || return 0
        _Ldefn_fix="${_Ldefn_fix#*\{}"
        case "$1" in
        *_parser|ast_out|_error|_nlcount|_numck|_ast_core_pars_epilogue)
            eval "$1 () {${_Ldefn_fix}" 2>/dev/null || :;;
        gen_*|test_*|unit_*|integration_*|full_*)
            eval "$1 () {${_Ldefn_fix}" 2>/dev/null || :;;
        _bnf_gen_*|_shell_common_stripq|_shell_common_shdelim)
            eval "$1 () {${_Ldefn_fix}" 2>/dev/null || :;;
        *)
            eval "function $1 {${_Ldefn_fix}" 2>/dev/null || :;;
        esac
    }
    IFS='
'
    for _Ldefn_fix in $(typeset +f); do
        _Ldefn_fix "${_Ldefn_fix%%"()"*}"
    done
    IFS=''
    ;;
esac
unset _Ldefn_fix
unset -f _Ldefn_fix 2>/dev/null || :

# --- built-in libc.c ---
_BUILTIN_LIBC='
/* ============================================================
 * Mini-libc: syscall-only C library for x86-64 Linux
 * ============================================================
 * No external dependencies. Compiled by gen/c89cc.sh.
 *
 * Build: printf '\'''\'' | cat lib/libc.c YOURPROG.c | sh gen/c89.sh | sh gen/c89cc.sh > a.out
 */

/* ============================================================
 * Syscall wrappers
 * ============================================================
 * Linux x86-64 syscall numbers from <asm/unistd_64.h>
 */

int sys_read(int fd, char *buf, int count) {
    return __syscall(0, fd, buf, count);
}

int sys_write(int fd, char *buf, int count) {
    return __syscall(1, fd, buf, count);
}

int sys_open(char *path, int flags, int mode) {
    return __syscall(2, path, flags, mode);
}

int sys_close(int fd) {
    return __syscall(3, fd);
}

int sys_brk(int addr) {
    return __syscall(12, addr);
}

int sys_pipe(int *fds) {
    return __syscall(22, fds);
}

int sys_dup2(int oldfd, int newfd) {
    return __syscall(33, oldfd, newfd);
}

int sys_fork() {
    return __syscall(57);
}

int sys_execve(char *path, char **argv, char **envp) {
    return __syscall(59, path, argv, envp);
}

int sys_exit(int code) {
    return __syscall(60, code);
}

int sys_wait4(int pid, int *status, int options, int rusage) {
    return __syscall(61, pid, status, options, rusage);
}

int sys_getcwd(char *buf, int size) {
    return __syscall(79, buf, size);
}

int sys_chdir(char *path) {
    return __syscall(80, path);
}

/* ============================================================
 * String operations
 * ============================================================ */

int strlen(char *s) {
    int n = 0;
    while (*s) { n += 1; s = s + 1; }
    return n;
}

int strcmp(char *a, char *b) {
    while (*a && *a == *b) { a = a + 1; b = b + 1; }
    return *a - *b;
}

int strncmp(char *a, char *b, int n) {
    while (n > 0 && *a && *a == *b) { a = a + 1; b = b + 1; n -= 1; }
    if (n == 0) return 0;
    return *a - *b;
}

char *strcpy(char *dst, char *src) {
    char *d = dst;
    while (*src) { *d = *src; d = d + 1; src = src + 1; }
    *d = 0;
    return dst;
}

char *strcat(char *dst, char *src) {
    char *d = dst;
    while (*d) d = d + 1;
    while (*src) { *d = *src; d = d + 1; src = src + 1; }
    *d = 0;
    return dst;
}

char *strchr(char *s, int c) {
    while (*s) {
        if (*s == c) return s;
        s = s + 1;
    }
    if (c == 0) return s;
    return 0;
}

char *memcpy(char *dst, char *src, int n) {
    char *d = dst;
    while (n > 0) { *d = *src; d = d + 1; src = src + 1; n -= 1; }
    return dst;
}

char *memset(char *dst, int c, int n) {
    char *d = dst;
    while (n > 0) { *d = c; d = d + 1; n -= 1; }
    return dst;
}

/* ============================================================
 * Memory allocator (bump + free-list via brk)
 * ============================================================
 * Each allocation has an 8-byte header storing the usable size.
 * free() returns blocks to a binned free-list (10 size classes:
 * 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096).
 * malloc() checks the free-list before bumping the heap.
 */

int _heap_start;
int _heap_cur;
int _heap_end;

/* Free-list bins: 10 classes (8..4096), each a singly-linked list.
 * Freed blocks store the "next" pointer in their first 8 bytes.
 * Allocated at first malloc call (can'\''t use global array, compiler
 * allocates only 8 bytes per global regardless of array size). */
int *_free_bins;

int _size_class(int size) {
    /* Return bin index for 8-aligned size, or -1 if too large */
    int bin; int s;
    bin = 0; s = 8;
    while (s < size) { s = s * 2; bin = bin + 1; if (bin >= 10) return -1; }
    return bin;
}

int malloc(int size) {
    int cur;
    int new_end;
    int *hp;
    int bin;
    if (_heap_start == 0) {
        _heap_start = sys_brk(0);
        _heap_cur = _heap_start;
        _heap_end = sys_brk(_heap_start + 8388608);
        /* Allocate free-list bins (10 entries, zeroed) */
        _free_bins = _heap_cur;
        _heap_cur = _heap_cur + 80;
        bin = 0; while (bin < 10) { _free_bins[bin] = 0; bin = bin + 1; }
    }
    size = (size + 7) & -8;
    bin = _size_class(size);
    if (bin >= 0) {
        cur = _free_bins[bin];
        if (cur != 0) {
            hp = cur;
            _free_bins[bin] = hp[0];
            hp = cur - 8;
            hp[0] = size;
            return cur;
        }
    }
    /* Bump allocate with 8-byte size header */
    cur = _heap_cur;
    _heap_cur = cur + size + 8;
    if (_heap_cur > _heap_end) {
        new_end = _heap_cur + 16777216;
        _heap_end = sys_brk(new_end);
    }
    hp = cur;
    hp[0] = size;
    return cur + 8;
}

void free(char *ptr) {
    int size;
    int bin;
    int *hp;
    if (ptr == 0) return;
    /* Only free heap-allocated pointers (skip string literals, etc.) */
    if (ptr <= _heap_start || ptr >= _heap_cur) return;
    hp = ptr - 8;
    size = hp[0];           /* read header */
    bin = _size_class(size);
    if (bin < 0) return;    /* oversized: leak */
    hp = ptr;
    hp[0] = _free_bins[bin]; /* store next ptr in block */
    _free_bins[bin] = ptr;
}

/* ============================================================
 * Temporary arena (bulk-reset between commands)
 * ============================================================ */

int _tmp_base;
int _tmp_cur;
int _tmp_size;

void tmp_init(int size) {
    _tmp_base = malloc(size);
    _tmp_cur = _tmp_base;
    _tmp_size = size;
}

int tmp_alloc(int size) {
    int cur;
    size = (size + 7) & -8;
    cur = _tmp_cur;
    _tmp_cur = cur + size;
    if (_tmp_cur > _tmp_base + _tmp_size) {
        _tmp_cur = cur;
        return malloc(size);
    }
    return cur;
}

void tmp_reset() {
    _tmp_cur = _tmp_base;
}

/* ============================================================
 * I/O helpers
 * ============================================================ */

/* Report stack + heap usage to stderr */
void mem_report() {
    int stack_var;
    fputs("MEM: heap=", 2);
    print_int((_heap_cur - _heap_start) / 1024);
    fputs("K stack_approx=", 2);
    /* &stack_var gives approximate stack pointer */
    print_int(&stack_var);
    fputs("\n", 2);
}

int putchar(int c) {
    char buf;
    *(&buf) = c;
    sys_write(1, &buf, 1);
    return c;
}

int puts(char *s) {
    sys_write(1, s, strlen(s));
    putchar(10);
    return 0;
}

int fputs(char *s, int fd) {
    sys_write(fd, s, strlen(s));
    return 0;
}

int getchar() {
    char buf;
    int n;
    n = sys_read(0, &buf, 1);
    if (n <= 0) return -1;
    return *(&buf);
}

/* Print unsigned decimal integer (recursive to avoid local arrays) */
void print_uint(int n) {
    if (n >= 10) print_uint(n / 10);
    putchar(48 + n % 10);
}

/* Print signed decimal integer */
void print_int(int n) {
    if (n < 0) {
        putchar(45);
        print_uint(0 - n);
    } else {
        print_uint(n);
    }
}
'

# --- main ---
_no_libc=0
case "${1:-}" in --no-libc) _no_libc=1; shift;; esac

if test $_no_libc -eq 1; then
    c89_parser | cc_c89
else
    { _printr1 "$_BUILTIN_LIBC"; /bin/cat; } | c89_parser | cc_c89
fi