# File parse-yacc.c

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

C Cross Referencing & Documentation tool. Version 1.5.
C parser.

References Variables: | first | parse-yacc.c

## Included Files

- `#include <string.h>`

- `#include "parse-yy.h"`
  - `#include <stdio.h>`
  - `#include <stdlib.h>`

- `#include "cxref.h"`
  - `#include "datatype.h"`

- `#include "memory.h"`

- `#include <stdio.h>`

## Preprocessor definitions

`#define YYBISON 1`

`#define IDENTIFIER 258`

`#define TYPE_NAME 259`

`#define LITERAL 260`

`#define STRING_LITERAL 261`

`#define ELLIPSES 262`

`#define MUL_ASSIGN 263`

`#define DIV_ASSIGN 264`

`#define MOD_ASSIGN 265`

`#define ADD_ASSIGN 266`

`#define SUB_ASSIGN 267`

`#define LEFT_ASSIGN 268`

`#define RIGHT_ASSIGN 269`

`#define AND_ASSIGN 270`

`#define XOR_ASSIGN 271`

`#define OR_ASSIGN 272`

`#define EQ_OP 273`

`#define NE_OP 274`

`#define PTR_OP 275`

`#define AND_OP 276`

`#define OR_OP 277`

`#define DEC_OP 278`

`#define INC_OP 279`

`#define LE_OP 280`

`#define GE_OP 281`

`#define LEFT_SHIFT 282`

`#define RIGHT_SHIFT 283`

`#define SIZEOF 284`

`#define TYPEDEF 285`

`#define EXTERN 286`

`#define STATIC 287`

`#define AUTO 288`

`#define REGISTER 289`

`#define CONST 290`

`#define VOLATILE 291`

`#define VOID 292`

`#define INLINE 293`

`#define CHAR 294`

`#define SHORT 295`

`#define INT 296`

`#define LONG 297`

`#define SIGNED 298`

`#define UNSIGNED 299`

`#define FLOAT 300`

`#define DOUBLE 301`

`#define STRUCT 302`

`#define UNION 303`

`#define ENUM 304`

`#define CASE 305`

`#define DEFAULT 306`

`#define IF 307`

`#define ELSE 308`

`#define SWITCH 309`

`#define WHILE 310`

`#define DO 311`

`#define FOR 312`

`#define GOTO 313`

`#define CONTINUE 314`

`#define BREAK 315`

`#define RETURN 316`

`#define ASM 317`

`#define yylex cxref_yylex`

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

`#define SCOPE`

`#define YYFINAL 554`

`#define YYFLAG 32768`

`#define YYNTBASE 87`

`#define YYTRANSLATE( x )`

`#define YYLAST 1566`

`#define yyerrok`

`#define yyclearin`

`#define YYEMPTY 2`

`#define YYEOF 0`

`#define YYACCEPT`

`#define YYABORT`

`#define YYERROR`

`#define YYFAIL`

`#define YYRECOVERING`

`#define YYBACKUP( token, value )`

`#define YYTERROR 1`

`#define YYERRCODE 256`

`#define YYLEX yylex`

`#define YYINITDEPTH 200`

`#define YYMAXDEPTH 10000`

`#define YYPARSE_PARAM_ARG`

`#define YYPARSE_PARAM_DECL`

`#define YYPOPSTACK`

## Typedef stack

A structure to hold the information about an object.

`typedef struct _stack stack`

`struct _stack` |
`{` |
`char* name;` | The name of the object.
`char* type;` | The type of the object.
`char* qual;` | The type qualifier of the object.
`}` |

## Global Variable yylval

For communication between the lex and yacc code.

`char* yylval`

Visible in: |  | cxref.c
|  | func.c
|  | parse-lex.c
|  | parse-yacc.c
|  | parse-yacc.h
|  | parse-yy.h
|  | preproc.c
|  | type.c
|  | var.c
Used in: | yylex() | parse-lex.c
| yyparse() | parse-yacc.c

## Global Variable in_typedef

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

`int in_typedef`

Visible in: |  | parse-yacc.c
|  | type.c
Used in: | ResetParser() | parse-yacc.c
| SeenStructUnionEnd() | type.c
| SeenStructUnionStart() | type.c
| yyparse() | parse-yacc.c

## Global Variable yychar

`int yychar`

Visible in: |  | parse-yacc.c
Used in: | yyerror() | parse-yacc.c
| yyparse() | parse-yacc.c

## Global Variable yynerrs

`int yynerrs`

Visible in: |  | parse-yacc.c
Used in: | yyparse() | parse-yacc.c

## External Variables

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

`extern int in_header`

Defined in: | preproc.c

## Local Variables

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

`static int scope`

Used in: | ResetParser()
| yyparse()

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

`static int in_function`

Used in: | ResetParser()
| yyparse()

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

`static int in_funcdef`

Used in: | ResetParser()
| yyparse()

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

`static int in_funcbody`

Used in: | ResetParser()
| yyparse()

first
The parsing stack first value.

`static stack first`

Used in: |  | parse-yacc.c
| ResetParser()
| push()

list
The parsing stack list of all values.

`static stack* list`

Used in: | ResetParser()
| pop()
| push()

current
The parsing stack current values.

`static stack* current`

Used in: | ResetParser()
| pop()
| push()
| reset()
| yyparse()

depth
The depth of the stack currently in use.

`static int depth`

Used in: | ResetParser()
| pop()
| push()

maxdepth
The depth of the stack total malloced.

`static int maxdepth`

Used in: | ResetParser()
| push()

common_comment
Declarations that are in the same statement share this comment.

`static char* common_comment`

Used in: | ResetParser()
| yyparse()

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

`static int in_structunion`

Used in: | ResetParser()
| cxref_yylex()
| yyparse()

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

