xref: /AOO41X/main/soltools/mkdepend/ifparser.h (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*
2  * $XConsortium: ifparser.h,v 1.1 92/08/22 13:05:39 rws Exp $
3  *
4  * Copyright 1992 Network Computing Devices, Inc.
5  *
6  * Permission to use, copy, modify, and distribute this software and its
7  * documentation for any purpose and without fee is hereby granted, provided
8  * that the above copyright notice appear in all copies and that both that
9  * copyright notice and this permission notice appear in supporting
10  * documentation, and that the name of Network Computing Devices may not be
11  * used in advertising or publicity pertaining to distribution of the software
12  * without specific, written prior permission.  Network Computing Devices makes
13  * no representations about the suitability of this software for any purpose.
14  * It is provided ``as is'' without express or implied warranty.
15  *
16  * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17  * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
18  * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
19  * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
20  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
21  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22  * PERFORMANCE OF THIS SOFTWARE.
23  *
24  * Author:  Jim Fulton
25  *          Network Computing Devices, Inc.
26  *
27  * Simple if statement processor
28  *
29  * This module can be used to evaluate string representations of C language
30  * if constructs.  It accepts the following grammar:
31  *
32  *     EXPRESSION   :=  VALUE
33  *           |  VALUE  BINOP    EXPRESSION
34  *
35  *     VALUE        :=  '('  EXPRESSION  ')'
36  *           |  '!'  VALUE
37  *           |  '-'  VALUE
38  *           |  'defined'  '('  variable  ')'
39  *           |  variable
40  *           |  number
41  *
42  *     BINOP        :=  '*' |  '/'  |  '%'
43  *           |  '+' |  '-'
44  *           |  '<<'    |  '>>'
45  *           |  '<' |  '>'  |  '<='  |  '>='
46  *           |  '=='    |  '!='
47  *           |  '&' |  '|'
48  *           |  '&&'    |  '||'
49  *
50  * The normal C order of precidence is supported.
51  *
52  *
53  * External Entry Points:
54  *
55  *     ParseIfExpression        parse a string for #if
56  */
57 
58 #include <stdio.h>
59 
60 typedef int Bool;
61 #define False 0
62 #define True 1
63 
64 typedef struct _if_parser {
65     struct {                /* functions */
66     const char *(*handle_error) (/* struct _if_parser *, const char *,
67                  const char * */);
68     int (*eval_variable) (/* struct _if_parser *, const char *, int */);
69     int (*eval_defined) (/* struct _if_parser *, const char *, int */);
70     } funcs;
71     char *data;
72 } IfParser;
73 
74 const char *ParseIfExpression (/* IfParser *, const char *, int * */);
75 
76