-
Notifications
You must be signed in to change notification settings - Fork 0
/
asnip-ada_language.spc
273 lines (241 loc) · 6.67 KB
/
asnip-ada_language.spc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
--------------------------------------------------------------------------
-- ASnip Source Code Decorator
-- Copyright (C) 2006, Georg Bauhaus
--
-- 1. Permission is hereby granted to use, copy, modify and/or distribute
-- this package, provided that:
-- * copyright notices are retained unchanged,
-- * any distribution of this package, whether modified or not,
-- includes this license text.
-- 2. Permission is hereby also granted to distribute binary programs which
-- depend on this package. If the binary program depends on a modified
-- version of this package, you are encouraged to publicly release the
-- modified version of this package.
--
-- THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT WARRANTY. ANY EXPRESS OR
-- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-- DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE TO ANY PARTY FOR
-- ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-- DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THIS PACKAGE.
--------------------------------------------------------------------------
-- eMail: [email protected]
with Ada.Strings.Wide_Maps;
with ASnip.Support;
pragma elaborate(ASnip.Support);
private package ASnip.Ada_Language is
-- constants etc. for describing the tokens that will be found in input text
use Support;
function is_reserved_word(list: WORDLIST; s: STR) return BOOLEAN;
-- `s` is on the `list` of reserved words
-- NOTE: words on the lists must be in alphabetical order.
Num_Ada_keywords: constant := 72;
-- Ada 2005, copied from draft 13 of AARM Ada 2005
Keywords: constant WORDLIST(1 .. num_Ada_keywords) :=
(+"abort",
+"abs",
+"abstract",
+"accept",
+"access",
+"aliased",
+"all",
+"and",
+"array",
+"at",
+"begin",
+"body",
+"case",
+"constant",
+"declare",
+"delay",
+"delta",
+"digits",
+"do",
+"else",
+"elsif",
+"end",
+"entry",
+"exception",
+"exit",
+"for",
+"function",
+"generic",
+"goto",
+"if",
+"in",
+"interface",
+"is",
+"limited",
+"loop",
+"mod",
+"new",
+"not",
+"null",
+"of",
+"or",
+"others",
+"out",
+"overriding",
+"package",
+"pragma",
+"private",
+"procedure",
+"protected",
+"raise",
+"range",
+"record",
+"rem",
+"renames",
+"requeue",
+"return",
+"reverse",
+"select",
+"separate",
+"subtype",
+"synchronized",
+"tagged",
+"task",
+"terminate",
+"then",
+"type",
+"until",
+"use",
+"when",
+"while",
+"with",
+"xor");
num_Ada_attributes: constant := 90;
-- Ada 2005
Attributes: constant WORDLIST(1 .. Num_Ada_attributes) :=
(+"Access",
+"Address",
+"Adjacent",
+"Aft",
+"Alignment",
+"Base",
+"Bit_Order",
+"Body_Version",
+"Callable",
+"Caller",
+"Ceiling",
+"Class",
+"Component_Size",
+"Compose",
+"Constrained",
+"Copy_Sign",
+"Count",
+"Definite",
+"Delta",
+"Denorm",
+"Digits",
+"Exponent",
+"External_Tag",
+"First",
+"Floor",
+"Fore",
+"Fraction",
+"Identity",
+"Image",
+"Class",
+"Input",
+"Last",
+"Leading_Part",
+"Length",
+"Machine",
+"Machine_Emax",
+"Machine_Emin",
+"Machine_Mantissa",
+"Machine_Overflows",
+"Machine_Radix",
+"Machine_Rounding",
+"Machine_Rounds",
+"Max",
+"Max_Size_In_Storage_Elements",
+"Min",
+"Mod",
+"Model",
+"Model_Emin",
+"Model_Epsilon",
+"Model_Mantissa",
+"Model_Small",
+"Modulus",
+"Output",
+"Partition_Id",
+"Pos",
+"Pred",
+"Priority",
+"Range",
+"Read",
+"Remainder",
+"Round",
+"Rounding",
+"Safe_First",
+"Safe_Last",
+"Scale",
+"Scaling",
+"Signed_Zeros",
+"Size",
+"Small",
+"Storage_Pool",
+"Storage_Size",
+"Stream_Size",
+"Succ",
+"Tag",
+"Terminated",
+"Truncation",
+"Unbiased_Rounding",
+"Unchecked_Access",
+"Val",
+"Valid",
+"Value",
+"Version",
+"Wide_Image",
+"Wide_Value",
+"Wide_Wide_Image",
+"Wide_Wide_Value",
+"Wide_Wide_Width",
+"Wide_Width",
+"Width",
+"Write");
package Syntax is
-- token descriptions
use Ada.Strings.Wide_Maps;
-- some characters are covered by Ada 95 character sets
-- already. Add some more.
Greek_Letters: constant WIDE_CHARACTER_RANGES :=
-- greek small and capital letters
WIDE_CHARACTER_RANGES'
(WIDE_CHARACTER_RANGE'
(WIDE_CHARACTER'val(16#03B1#),
WIDE_CHARACTER'val(16#03C9#)),
WIDE_CHARACTER_RANGE'
(WIDE_CHARACTER'val(16#0391#),
WIDE_CHARACTER'val(16#03A9#)));
European_Letters: constant WIDE_CHARACTER_RANGE :=
-- some more European characters
WIDE_CHARACTER_RANGE'
(WIDE_CHARACTER'val(16#0100#),
WIDE_CHARACTER'val(16#017E#));
Number_Letters: constant WIDE_CHARACTER_SEQUENCE :=
-- characters occuring in numeric literals
"0123456789#aAbBcCdDeEfF";
subtype STR_2 is WIDE_STRING(1 .. 2);
-- NOTE: `Delimiter_1` must include `Operator_1`
Operator_1: constant WIDE_CHARACTER_SEQUENCE :=
-- single character operators
"&*+/<=>-";
Operator_2: constant array(1..4) of STR_2 :=
-- two-character operators
("**", ">=", "<=", "/=");
Delimiter_1: constant WIDE_CHARACTER_SEQUENCE :=
-- single character delimiters
"&'()*+,./:;<=>|!-";
Delimiter_2: constant array(1..10) of STR_2 :=
-- two-character delimiters
("=>", "..", "**", ":=",
"/=", ">=", "<=",
"<<", ">>", "<>");
-- Note: string brackets '"' need special cases
end Syntax;
end ASnip.Ada_Language;
-- $Date: Fri, 05 May 2006 22:53:49 +0200 $