symbols: check the previous commit

* tests/input.at (Symbol declarations): New.
This commit is contained in:
Akim Demaille
2018-12-16 10:22:26 +01:00
parent dbe499e936
commit 25b9eada8c
2 changed files with 105 additions and 4 deletions

View File

@@ -75,9 +75,9 @@ skeletons.
## Symbols
In order to unify the handling of the various aspects of symbols
(tag, type_name, whether terminal, etc.), bison.exe defines one
macro per (token, field), where field can has_id, id, etc.: see
In order to unify the handling of the various aspects of symbols (tag, type
name, whether terminal, etc.), bison.exe defines one macro per (token,
field), where field can `has_id`, `id`, etc.: see
src/output.c:prepare_symbols_definitions().
The various FIELDS are:
@@ -94,7 +94,8 @@ The various FIELDS are:
- is_token: 0 or 1
Whether this is a terminal symbol.
- number: integer
The internalized number (used after yytranslate).
The internalized number (used after yytranslate). This is the same
number that serves as key b4_symbol(NUM, FIELD).
- has_type: 0, 1
Whether has a semantic value.
- type_tag: string

View File

@@ -237,6 +237,106 @@ input.y:5.8-15: error: syntax error, unexpected string, expecting char or identi
AT_CLEANUP
## --------------------- ##
## Symbol declarations. ##
## --------------------- ##
# Check the parsing of %token, %nterm, %type and %left...
AT_SETUP([Symbol declarations])
AT_DATA([dump-symbols.m4],
[[m4@&t@_define([b4_symbol_dump],
[$1, d@&t@nl
b4_symbol_if([$1], [is_token], [Token], [Nonterminal]), d@&t@nl
b4_symbol([$1], [tag]), d@&t@nl
b4_symbol([$1], [id]), d@&t@nl
b4_symbol([$1], [user_number]), d@&t@nl
b4_symbol([$1], [type]),
])
b4_output_begin([symbols.csv])
number, class, tag, id, user_number, type,
b4_symbol_foreach([b4_symbol_dump])d@&t@nl
b4_output_end
]])
AT_DATA([input.y],
[[%token 'a' A1 1 "A1" A2 A3 "A3" A4 4
<type_b> 'b' B5 5 "B5" B6 B7 "B8" B9 9
<type_c> 'c' C10 10 "C10" C11 C12 "C12" C13 13
%left 'd' D20 20 "D20" D21 D22 "D22" D23 23
<type_e> 'e' E25 25 "E25" E26 E27 "E28" E29 29
<type_f> 'f' F30 30 "F30" F31 F32 "F32" F33 33
%type 'g' G40 "D40" G21 G22 G23
<type_h> 'h' H25 "H25" H26 H27 "H28" H29
<type_i> 'i' I30 "I30" I31 I32 "I32" I33
%nterm j60 j61 j62 j63
<type_k> k75 k76 k77 k79
<type_l> l80 l81 l82 l83
%%
exp:;
]])
AT_BISON_CHECK([-Wno-other -S./dump-symbols.m4 input.y])
AT_CHECK([cat symbols.csv], [],
[[number, class, tag, id, user_number, type,
0, Token, $end, , 0, ,
1, Nonterminal, error, error, 256, ,
2, Nonterminal, $undefined, , 257, ,
3, Token, 'a', , 97, ,
4, Token, "A1", A1, 1, ,
5, Token, A2, A2, 258, ,
6, Token, "A3", A3, 259, ,
7, Token, A4, A4, 4, ,
8, Token, 'b', , 98, type_b,
9, Token, "B5", B5, 5, type_b,
10, Token, B6, B6, 260, type_b,
11, Token, "B8", B7, 261, type_b,
12, Token, B9, B9, 9, type_b,
13, Token, 'c', , 99, type_c,
14, Token, "C10", C10, 10, type_c,
15, Token, C11, C11, 262, type_c,
16, Token, "C12", C12, 263, type_c,
17, Token, C13, C13, 13, type_c,
18, Token, 'd', , 100, ,
19, Token, D20, D20, 20, ,
20, Token, "D20", , 264, ,
21, Token, D21, D21, 265, ,
22, Token, D22, D22, 266, ,
23, Token, "D22", , 267, ,
24, Token, D23, D23, 23, ,
25, Token, 'e', , 101, type_e,
26, Token, E25, E25, 25, type_e,
27, Token, "E25", , 268, type_e,
28, Token, E26, E26, 269, type_e,
29, Token, E27, E27, 270, type_e,
30, Token, "E28", , 271, type_e,
31, Token, E29, E29, 29, type_e,
32, Token, 'f', , 102, type_f,
33, Token, F30, F30, 30, type_f,
34, Token, "F30", , 272, type_f,
35, Token, F31, F31, 273, type_f,
36, Token, F32, F32, 274, type_f,
37, Token, "F32", , 275, type_f,
38, Token, F33, F33, 33, type_f,
39, Token, 'g', , 103, ,
40, Token, "D40", , 276, ,
41, Token, 'h', , 104, type_h,
42, Token, "H25", , 277, type_h,
43, Token, "H28", , 278, type_h,
44, Token, 'i', , 105, type_i,
45, Token, "I30", , 279, type_i,
46, Token, "I32", , 280, type_i,
47, Nonterminal, $accept, , -1, ,
48, Nonterminal, exp, exp, -1, ,
]])
AT_CLEANUP
## ------------ ##
## Invalid $n. ##
## ------------ ##