`static char* comp_type`

Used in: | ResetParser()
| yyparse()

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

`static int in_type_spec`

Used in: | ResetParser()
| cxref_yylex()
| yyparse()

yytranslate
`static const char yytranslate[]`

Used in: | yyparse()

yyr1
`static const short yyr1[]`

Used in: | yyparse()

yyr2
`static const short yyr2[]`

Used in: | yyparse()

yydefact
`static const short yydefact[]`

Used in: | yyparse()

yydefgoto
`static const short yydefgoto[]`

Used in: | yyparse()

yypact
`static const short yypact[]`

Used in: | yyparse()

yypgoto
`static const short yypgoto[]`

Used in: | yyparse()

yytable
`static const short yytable[]`

Used in: | yyparse()

yycheck
`static const short yycheck[]`

Used in: | yyparse()

## Global Function ResetParser()

Reset the Parser, ready for the next file.

`void ResetParser ( void )`

Prototyped in: | cxref.h
Calls: | SafeFree() | memory.c
| reset() | parse-yacc.c
Called by: | main() | cxref.c
References Variables: | common_comment | parse-yacc.c
| comp_type | parse-yacc.c
| current | parse-yacc.c
| depth | parse-yacc.c
| first | parse-yacc.c
| in_funcbody | parse-yacc.c
| in_funcdef | parse-yacc.c
| in_function | parse-yacc.c
| in_structunion | parse-yacc.c
| in_type_spec | parse-yacc.c
| in_typedef | parse-yacc.c
| list | parse-yacc.c
| maxdepth | parse-yacc.c
| scope | parse-yacc.c

## Global Function yyparse()

`int yyparse ( void )`

Prototyped in: | parse-yy.h
Calls: | CheckFunctionVariableRef() | func.c
| ConcatStrings() | memory.c
| CopyString() | memory.c
| DownScope() | var.c
| GetCurrentComment() | comment.c
| IsAScopeVariable() | var.c
| IsATypeName() | type.c
| SeenFunctionArg() | func.c
| SeenFunctionCall() | func.c
| SeenFunctionDeclaration() | func.c
| SeenFunctionDefinition() | func.c
| SeenFunctionProto() | func.c
| SeenScopeVariable() | var.c
| SeenStructUnionComp() | type.c
| SeenStructUnionEnd() | type.c
| SeenStructUnionStart() | type.c
| SeenTypedef() | type.c
| SeenTypedefName() | type.c
| SeenVariableDefinition() | var.c
| SetCurrentComment() | comment.c
| UpScope() | var.c
| __yy_memcpy() | parse-yacc.c
| cxref_yylex() | parse-yacc.c
| pop() | parse-yacc.c
| push() | parse-yacc.c
| reset() | parse-yacc.c
| yyerror() | parse-yacc.c
| alloca(), strcmp(), strlen(), strstr()
Called by: | DocumentTheFile() | cxref.c
References Variables: | common_comment | parse-yacc.c
| comp_type | parse-yacc.c
| current | parse-yacc.c
| in_funcbody | parse-yacc.c
| in_funcdef | parse-yacc.c
| in_function | parse-yacc.c
| in_header | preproc.c
| in_structunion | parse-yacc.c
| in_type_spec | parse-yacc.c
| in_typedef | parse-yacc.c
| scope | parse-yacc.c
| yychar | parse-yacc.c
| yycheck | parse-yacc.c
| yydefact | parse-yacc.c
| yydefgoto | parse-yacc.c
| yylval | parse-yacc.c
| yynerrs | parse-yacc.c
| yypact | parse-yacc.c
| yypgoto | parse-yacc.c
| yyr1 | parse-yacc.c
| yyr2 | parse-yacc.c
| yytable | parse-yacc.c
| yytranslate | parse-yacc.c

## Local Function __yy_memcpy()

`static void __yy_memcpy ( char* to, char* from, int count )`

Called by: | yyparse() | parse-yacc.c

## Local Function cxref_yylex()

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

`static int cxref_yylex ( void )`

`int cxref_yylex`
  Returns the value from the lexer, modified due to parser feedback.

Prototyped in: | parse-yacc.c
Calls: | yylex() | parse-lex.c
Called by: | yyparse() | parse-yacc.c
References Variables: | in_structunion | parse-yacc.c
| in_type_spec | parse-yacc.c

## Local Function pop()

Pop a level from the stack.

`static void pop ( void )`

Calls: | reset() | parse-yacc.c
Called by: | yyparse() | parse-yacc.c
References Variables: | current | parse-yacc.c
| depth | parse-yacc.c
| list | parse-yacc.c

## Local Function push()

Push a level onto the stack.

`static void push ( void )`

Calls: | SafeMalloc() | memory.c
| SafeRealloc() | memory.c
| reset() | parse-yacc.c
Called by: | yyparse() | parse-yacc.c
References Variables: | current | parse-yacc.c
| depth | parse-yacc.c
| first | parse-yacc.c
| list | parse-yacc.c
| maxdepth | parse-yacc.c

## Local Function reset()

Reset the current level on the stack.

`static void reset ( void )`

Called by: | ResetParser() | parse-yacc.c
| pop() | parse-yacc.c
| push() | parse-yacc.c
| yyparse() | parse-yacc.c
References Variables: | current | parse-yacc.c

## Local Function yyerror()

Stop parsing the current file, due to an error.

`static void yyerror ( char* s )`

`char* s`
  The error message to print out.

Prototyped in: | parse-yacc.c
Calls: | yylex() | parse-lex.c
| fflush(), fprintf()
Called by: | yyparse() | parse-yacc.c
References Variables: | parse_file | parse-lex.c
| parse_line | parse-lex.c
| yychar | parse-yacc.c