bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 4/5] symbols: check the previous commit


From: Akim Demaille
Subject: [PATCH 4/5] symbols: check the previous commit
Date: Sun, 16 Dec 2018 10:45:39 +0100

* tests/input.at (Symbol declarations): New.
---
 data/README    |   9 +++--
 tests/input.at | 100 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 105 insertions(+), 4 deletions(-)

diff --git a/data/README b/data/README
index 0575e2fc..50d7735b 100644
--- a/data/README
+++ b/data/README
@@ -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
diff --git a/tests/input.at b/tests/input.at
index 165bfaef..70afa473 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -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@&address@hidden([b4_symbol_dump],
+[$1, d@&address@hidden
+b4_symbol_if([$1], [is_token], [Token], [Nonterminal]), d@&address@hidden
+b4_symbol([$1], [tag]), d@&address@hidden
+b4_symbol([$1], [id]), d@&address@hidden
+b4_symbol([$1], [user_number]), d@&address@hidden
+b4_symbol([$1], [type]),
+])
+
+b4_output_begin([symbols.csv])
+number, class, tag, id, user_number, type,
+b4_symbol_foreach([b4_symbol_dump])d@&address@hidden
+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.  ##
 ## ------------ ##
-- 
2.19.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]