Subversion Repositories tendra.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 7u83 1
/*
7 7u83 2
 * Copyright (c) 2002-2005 The TenDRA Project <http://www.tendra.org/>.
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions are met:
7
 *
8
 * 1. Redistributions of source code must retain the above copyright notice,
9
 *    this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
11
 *    this list of conditions and the following disclaimer in the documentation
12
 *    and/or other materials provided with the distribution.
13
 * 3. Neither the name of The TenDRA Project nor the names of its contributors
14
 *    may be used to endorse or promote products derived from this software
15
 *    without specific, prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
18
 * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
19
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
21
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
 * EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 *
29
 * $Id$
30
 */
31
/*
2 7u83 32
    		 Crown Copyright (c) 1997
7 7u83 33
 
2 7u83 34
    This TenDRA(r) Computer Program is subject to Copyright
35
    owned by the United Kingdom Secretary of State for Defence
36
    acting through the Defence Evaluation and Research Agency
37
    (DERA).  It is made available to Recipients with a
38
    royalty-free licence for its use, reproduction, transfer
39
    to other parties and amendment for any purpose not excluding
40
    product development provided that any such use et cetera
41
    shall be deemed to be acceptance of the following conditions:-
7 7u83 42
 
2 7u83 43
        (1) Its Recipients shall ensure that this Notice is
44
        reproduced upon any copies or amended versions of it;
7 7u83 45
 
2 7u83 46
        (2) Any amended version of it shall be clearly marked to
47
        show both the nature of and the organisation responsible
48
        for the relevant amendment or amendments;
7 7u83 49
 
2 7u83 50
        (3) Its onward transfer from a recipient to another
51
        party shall be deemed to be that party's acceptance of
52
        these conditions;
7 7u83 53
 
2 7u83 54
        (4) DERA gives no warranty or assurance as to its
55
        quality or suitability for any purpose and DERA accepts
56
        no liability whatsoever in relation to any use to which
57
        it may be put.
58
*/
59
 
60
 
61
/*** c-lexer.h --- SID C lexical analyser.
62
 *
63
 ** Author: Steve Folkes <smf@hermes.mod.uk>
64
 *
65
 *** Commentary:
66
 *
67
 * See the file "c-lexer.c" for details.
68
 *
69
 *** Change Log:
70
 * $Log: c-lexer.h,v $
71
 * Revision 1.1.1.1  1998/01/17  15:57:42  release
72
 * First version to be checked into rolling release.
73
 *
74
 * Revision 1.2  1994/12/15  09:55:58  smf
75
 * Brought into line with OSSG C Coding Standards Document, as per
76
 * "CR94_178.sid+tld-update".
77
 *
78
 * Revision 1.1.1.1  1994/07/25  16:04:14  smf
79
 * Initial import of SID 1.8 non shared files.
80
 *
81
**/
82
 
83
/****************************************************************************/
84
 
85
#ifndef H_C_LEXER
86
#define H_C_LEXER
87
 
88
#include "os-interface.h"
89
#include "c-code.h"
90
#include "dstring.h"
91
#include "istream.h"
92
 
93
/**** Note:
94
 *
95
 * It is important that any changes to this enumerated type declaration are
96
 * reflected in the "c-parser.sid" file.
97
**/
98
 
