C89cc.sh – standalone C89/ELF64 compiler in pure portable shell - News

#!/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