Skip to content

Instantly share code, notes, and snippets.

@alganet
Last active April 3, 2026 21:51
Show Gist options
  • Select an option

  • Save alganet/2b89c4368f8d23d033961d8a3deb5c19 to your computer and use it in GitHub Desktop.

Select an option

Save alganet/2b89c4368f8d23d033961d8a3deb5c19 to your computer and use it in GitHub Desktop.
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
@ontouchstart
Copy link
Copy Markdown

@alganet

This is what I mean bootstrapping by a single Makefile : https://gist.github.com/ontouchstart/93a25bbda4015b4263a36049c662b877
(I forked your gist to make sure it is immutable.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment