From 31b751703fa3589dab34ff3ed93c3f3074ff8bf4 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Thu, 24 Sep 2020 05:44:31 -0400 Subject: Chase down some methodization details missed earlier. No generated-code diffs from this change. #36 in the retargeting patch series --- src/backend.adoc | 7 ++++++- src/cpp_backend.c | 1 + src/dfa.c | 4 +--- src/flexdef.h | 1 + src/gen.c | 2 +- src/misc.c | 2 +- 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/backend.adoc b/src/backend.adoc index e8d8323..f1876d3 100644 --- a/src/backend.adoc +++ b/src/backend.adoc @@ -82,8 +82,13 @@ require fixes outside a back end. there is an explicit fallthrough keyword that enables this, as in Go. +3. The item separator in data initializers is a comma. + By putting a yyterminate() call in the fallthrough member and a null pointer in the endcase member, you could handle -languages like Pascal +languages like Pascal. + +// end + diff --git a/src/cpp_backend.c b/src/cpp_backend.c index ad46b0d..96e4894 100644 --- a/src/cpp_backend.c +++ b/src/cpp_backend.c @@ -607,6 +607,7 @@ struct flex_backend_t cpp_backend = { .table_opener = " {", .table_continuation = " },\n", .table_closer = " };\n", + .dyad = " {%4d,%4d },", .comment = cpp_comment, .get_int16_decl = cpp_get_int16_decl, .get_int32_decl = cpp_get_int32_decl, diff --git a/src/dfa.c b/src/dfa.c index 2dc324c..83ff70a 100644 --- a/src/dfa.c +++ b/src/dfa.c @@ -683,10 +683,8 @@ void ntod (void) yynxt_tbl->td_hilen * yynxt_tbl->td_lolen * sizeof (flex_int32_t)); - - if (gentables) - outn (" {"); + outn (backend->table_opener); /* Supply array's 0-element. */ if (ds == end_of_buffer_state) { diff --git a/src/flexdef.h b/src/flexdef.h index 84365b9..b3468ea 100644 --- a/src/flexdef.h +++ b/src/flexdef.h @@ -318,6 +318,7 @@ struct flex_backend_t { char *table_opener; // Open an array initializer with this char *table_continuation; // Open an array initializer with this char *table_closer; // How to continue a two-level initializer + char *dyad; // How to format and int[2] initializer void (*comment)(const char *); // Wrap a comment line const char *(*get_int16_decl)(void); // Format for declaring array initializer of int16s const char *(*get_int32_decl)(void); // Format for declaring array initializer of int32s diff --git a/src/gen.c b/src/gen.c index 15f00c6..130581a 100644 --- a/src/gen.c +++ b/src/gen.c @@ -106,7 +106,7 @@ static void geneoltbl (void) if ((i % 20) == 19) out ("\n "); } - out (" };\n"); + outn (backend->table_closer); } outn ("]])"); } diff --git a/src/misc.c b/src/misc.c index 6ee1e5a..97bc83e 100644 --- a/src/misc.c +++ b/src/misc.c @@ -827,7 +827,7 @@ void transition_struct_out (int element_v, int element_n) if (!gentables) return; - out_dec2 (" {%4d,%4d },", element_v, element_n); + out_dec2 (backend->dyad, element_v, element_n); datapos += TRANS_STRUCT_PRINT_LENGTH; -- cgit v1.2.1