|
1 /* |
|
2 * $Xorg: ifparser.h,v 1.3 2000/08/17 19:41:51 cpqbld 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 * | VALUE '?' EXPRESSION ':' EXPRESSION |
|
35 * |
|
36 * VALUE := '(' EXPRESSION ')' |
|
37 * | '!' VALUE |
|
38 * | '-' VALUE |
|
39 * | '~' VALUE |
|
40 * | 'defined' '(' variable ')' |
|
41 * | variable |
|
42 * | number |
|
43 * |
|
44 * BINOP := '*' | '/' | '%' |
|
45 * | '+' | '-' |
|
46 * | '<<' | '>>' |
|
47 * | '<' | '>' | '<=' | '>=' |
|
48 * | '==' | '!=' |
|
49 * | '&' | '^' | '|' |
|
50 * | '&&' | '||' |
|
51 * |
|
52 * The normal C order of precedence is supported. |
|
53 * |
|
54 * |
|
55 * External Entry Points: |
|
56 * |
|
57 * ParseIfExpression parse a string for #if |
|
58 */ |
|
59 |
|
60 /* $XFree86: xc/config/makedepend/ifparser.h,v 3.5 2001/07/25 15:04:40 dawes Exp $ */ |
|
61 |
|
62 #include <stdio.h> |
|
63 |
|
64 typedef int Bool; |
|
65 #define False 0 |
|
66 #define True 1 |
|
67 |
|
68 typedef struct _if_parser { |
|
69 struct { /* functions */ |
|
70 const char *(*handle_error) (struct _if_parser *, const char *, |
|
71 const char *); |
|
72 long (*eval_variable) (struct _if_parser *, const char *, int); |
|
73 int (*eval_defined) (struct _if_parser *, const char *, int); |
|
74 } funcs; |
|
75 char *data; |
|
76 } IfParser; |
|
77 |
|
78 const char *ParseIfExpression ( |
|
79 IfParser *, |
|
80 const char *, |
|
81 long * |
|
82 ); |
|
83 |