99
#ifdef FS_NO_ENUM
100
typedef int CTokenT, *CTokenP;
101
#define C_TOK_BLT_PREFIXES		(0)
102
#define C_TOK_BLT_MAPS			(1)
103
#define C_TOK_BLT_ASSIGNMENTS		(2)
104
#define C_TOK_BLT_TERMINALS		(3)
105
#define C_TOK_BLT_HEADER		(4)
106
#define C_TOK_BLT_ACTIONS		(5)
107
#define C_TOK_BLT_TRAILER		(6)
108
#define C_TOK_BLT_RESULT_ASSIGN		(7)
109
#define C_TOK_SID_IDENTIFIER		(8)
110
#define C_TOK_C_IDENTIFIER		(9)
111
#define C_TOK_SEPARATOR			(10)
112
#define C_TOK_TYPEMARK			(11)
113
#define C_TOK_TERMINATOR		(12)
114
#define C_TOK_BEGIN_ACTION		(13)
115
#define C_TOK_DEFINE			(14)
116
#define C_TOK_END_ACTION		(15)
117
#define C_TOK_CODE			(16)
118
#define C_TOK_ARROW			(17)
119
#define C_TOK_OPEN_TUPLE		(18)
120
#define C_TOK_CLOSE_TUPLE		(19)
121
#define C_TOK_BLT_PARAM_ASSIGN		(20)
122
#define C_TOK_REFERENCE			(21)
123
#define C_TOK_EOF			(22)
124
#define C_TOK_ERROR			(23)
125
#else
126
typedef enum {
127
    C_TOK_BLT_PREFIXES,
128
    C_TOK_BLT_MAPS,
129
    C_TOK_BLT_ASSIGNMENTS,
130
    C_TOK_BLT_TERMINALS,
131
    C_TOK_BLT_HEADER,
132
    C_TOK_BLT_ACTIONS,
133
    C_TOK_BLT_TRAILER,
134
    C_TOK_BLT_RESULT_ASSIGN,
135
    C_TOK_SID_IDENTIFIER,
136
    C_TOK_C_IDENTIFIER,
137
    C_TOK_SEPARATOR,
138
    C_TOK_TYPEMARK,
139
    C_TOK_TERMINATOR,
140
    C_TOK_BEGIN_ACTION,
141
    C_TOK_DEFINE,
142
    C_TOK_END_ACTION,
143
    C_TOK_CODE,
144
    C_TOK_ARROW,
145
    C_TOK_OPEN_TUPLE,
146
    C_TOK_CLOSE_TUPLE,
147
    C_TOK_BLT_PARAM_ASSIGN,
148
    C_TOK_REFERENCE,
149
    C_TOK_EOF,
150
    C_TOK_ERROR
151
} CTokenT, *CTokenP;
152
#endif /* defined (FS_NO_ENUM) */
153
 
154
typedef struct CLexT {
155
    CTokenT			t;
156
    union {
157
	NStringT		string;
158
	CCodeP			code;
159
    } u;
160
} CLexT, *CLexP;
161
 
162
typedef struct CLexerStreamT {
163
    IStreamT			istream;
164
    CLexT			token;
165
    CTokenT			saved_terminal;
166
} CLexerStreamT, *CLexerStreamP;
167
 
168
/*--------------------------------------------------------------------------*/
169
 
7 7u83 170
extern void		c_lexer_init(CLexerStreamP, IStreamP);
171
extern void		c_lexer_close(CLexerStreamP);
172
extern CStringP		c_lexer_stream_name(CLexerStreamP);
173
extern unsigned		c_lexer_stream_line(CLexerStreamP);
174
extern CTokenT		c_lexer_get_terminal(CLexerStreamP);
175
extern void		c_lexer_next_token(CLexerStreamP);
176
extern NStringP		c_lexer_string_value(CLexerStreamP);
177
extern CCodeP		c_lexer_code_value(CLexerStreamP);
178
extern void		c_lexer_save_terminal(CLexerStreamP, CTokenT);
179
extern void		c_lexer_restore_terminal(CLexerStreamP);
2 7u83 180
 
181
/*--------------------------------------------------------------------------*/
182
 
183
#ifdef FS_FAST
7 7u83 184
#define c_lexer_close(s)	(istream_close(&((s)->istream)))
185
#define c_lexer_stream_name(s)	(istream_name(&((s)->istream)))
186
#define c_lexer_stream_line(s)	(istream_line(&((s)->istream)))
187
#define c_lexer_get_terminal(s)	((s)->token.t)
188
#define c_lexer_string_value(s)	(&((s)->token.u.string))
189
#define c_lexer_code_value(s)	((s)->token.u.code)
2 7u83 190
#endif /* defined (FS_FAST) */
191
 
192
#endif /* !defined (H_C_LEXER) */
193
 
194
/*
195
 * Local variables(smf):
196
 * eval: (include::add-path-entry "../os-interface" "../library")
197
 * eval: (include::add-path-entry "../transforms" "../output")
198
 * eval: (include::add-path-entry "../c-output" "../generated")
199
 * end:
200
**/