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