Merge branch 'master' of feistymeow.org:feisty_meow
[feisty_meow.git] / nucleus / tools / dependency_tool / ifparser.h
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 struct IfParser {
61   struct {        /* functions */
62     const char *(*handle_error) (IfParser *, const char *, const char *);
63     int (*eval_variable) (IfParser *, const char *, int);
64     int (*eval_defined) (IfParser *, const char *, int);
65   } funcs;
66   char *data;
67 };
68
69 const char *ParseIfExpression(IfParser *, const char *, int *);
70