Merge glibc-ports into ports/ directory.
[platform/upstream/glibc.git] / sunrpc / rpc_scan.h
1 /*      @(#)rpc_scan.h  1.3  90/08/29  */
2
3 /*
4  * Copyright (c) 2010, Oracle America, Inc.
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  *     * Redistributions of source code must retain the above copyright
10  *       notice, this list of conditions and the following disclaimer.
11  *     * Redistributions in binary form must reproduce the above
12  *       copyright notice, this list of conditions and the following
13  *       disclaimer in the documentation and/or other materials
14  *       provided with the distribution.
15  *     * Neither the name of the "Oracle America, Inc." nor the names of its
16  *       contributors may be used to endorse or promote products derived
17  *       from this software without specific prior written permission.
18  *
19  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
22  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
23  *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
24  *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
26  *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * rpc_scan.h, Definitions for the RPCL scanner
33  */
34
35 /*
36  * kinds of tokens
37  */
38 enum tok_kind {
39         TOK_IDENT,
40         TOK_CHARCONST,
41         TOK_STRCONST,
42         TOK_LPAREN,
43         TOK_RPAREN,
44         TOK_LBRACE,
45         TOK_RBRACE,
46         TOK_LBRACKET,
47         TOK_RBRACKET,
48         TOK_LANGLE,
49         TOK_RANGLE,
50         TOK_STAR,
51         TOK_COMMA,
52         TOK_EQUAL,
53         TOK_COLON,
54         TOK_SEMICOLON,
55         TOK_CONST,
56         TOK_STRUCT,
57         TOK_UNION,
58         TOK_SWITCH,
59         TOK_CASE,
60         TOK_DEFAULT,
61         TOK_ENUM,
62         TOK_TYPEDEF,
63         TOK_INT,
64         TOK_SHORT,
65         TOK_LONG,
66         TOK_HYPER,
67         TOK_UNSIGNED,
68         TOK_FLOAT,
69         TOK_DOUBLE,
70         TOK_OPAQUE,
71         TOK_CHAR,
72         TOK_STRING,
73         TOK_BOOL,
74         TOK_VOID,
75         TOK_PROGRAM,
76         TOK_VERSION,
77         TOK_EOF
78 };
79 typedef enum tok_kind tok_kind;
80
81 /*
82  * a token
83  */
84 struct token {
85         tok_kind kind;
86         const char *str;
87 };
88 typedef struct token token;
89
90
91 /*
92  * routine interface
93  */
94 void scan(tok_kind expect, token *tokp);
95 void scan2(tok_kind expect1, tok_kind expect2, token *tokp);
96 void scan3(tok_kind expect1, tok_kind expect2, tok_kind expect3, token *tokp);
97 void scan_num(token *tokp);
98 void peek(token *tokp);
99 int peekscan(tok_kind expect, token *tokp);
100 void get_token(token *tokp);
101 void expected1(tok_kind exp1) __attribute__ ((noreturn));
102 void expected2(tok_kind exp1, tok_kind exp2)  __attribute__ ((noreturn));
103 void expected3(tok_kind exp1, tok_kind exp2, tok_kind exp3)
104      __attribute__ ((noreturn));