[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: api.location.type is unsupported for C parsers
From: |
Scheidler , Balázs |
Subject: |
Re: api.location.type is unsupported for C parsers |
Date: |
Tue, 23 Apr 2019 17:37:29 +0200 |
The tarball didn't work for me, it may have been generated from a different
commit as the patch wasn't included.
I've tried to bootstrap from git, but that gave me an error message.
Autoconf submodule registration fails for some reason.
At this point i gave up. Can you generate a tarball that includes the patch?
Thank you
Bazsi
On Mon, Apr 22, 2019, 20:30 Scheidler, Balázs <
address@hidden wrote:
> Thanks. I will give it a spin in this branch:
>
> https://github.com/balabit/syslog-ng/pull/2526
>
> On Mon, Apr 22, 2019, 19:41 Akim Demaille <address@hidden wrote:
>
>> Hi Balázs,
>>
>> > Le 19 avr. 2019 à 06:33, Akim Demaille <address@hidden> a écrit :
>> >
>> >
>> >> Le 18 avr. 2019 à 21:06, Scheidler, Balázs <
>> address@hidden> a écrit :
>> >
>> >> Is this something that is worth considering?
>> >
>> > Yes, you are right, it would be a nice addition to the C API. I'll
>> > prepare something for 3.4.
>>
>> What do you think about the following patch? Could you please give it a
>> try? It's also available there:
>>
>> https://www.lrde.epita.fr/~akim/private/bison/bison-3.3.4-acfb2.tar.gz
>>
>> Cheers!
>>
>> commit d22eac7d211c23ae37e8e936905b6a1203d5442f
>> Author: Akim Demaille <address@hidden>
>> Date: Mon Apr 22 19:24:11 2019 +0200
>>
>> api.location.type: support it in C
>>
>> Reported by Balázs Scheidler.
>>
>> * data/skeletons/c.m4 (b4_location_type_define): Use api.location.type
>> if defined.
>> * doc/bison.texi: Document it.
>> * tests/local.at (AT_C_IF, AT_LANG_CASE): New.
>> Support Span in C.
>> * tests/calc.at (Span): Convert it to be usable in C and C++.
>> Check api.location.type with yacc.c and glr.c.
>>
>> diff --git a/NEWS b/NEWS
>> index 8a423fdf..23e3b6f6 100644
>> --- a/NEWS
>> +++ b/NEWS
>> @@ -61,6 +61,15 @@ GNU Bison NEWS
>>
>> %define api.header.include {<parser/parse.h>}
>>
>> +*** api.location.type is now supported in C (yacc.c, glr.c)
>> +
>> + The %define variable api.location.type defines the name of the type to
>> use
>> + for locations. When defined, Bison no longer defines YYLTYPE.
>> +
>> + This can be used in programs with several parsers to factor their
>> + definition of locations: let one of them generate them, and the others
>> + just use them.
>> +
>> ** Documentation
>>
>> A new example in C shows an simple infix calculator with a hand-written
>> diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4
>> index 4db36aff..ff769410 100644
>> --- a/data/skeletons/bison.m4
>> +++ b/data/skeletons/bison.m4
>> @@ -1078,10 +1078,10 @@ m4_define_default([b4_location_initial_line],
>> [1])
>> ## Sanity checks. ##
>> ## --------------- ##
>>
>> -# api.location.prefix={...} (Java and C++).
>> +# api.location.type={...} (C, C++ and Java).
>> b4_percent_define_check_kind([api.location.type], [code], [deprecated])
>>
>> -# api.position.prefix={...} (Java).
>> +# api.position.type={...} (Java).
>> b4_percent_define_check_kind([api.position.type], [code], [deprecated])
>>
>> # api.prefix >< %name-prefix.
>> diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4
>> index d485cb69..5987232d 100644
>> --- a/data/skeletons/c.m4
>> +++ b/data/skeletons/c.m4
>> @@ -730,7 +730,10 @@ typedef ]b4_percent_define_get([[api.value.type]])[
>> ]b4_api_PREFIX[STYPE;
>> # -----------------------
>> m4_define([b4_location_type_define],
>> [[/* Location type. */
>> -#if ! defined ]b4_api_PREFIX[LTYPE && ! defined
>> ]b4_api_PREFIX[LTYPE_IS_DECLARED
>> +]b4_percent_define_ifdef([[api.location.type]],
>> +[[typedef ]b4_percent_define_get([[api.location.type]])[
>> ]b4_api_PREFIX[LTYPE;
>> +]],
>> +[[#if ! defined ]b4_api_PREFIX[LTYPE && ! defined
>> ]b4_api_PREFIX[LTYPE_IS_DECLARED
>> typedef struct ]b4_api_PREFIX[LTYPE ]b4_api_PREFIX[LTYPE;
>> struct ]b4_api_PREFIX[LTYPE
>> {
>> @@ -742,7 +745,7 @@ struct ]b4_api_PREFIX[LTYPE
>> # define ]b4_api_PREFIX[LTYPE_IS_DECLARED 1
>> # define ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1
>> #endif
>> -]])
>> +]])])
>>
>>
>> # b4_declare_yylstype
>> diff --git a/doc/bison.texi b/doc/bison.texi
>> index 41e75d28..59da4084 100644
>> --- a/doc/bison.texi
>> +++ b/doc/bison.texi
>> @@ -5975,7 +5975,7 @@ Introduced in Bison 3.2.
>> @deffn {Directive} {%define api.location.type} @address@hidden@}
>>
>> @itemize @bullet
>> address@hidden Language(s): C++, Java
>> address@hidden Language(s): C, C++, Java
>>
>> @item Purpose: Define the location type.
>> @xref{User Defined Location Type}.
>> @@ -5985,8 +5985,7 @@ Introduced in Bison 3.2.
>> @item Default Value: none
>>
>> @item History:
>> -Introduced in Bison 2.7 for C, C++ and Java. Introduced under the name
>> address@hidden for C++ in Bison 2.5 and for Java in Bison 2.4.
>> +Introduced in Bison 2.7 for C++ and Java, in Bison 3.4 for C.
>> @end itemize
>> @end deffn
>>
>> diff --git a/tests/calc.at b/tests/calc.at
>> index 87761c73..38f85dcd 100644
>> --- a/tests/calc.at
>> +++ b/tests/calc.at
>> @@ -289,18 +289,17 @@ AT_DATA_GRAMMAR([calc.y],
>> %code requires
>> {
>> ]AT_LOCATION_TYPE_SPAN_IF([[
>> -# include <iostream>
>> - struct Point
>> + typedef struct
>> {
>> int l;
>> int c;
>> - };
>> + } Point;
>>
>> - struct Span
>> + typedef struct
>> {
>> Point first;
>> Point last;
>> - };
>> + } Span;
>>
>> # define YYLLOC_DEFAULT(Current, Rhs, N) \
>> do \
>> @@ -313,7 +312,13 @@ AT_DATA_GRAMMAR([calc.y],
>> { \
>> (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last; \
>> } \
>> - while (false)
>> + while (0)
>> +
>> +]AT_C_IF(
>> +[[#include <stdio.h>
>> +void location_print (FILE *o, Span s);
>> +#define LOCATION_PRINT location_print
>> +]])[
>>
>> ]])[
>> /* Exercise pre-prologue dependency to %union. */
>> @@ -416,7 +421,8 @@ power (int base, int exponent)
>> return res;
>> }
>>
>> -]AT_LOCATION_TYPE_SPAN_IF([[
>> +]AT_LOCATION_TYPE_SPAN_IF([AT_CXX_IF([[
>> +#include <iostream>
>> namespace
>> {
>> std::ostream&
>> @@ -430,7 +436,17 @@ namespace
>> return o;
>> }
>> }
>> -]])[
>> +]], [[
>> +void
>> +location_print (FILE *o, Span s)
>> +{
>> + fprintf (o, "%d.%d", s.first.l, s.first.c);
>> + if (s.first.l != s.last.l)
>> + fprintf (o, "-%d.%d", s.last.l, s.last.c - 1);
>> + else if (s.first.c != s.last.c - 1)
>> + fprintf (o, "-%d", s.last.c - 1);
>> +}
>> +]])])[
>> ]AT_YYERROR_DEFINE[
>> ]AT_DEFINES_IF([],
>> [AT_CALC_LEX
>> @@ -684,6 +700,7 @@ AT_CHECK_CALC_LALR()
>>
>> AT_CHECK_CALC_LALR([%defines])
>> AT_CHECK_CALC_LALR([%locations])
>> +AT_CHECK_CALC_LALR([%locations %define api.location.type {Span}])
>>
>> AT_CHECK_CALC_LALR([%name-prefix "calc"])
>> AT_CHECK_CALC_LALR([%verbose])
>> @@ -726,6 +743,7 @@ AT_CHECK_CALC_GLR()
>>
>> AT_CHECK_CALC_GLR([%defines])
>> AT_CHECK_CALC_GLR([%locations])
>> +AT_CHECK_CALC_GLR([%locations %define api.location.type {Span}])
>> AT_CHECK_CALC_GLR([%name-prefix "calc"])
>> AT_CHECK_CALC_GLR([%define api.prefix {calc}])
>> AT_CHECK_CALC_GLR([%verbose])
>> diff --git a/tests/headers.at b/tests/headers.at
>> index 96ac83e7..8b19d3fe 100644
>> --- a/tests/headers.at
>> +++ b/tests/headers.at
>> @@ -65,7 +65,6 @@ AT_TEST_CPP_GUARD_H([9foo], [%glr-parser])
>> ## export YYLTYPE. ##
>> ## ---------------- ##
>>
>> -
>> AT_SETUP([export YYLTYPE])
>>
>> AT_BISON_OPTION_PUSHDEFS([%name-prefix "my_"])
>> diff --git a/tests/local.at b/tests/local.at
>> index ecb0fe04..1f55bedc 100644
>> --- a/tests/local.at
>> +++ b/tests/local.at
>> @@ -157,6 +157,8 @@ m4_pushdef([AT_LANG],
>> [AT_CXX_IF([c++],
>> [AT_D_IF([d],
>> [c])])])])
>> +m4_pushdef([AT_C_IF],
>> +[m4_if(AT_LANG, [c], [$1], [$2])])
>> m4_pushdef([AT_GLR_IF],
>> [m4_bmatch([$3], [%glr-parser\|%skeleton "glr\..*"], [$1], [$2])])
>> m4_pushdef([AT_LALR1_CC_IF],
>> @@ -288,13 +290,12 @@ AT_TOKEN_CTOR_IF(
>> m4_pushdef([AT_YYLEX_PRE_ARGS], [])
>> ])])
>>
>> -# Handle the different types of location components.
>>
>> -AT_CXX_IF(
>> - [AT_LOCATION_TYPE_SPAN_IF(
>> +# Handle the different types of location components.
>> +AT_LOCATION_TYPE_SPAN_IF(
>> [AT_LOC_PUSHDEF([first.l], [first.c], [last.l], [last.c])],
>> - [AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line],
>> [end.column])])],
>> - [AT_LOC_PUSHDEF([first_line], [first_column], [last_line],
>> [last_column])])
>> + [AT_CXX_IF([AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line],
>> [end.column])],
>> + [AT_LOC_PUSHDEF([first_line], [first_column],
>> [last_line], [last_column])])])
>>
>>
>> AT_GLR_IF([AT_KEYWORDS([glr])])
>> @@ -334,6 +335,7 @@ m4_popdef([AT_LEXPARAM_IF])
>> m4_popdef([AT_YACC_IF])
>> m4_popdef([AT_GLR_IF])
>> m4_popdef([AT_CXX_IF])
>> +m4_popdef([AT_C_IF])
>> m4_popdef([AT_LANG])
>> m4_popdef([AT_JAVA_IF])
>> m4_popdef([AT_GLR_CC_IF])
>> @@ -349,6 +351,12 @@ AT_LOC_POPDEF])dnl
>> ## Generating Grammar Files. ##
>> ## -------------------------- ##
>>
>> +# AT_LANG_CASE(LANG1, IF-LANG1, LANG2, IF-LANG2, ..., DEFAULT)
>> +# ------------------------------------------------------------
>> +m4_define([AT_LANG_CASE],
>> +[m4_case(AT_LANG, $@)])
>> +
>> +
>> # _AT_LANG_DISPATCH(LANG, MACRO, ARGS)
>> # ------------------------------------
>> # Call the specialization of MACRO for LANG with ARGS. Complain if
>> @@ -990,7 +998,7 @@ AT_CHECK([[$SHELL ../../../javacomp.sh ]$1],
>>
>>
>> # AT_LANG_FOR_EACH_STD(BODY)
>> -# -------------------------------
>> +# --------------------------
>> m4_define([AT_LANG_FOR_EACH_STD], [AT_LANG_DISPATCH([$0], $@)])
>>
>>
>>
>>
- api.location.type is unsupported for C parsers, Scheidler , Balázs, 2019/04/18
- Re: api.location.type is unsupported for C parsers, Akim Demaille, 2019/04/19
- Re: api.location.type is unsupported for C parsers, Akim Demaille, 2019/04/22
- Re: api.location.type is unsupported for C parsers, Scheidler , Balázs, 2019/04/22
- Re: api.location.type is unsupported for C parsers,
Scheidler , Balázs <=
- Re: api.location.type is unsupported for C parsers, Akim Demaille, 2019/04/23
- Re: api.location.type is unsupported for C parsers, Scheidler , Balázs, 2019/04/23
- Re: api.location.type is unsupported for C parsers, Scheidler , Balázs, 2019/04/25
- Re: api.location.type is unsupported for C parsers, Akim Demaille, 2019/04/25
- Re: api.location.type is unsupported for C parsers, Scheidler , Balázs, 2019/04/26