% This LaTeX file generated by cxref
% cxref program (c) Andrew M. Bishop 1995,96,97.

\markboth{File parse-yacc.c}{File parse-yacc.c}
\section{File parse-yacc.c}
\label{file_parse-yacc.c}

{\bf RCS Header: /home/amb/cxref/RCS/parse.y 1.38 1999/01/27 19:19:31 amb Exp }

\smallskip

  C Cross Referencing \& Documentation tool. Version 1.5.

  C parser.

\smallskip
\begin{cxreftabiii}
Refs Var:\ & first & parse-yacc.c & \cxrefvar{first}{parse-yacc.c}\\
\end{cxreftabiii}


\subsection*{Included Files}

\begin{cxreftabi}
{\stt \#include <string.h>} &\\
\end{cxreftabi}

\medskip
\begin{cxreftabi}
{\stt \#include "parse-yy.h"} &\cxreffile{parse-yy.h}\\
\hspace*{0.2in}{\stt \#include <stdio.h>} &\\
\hspace*{0.2in}{\stt \#include <stdlib.h>} &\\
\end{cxreftabi}

\medskip
\begin{cxreftabi}
{\stt \#include "cxref.h"} &\cxreffile{cxref.h}\\
\hspace*{0.2in}{\stt \#include "datatype.h"} &\cxreffile{datatype.h}\\
\end{cxreftabi}

\medskip
\begin{cxreftabi}
{\stt \#include "memory.h"} &\cxreffile{memory.h}\\
\end{cxreftabi}

\medskip
\begin{cxreftabi}
{\stt \#include <stdio.h>} &\\
\end{cxreftabi}


\subsection*{Preprocessor definitions}

{\stt \#define YYBISON 1}

\medskip
{\stt \#define IDENTIFIER 258}

\medskip
{\stt \#define TYPE\_NAME 259}

\medskip
{\stt \#define LITERAL 260}

\medskip
{\stt \#define STRING\_LITERAL 261}

\medskip
{\stt \#define ELLIPSES 262}

\medskip
{\stt \#define MUL\_ASSIGN 263}

\medskip
{\stt \#define DIV\_ASSIGN 264}

\medskip
{\stt \#define MOD\_ASSIGN 265}

\medskip
{\stt \#define ADD\_ASSIGN 266}

\medskip
{\stt \#define SUB\_ASSIGN 267}

\medskip
{\stt \#define LEFT\_ASSIGN 268}

\medskip
{\stt \#define RIGHT\_ASSIGN 269}

\medskip
{\stt \#define AND\_ASSIGN 270}

\medskip
{\stt \#define XOR\_ASSIGN 271}

\medskip
{\stt \#define OR\_ASSIGN 272}

\medskip
{\stt \#define EQ\_OP 273}

\medskip
{\stt \#define NE\_OP 274}

\medskip
{\stt \#define PTR\_OP 275}

\medskip
{\stt \#define AND\_OP 276}

\medskip
{\stt \#define OR\_OP 277}

\medskip
{\stt \#define DEC\_OP 278}

\medskip
{\stt \#define INC\_OP 279}

\medskip
{\stt \#define LE\_OP 280}

\medskip
{\stt \#define GE\_OP 281}

\medskip
{\stt \#define LEFT\_SHIFT 282}

\medskip
{\stt \#define RIGHT\_SHIFT 283}

\medskip
{\stt \#define SIZEOF 284}

\medskip
{\stt \#define TYPEDEF 285}

\medskip
{\stt \#define EXTERN 286}

\medskip
{\stt \#define STATIC 287}

\medskip
{\stt \#define AUTO 288}

\medskip
{\stt \#define REGISTER 289}

\medskip
{\stt \#define CONST 290}

\medskip
{\stt \#define VOLATILE 291}

\medskip
{\stt \#define VOID 292}

\medskip
{\stt \#define INLINE 293}

\medskip
{\stt \#define CHAR 294}

\medskip
{\stt \#define SHORT 295}

\medskip
{\stt \#define INT 296}

\medskip
{\stt \#define LONG 297}

\medskip
{\stt \#define SIGNED 298}

\medskip
{\stt \#define UNSIGNED 299}

\medskip
{\stt \#define FLOAT 300}

\medskip
{\stt \#define DOUBLE 301}

\medskip
{\stt \#define STRUCT 302}

\medskip
{\stt \#define UNION 303}

\medskip
{\stt \#define ENUM 304}

\medskip
{\stt \#define CASE 305}

\medskip
{\stt \#define DEFAULT 306}

\medskip
{\stt \#define IF 307}

\medskip
{\stt \#define ELSE 308}

\medskip
{\stt \#define SWITCH 309}

\medskip
{\stt \#define WHILE 310}

\medskip
{\stt \#define DO 311}

\medskip
{\stt \#define FOR 312}

\medskip
{\stt \#define GOTO 313}

\medskip
{\stt \#define CONTINUE 314}

\medskip
{\stt \#define BREAK 315}

\medskip
{\stt \#define RETURN 316}

\medskip
{\stt \#define ASM 317}

\medskip
{\stt \#define yylex cxref\_yylex}

\medskip
 The variable must be LOCAL or EXTERNAL or GLOBAL, so this checks and sets that. 

\smallskip
{\stt \#define SCOPE}

\medskip
{\stt \#define YYFINAL 554}

\medskip
{\stt \#define YYFLAG 32768}

\medskip
{\stt \#define YYNTBASE 87}

\medskip
{\stt \#define YYTRANSLATE( x )}

\medskip
{\stt \#define YYLAST 1566}

\medskip
{\stt \#define yyerrok}

\medskip
{\stt \#define yyclearin}

\medskip
{\stt \#define YYEMPTY 2}

\medskip
{\stt \#define YYEOF 0}

\medskip
{\stt \#define YYACCEPT}

\medskip
{\stt \#define YYABORT}

\medskip
{\stt \#define YYERROR}

\medskip
{\stt \#define YYFAIL}

\medskip
{\stt \#define YYRECOVERING}

\medskip
{\stt \#define YYBACKUP( token, value )}

\medskip
{\stt \#define YYTERROR 1}

\medskip
{\stt \#define YYERRCODE 256}

\medskip
{\stt \#define YYLEX yylex}

\medskip
{\stt \#define YYINITDEPTH 200}

\medskip
{\stt \#define YYMAXDEPTH 10000}

\medskip
{\stt \#define YYPARSE\_PARAM\_ARG}

\medskip
{\stt \#define YYPARSE\_PARAM\_DECL}

\medskip
{\stt \#define YYPOPSTACK}


\subsection{Type definitions}


\subsubsection{Typedef stack}
\label{type_stack_parse-yacc.c}

 A structure to hold the information about an object. 

\smallskip
{\stt typedef struct \_stack stack}

\smallskip
\begin{cxreftabiia}
\hspace*{0.0in}{\stt struct \_stack} &\\
\hspace*{0.1in}{\stt \{} &\\
\hspace*{0.2in}{\stt char* name;} &  The name of the object.  \\
\hspace*{0.2in}{\stt char* type;} &  The type of the object.  \\
\hspace*{0.2in}{\stt char* qual;} &  The type qualifier of the object.  \\
\hspace*{0.1in}{\stt \}} &\\
\end{cxreftabiia}


\subsection{Variables}


\subsubsection{Variable yylval}
\label{var_yylval_parse-yacc.c}

 For communication between the lex and yacc code. 

\smallskip
{\stt char* yylval}

\smallskip
\begin{cxreftabiii}
Visible in:\ & cxref.c & \ & \cxreffile{cxref.c}\\
\ & func.c & \ & \cxreffile{func.c}\\
\ & parse-lex.c & \ & \cxreffile{parse-lex.c}\\
\ & parse-yacc.c & \ & \cxreffile{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
\ & parse-yacc.h & \ & \cxreffile{parse-yacc.h}\\
\ & parse-yy.h & \ & \cxreffile{parse-yy.h}\\
\ & preproc.c & \ & \cxreffile{preproc.c}\\
\cxreftabbreak{cxreftabiii}
\ & type.c & \ & \cxreffile{type.c}\\
\ & var.c & \ & \cxreffile{var.c}\\
Used in:\ & yylex() & parse-lex.c & \cxreffunc{yylex}{parse-lex.c}\\
\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Variable in\_typedef}
\label{var_in_typedef_parse-yacc.c}

 A flag that is set to true when typedef is seen in a statement. 

\smallskip
{\stt int in\_typedef}

\smallskip
\begin{cxreftabiii}
Visible in:\ & parse-yacc.c & \ & \cxreffile{parse-yacc.c}\\
\ & type.c & \ & \cxreffile{type.c}\\
Used in:\ & ResetParser() & parse-yacc.c & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & SeenStructUnionEnd() & type.c & \cxreffunc{SeenStructUnionEnd}{type.c}\\
\ & SeenStructUnionStart() & type.c & \cxreffunc{SeenStructUnionStart}{type.c}\\
\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Variable yychar}
\label{var_yychar_parse-yacc.c}

{\stt int yychar}

\smallskip
\begin{cxreftabiii}
Visible in:\ & parse-yacc.c & \ & \cxreffile{parse-yacc.c}\\
Used in:\ & yyerror() & parse-yacc.c & \cxreffunc{yyerror}{parse-yacc.c}\\
\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Variable yynerrs}
\label{var_yynerrs_parse-yacc.c}

{\stt int yynerrs}

\smallskip
\begin{cxreftabiii}
Visible in:\ & parse-yacc.c & \ & \cxreffile{parse-yacc.c}\\
Used in:\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{External Variables}

{\bf in\_header}
\label{var_in_header_parse-yacc.c}

 When in a header file, some stuff can be skipped over quickly. 

\smallskip
{\stt extern int in\_header}

\smallskip
\begin{cxreftabiii}
Defined in:& preproc.c & \ & \cxrefvar{in_header}{preproc.c}\\
\end{cxreftabiii}


\subsubsection{Local Variables}

{\bf scope}
\label{var_scope_parse-yacc.c}

 The scope of the function / variable that is being examined. 

\smallskip
{\stt static int scope}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf in\_function}
\label{var_in_function_parse-yacc.c}

 When in a function or a function definition, the behaviour is different. 

\smallskip
{\stt static int in\_function}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf in\_funcdef}
\label{var_in_funcdef_parse-yacc.c}

 When in a function or a function definition, the behaviour is different. 

\smallskip
{\stt static int in\_funcdef}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf in\_funcbody}
\label{var_in_funcbody_parse-yacc.c}

 When in a function or a function definition, the behaviour is different. 

\smallskip
{\stt static int in\_funcbody}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf first}
\label{var_first_parse-yacc.c}

 The parsing stack   first value. 

\smallskip
{\stt static stack first}

\smallskip
\begin{cxreftabiii}
Used in:\ & parse-yacc.c & \ & \cxreffile{parse-yacc.c}\\
\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & push() & \ & \cxreffunc{push}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf list}
\label{var_list_parse-yacc.c}

 The parsing stack   list of all values. 

\smallskip
{\stt static stack* list}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & pop() & \ & \cxreffunc{pop}{parse-yacc.c}\\
\ & push() & \ & \cxreffunc{push}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf current}
\label{var_current_parse-yacc.c}

 The parsing stack   current values. 

\smallskip
{\stt static stack* current}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & pop() & \ & \cxreffunc{pop}{parse-yacc.c}\\
\ & push() & \ & \cxreffunc{push}{parse-yacc.c}\\
\ & reset() & \ & \cxreffunc{reset}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf depth}
\label{var_depth_parse-yacc.c}

 The depth of the stack   currently in use. 

\smallskip
{\stt static int depth}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & pop() & \ & \cxreffunc{pop}{parse-yacc.c}\\
\ & push() & \ & \cxreffunc{push}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf maxdepth}
\label{var_maxdepth_parse-yacc.c}

 The depth of the stack   total malloced. 

\smallskip
{\stt static int maxdepth}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & push() & \ & \cxreffunc{push}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf common\_comment}
\label{var_common_comment_parse-yacc.c}

 Declarations that are in the same statement share this comment. 

\smallskip
{\stt static char* common\_comment}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf in\_structunion}
\label{var_in_structunion_parse-yacc.c}

 When inside a struct / union / enum definition, this is the depth. 

\smallskip
{\stt static int in\_structunion}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & cxref\_yylex() & \ & \cxreffunc{cxref_yylex}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf comp\_type}
\label{var_comp_type_parse-yacc.c}

 When inside a struct / union definition, this is the component type. 

\smallskip
{\stt static char* comp\_type}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf in\_type\_spec}
\label{var_in_type_spec_parse-yacc.c}

 To solve the problem where a type name is used as an identifier. 

\smallskip
{\stt static int in\_type\_spec}

\smallskip
\begin{cxreftabiii}
Used in:\ & ResetParser() & \ & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & cxref\_yylex() & \ & \cxreffunc{cxref_yylex}{parse-yacc.c}\\
\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yytranslate}
\label{var_yytranslate_parse-yacc.c}

{\stt static const char yytranslate[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yyr1}
\label{var_yyr1_parse-yacc.c}

{\stt static const short yyr1[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yyr2}
\label{var_yyr2_parse-yacc.c}

{\stt static const short yyr2[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yydefact}
\label{var_yydefact_parse-yacc.c}

{\stt static const short yydefact[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yydefgoto}
\label{var_yydefgoto_parse-yacc.c}

{\stt static const short yydefgoto[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yypact}
\label{var_yypact_parse-yacc.c}

{\stt static const short yypact[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yypgoto}
\label{var_yypgoto_parse-yacc.c}

{\stt static const short yypgoto[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yytable}
\label{var_yytable_parse-yacc.c}

{\stt static const short yytable[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}

\medskip
{\bf yycheck}
\label{var_yycheck_parse-yacc.c}

{\stt static const short yycheck[]}

\smallskip
\begin{cxreftabiii}
Used in:\ & yyparse() & \ & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}


\subsection{Functions}


\subsubsection{Global Function ResetParser()}
\label{func_ResetParser_parse-yacc.c}

  Reset the Parser, ready for the next file.

\smallskip
{\stt void ResetParser ( void )}

\smallskip
\begin{cxreftabiii}
Prototype:& cxref.h & \ & \cxreffile{cxref.h}\\
Calls:\ & SafeFree() & memory.c & \cxreffunc{SafeFree}{memory.c}\\
\ & reset() & parse-yacc.c & \cxreffunc{reset}{parse-yacc.c}\\
Called by:\ & main() & cxref.c & \cxreffunc{main}{cxref.c}\\
\cxreftabbreak{cxreftabiii}
Refs Var:\ & common\_comment & parse-yacc.c & \cxrefvar{common_comment}{parse-yacc.c}\\
\ & comp\_type & parse-yacc.c & \cxrefvar{comp_type}{parse-yacc.c}\\
\ & current & parse-yacc.c & \cxrefvar{current}{parse-yacc.c}\\
\ & depth & parse-yacc.c & \cxrefvar{depth}{parse-yacc.c}\\
\ & first & parse-yacc.c & \cxrefvar{first}{parse-yacc.c}\\
\ & in\_funcbody & parse-yacc.c & \cxrefvar{in_funcbody}{parse-yacc.c}\\
\ & in\_funcdef & parse-yacc.c & \cxrefvar{in_funcdef}{parse-yacc.c}\\
\ & in\_function & parse-yacc.c & \cxrefvar{in_function}{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
\ & in\_structunion & parse-yacc.c & \cxrefvar{in_structunion}{parse-yacc.c}\\
\ & in\_type\_spec & parse-yacc.c & \cxrefvar{in_type_spec}{parse-yacc.c}\\
\ & in\_typedef & parse-yacc.c & \cxrefvar{in_typedef}{parse-yacc.c}\\
\ & list & parse-yacc.c & \cxrefvar{list}{parse-yacc.c}\\
\ & maxdepth & parse-yacc.c & \cxrefvar{maxdepth}{parse-yacc.c}\\
\ & scope & parse-yacc.c & \cxrefvar{scope}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Global Function yyparse()}
\label{func_yyparse_parse-yacc.c}

{\stt int yyparse ( void )}

\smallskip
\begin{cxreftabiii}
Prototype:& parse-yy.h & \ & \cxreffile{parse-yy.h}\\
Calls:\ & CheckFunctionVariableRef() & func.c & \cxreffunc{CheckFunctionVariableRef}{func.c}\\
\ & ConcatStrings() & memory.c & \cxreffunc{ConcatStrings}{memory.c}\\
\ & CopyString() & memory.c & \cxreffunc{CopyString}{memory.c}\\
\cxreftabbreak{cxreftabiii}
\ & DownScope() & var.c & \cxreffunc{DownScope}{var.c}\\
\ & GetCurrentComment() & comment.c & \cxreffunc{GetCurrentComment}{comment.c}\\
\ & IsAScopeVariable() & var.c & \cxreffunc{IsAScopeVariable}{var.c}\\
\ & IsATypeName() & type.c & \cxreffunc{IsATypeName}{type.c}\\
\ & SeenFunctionArg() & func.c & \cxreffunc{SeenFunctionArg}{func.c}\\
\ & SeenFunctionCall() & func.c & \cxreffunc{SeenFunctionCall}{func.c}\\
\ & SeenFunctionDeclaration() & func.c & \cxreffunc{SeenFunctionDeclaration}{func.c}\\
\ & SeenFunctionDefinition() & func.c & \cxreffunc{SeenFunctionDefinition}{func.c}\\
\cxreftabbreak{cxreftabiii}
\ & SeenFunctionProto() & func.c & \cxreffunc{SeenFunctionProto}{func.c}\\
\ & SeenScopeVariable() & var.c & \cxreffunc{SeenScopeVariable}{var.c}\\
\ & SeenStructUnionComp() & type.c & \cxreffunc{SeenStructUnionComp}{type.c}\\
\ & SeenStructUnionEnd() & type.c & \cxreffunc{SeenStructUnionEnd}{type.c}\\
\ & SeenStructUnionStart() & type.c & \cxreffunc{SeenStructUnionStart}{type.c}\\
\ & SeenTypedef() & type.c & \cxreffunc{SeenTypedef}{type.c}\\
\ & SeenTypedefName() & type.c & \cxreffunc{SeenTypedefName}{type.c}\\
\ & SeenVariableDefinition() & var.c & \cxreffunc{SeenVariableDefinition}{var.c}\\
\cxreftabbreak{cxreftabiii}
\ & SetCurrentComment() & comment.c & \cxreffunc{SetCurrentComment}{comment.c}\\
\ & UpScope() & var.c & \cxreffunc{UpScope}{var.c}\\
\ & \_\_yy\_memcpy() & parse-yacc.c & \cxreffunc{__yy_memcpy}{parse-yacc.c}\\
\ & cxref\_yylex() & parse-yacc.c & \cxreffunc{cxref_yylex}{parse-yacc.c}\\
\ & pop() & parse-yacc.c & \cxreffunc{pop}{parse-yacc.c}\\
\ & push() & parse-yacc.c & \cxreffunc{push}{parse-yacc.c}\\
\ & reset() & parse-yacc.c & \cxreffunc{reset}{parse-yacc.c}\\
\ & yyerror() & parse-yacc.c & \cxreffunc{yyerror}{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
\ & \cxreftabiiispan{ alloca(), strcmp(), strlen(), strstr()} &\\
Called by:\ & DocumentTheFile() & cxref.c & \cxreffunc{DocumentTheFile}{cxref.c}\\
Refs Var:\ & common\_comment & parse-yacc.c & \cxrefvar{common_comment}{parse-yacc.c}\\
\ & comp\_type & parse-yacc.c & \cxrefvar{comp_type}{parse-yacc.c}\\
\ & current & parse-yacc.c & \cxrefvar{current}{parse-yacc.c}\\
\ & in\_funcbody & parse-yacc.c & \cxrefvar{in_funcbody}{parse-yacc.c}\\
\ & in\_funcdef & parse-yacc.c & \cxrefvar{in_funcdef}{parse-yacc.c}\\
\ & in\_function & parse-yacc.c & \cxrefvar{in_function}{parse-yacc.c}\\
\ & in\_header & preproc.c & \cxrefvar{in_header}{preproc.c}\\
\cxreftabbreak{cxreftabiii}
\ & in\_structunion & parse-yacc.c & \cxrefvar{in_structunion}{parse-yacc.c}\\
\ & in\_type\_spec & parse-yacc.c & \cxrefvar{in_type_spec}{parse-yacc.c}\\
\ & in\_typedef & parse-yacc.c & \cxrefvar{in_typedef}{parse-yacc.c}\\
\ & scope & parse-yacc.c & \cxrefvar{scope}{parse-yacc.c}\\
\ & yychar & parse-yacc.c & \cxrefvar{yychar}{parse-yacc.c}\\
\ & yycheck & parse-yacc.c & \cxrefvar{yycheck}{parse-yacc.c}\\
\ & yydefact & parse-yacc.c & \cxrefvar{yydefact}{parse-yacc.c}\\
\ & yydefgoto & parse-yacc.c & \cxrefvar{yydefgoto}{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
\ & yylval & parse-yacc.c & \cxrefvar{yylval}{parse-yacc.c}\\
\ & yynerrs & parse-yacc.c & \cxrefvar{yynerrs}{parse-yacc.c}\\
\ & yypact & parse-yacc.c & \cxrefvar{yypact}{parse-yacc.c}\\
\ & yypgoto & parse-yacc.c & \cxrefvar{yypgoto}{parse-yacc.c}\\
\ & yyr1 & parse-yacc.c & \cxrefvar{yyr1}{parse-yacc.c}\\
\ & yyr2 & parse-yacc.c & \cxrefvar{yyr2}{parse-yacc.c}\\
\ & yytable & parse-yacc.c & \cxrefvar{yytable}{parse-yacc.c}\\
\ & yytranslate & parse-yacc.c & \cxrefvar{yytranslate}{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
\end{cxreftabiii}


\subsubsection{Local Function \_\_yy\_memcpy()}
\label{func___yy_memcpy_parse-yacc.c}

{\stt static void \_\_yy\_memcpy ( char* to, char* from, int count )}

\smallskip
\begin{cxreftabiii}
Called by:\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Local Function cxref\_yylex()}
\label{func_cxref_yylex_parse-yacc.c}

  Call the lexer, the feedback from the parser to the lexer is applied here.

\smallskip
{\stt static int cxref\_yylex ( void )}

\smallskip
\begin{cxrefarglist}
\cxrefargitem{int cxref\_yylex} Returns the value from the lexer, modified due to parser feedback.
\end{cxrefarglist}

\smallskip
\begin{cxreftabiii}
Prototype:& parse-yacc.c & \ & \cxreffile{parse-yacc.c}\\
Calls:\ & yylex() & parse-lex.c & \cxreffunc{yylex}{parse-lex.c}\\
Called by:\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
Refs Var:\ & in\_structunion & parse-yacc.c & \cxrefvar{in_structunion}{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
\ & in\_type\_spec & parse-yacc.c & \cxrefvar{in_type_spec}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Local Function pop()}
\label{func_pop_parse-yacc.c}

  Pop a level from the stack.

\smallskip
{\stt static void pop ( void )}

\smallskip
\begin{cxreftabiii}
Calls:\ & reset() & parse-yacc.c & \cxreffunc{reset}{parse-yacc.c}\\
Called by:\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
Refs Var:\ & current & parse-yacc.c & \cxrefvar{current}{parse-yacc.c}\\
\ & depth & parse-yacc.c & \cxrefvar{depth}{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
\ & list & parse-yacc.c & \cxrefvar{list}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Local Function push()}
\label{func_push_parse-yacc.c}

  Push a level onto the stack.

\smallskip
{\stt static void push ( void )}

\smallskip
\begin{cxreftabiii}
Calls:\ & SafeMalloc() & memory.c & \cxreffunc{SafeMalloc}{memory.c}\\
\ & SafeRealloc() & memory.c & \cxreffunc{SafeRealloc}{memory.c}\\
\ & reset() & parse-yacc.c & \cxreffunc{reset}{parse-yacc.c}\\
Called by:\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
Refs Var:\ & current & parse-yacc.c & \cxrefvar{current}{parse-yacc.c}\\
\ & depth & parse-yacc.c & \cxrefvar{depth}{parse-yacc.c}\\
\ & first & parse-yacc.c & \cxrefvar{first}{parse-yacc.c}\\
\ & list & parse-yacc.c & \cxrefvar{list}{parse-yacc.c}\\
\ & maxdepth & parse-yacc.c & \cxrefvar{maxdepth}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Local Function reset()}
\label{func_reset_parse-yacc.c}

  Reset the current level on the stack.

\smallskip
{\stt static void reset ( void )}

\smallskip
\begin{cxreftabiii}
Called by:\ & ResetParser() & parse-yacc.c & \cxreffunc{ResetParser}{parse-yacc.c}\\
\ & pop() & parse-yacc.c & \cxreffunc{pop}{parse-yacc.c}\\
\ & push() & parse-yacc.c & \cxreffunc{push}{parse-yacc.c}\\
\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
\cxreftabbreak{cxreftabiii}
Refs Var:\ & current & parse-yacc.c & \cxrefvar{current}{parse-yacc.c}\\
\end{cxreftabiii}


\subsubsection{Local Function yyerror()}
\label{func_yyerror_parse-yacc.c}

  Stop parsing the current file, due to an error.

\smallskip
{\stt static void yyerror ( char* s )}

\smallskip
\begin{cxrefarglist}
\cxrefargitem{char* s} The error message to print out.
\end{cxrefarglist}

\smallskip
\begin{cxreftabiii}
Prototype:& parse-yacc.c & \ & \cxreffile{parse-yacc.c}\\
Calls:\ & yylex() & parse-lex.c & \cxreffunc{yylex}{parse-lex.c}\\
\ & \cxreftabiiispan{ fflush(), fprintf()} &\\
Called by:\ & yyparse() & parse-yacc.c & \cxreffunc{yyparse}{parse-yacc.c}\\
Refs Var:\ & parse\_file & parse-lex.c & \cxrefvar{parse_file}{parse-lex.c}\\
\cxreftabbreak{cxreftabiii}
\ & parse\_line & parse-lex.c & \cxrefvar{parse_line}{parse-lex.c}\\
\ & yychar & parse-yacc.c & \cxrefvar{yychar}{parse-yacc.c}\\
\end{cxreftabiii}

