bug-bison
[Top][All Lists]
Advanced

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

Re: Broken code generated when enabling locations using D


From: Adela Vais
Subject: Re: Broken code generated when enabling locations using D
Date: Tue, 30 Nov 2021 22:06:32 +0100

Hello Akim and Cristian,

I can't reproduce the issue. What version of ldc2 are you using, Cristian?

The error message sends me to 'yy_semantic_null', which is used only here
[0]. It makes sense that the code complains only when locations are used,
because only then it is outputted by Bison. I initially thought that it
complained because yy_semantic_null, an immutable value, *could*
theoretically be modified by other functions, like here [1], where it is
provided through the ref keyword, but I don't get any compilation error. I
added a dummy lexer, and I am getting a syntax error, so the code in
question is reached. I even added a push instruction with yy_semantic_null
at the beginning of the parse function, and the program compiles and runs.

Cristian, can you please give me more details?

Adela

[0]: https://github.com/akimd/bison/blob/master/data/skeletons/lalr1.d#L758
[1]: https://github.com/akimd/bison/blob/master/data/skeletons/lalr1.d#L1308

În dum., 21 nov. 2021 la 14:29, Akim Demaille <akim@lrde.epita.fr> a scris:

> Hi Cristian,
>
> Adela, could you have a look at this please?
>
> > Le 17 nov. 2021 à 19:32, cristiansimon <cristiansimon@protonmail.com> a
> écrit :
> >
> > Hello,
> >
> > When generating a parser for the following file with location support
> using GNU Bison 3.8.2:
> >
> > %language "D"
> > %define api.parser.class {Parser}
> > %locations
> >
> > %union {
> >     AST           tast;
> >     Declaration[] tdecls;
> >     Declaration   tdecl;
> >     Statement[]   tstmts;
> >     Statement     tstmt;
> >     Type          ttype;
> >     string        str;
> >     char          chr;
> >     long          lng;
> >     double        dbl;
> > }
> >
> > %token SEMICOLON    ";"
> >        PERIOD       "."
> >        OPENPAREN    "("
> >        CLOSEPAREN   ")"
> >        OPENBRACE    "{"
> >        CLOSEBRACE   "}"
> >        OPENBRACKET  "["
> >        CLOSEBRACKET "]"
> >        PLUS         "+"
> >        MINUS        "-"
> >        ASTERISK     "*"
> >        SLASH        "/"
> >
> > %token RETURN "return"
> >        VOID   "void"
> >        INT    "int"
> >        FLOAT  "float"
> >        CHAR   "char"
> >        STRING "string"
> >
> > %token <str> IDENTIFIER STRINGVALUE
> > %token <chr> CHARACTER
> > %token <lng> INTEGER
> > %token <dbl> FLOATVALUE
> >
> > %%
> > ast : /* Empty*/
> >     | declarations
> >     ;
> >
> > declarations : declaration
> >              | declaration declarations
> >              ;
> >
> > declaration : type IDENTIFIER "(" ")" "{" statements "}"
> >             ;
> >
> > statements : statement
> >            | statement statements
> >            ;
> >
> > statement : "return" ";"
> >           ;
> >
> > type : "void"
> >      ;
> > %%
> >
> > struct AST {}
> > class Declaration {}
> > class Statement   {}
> > final class Function : Declaration {}
> > final class Return : Statement {}
> > enum Type {}
> >
> > Compiling the generated code yields the following error, which does not
> happen when not enabling locations:
> >
> > cdc.p/parser.d(764): Error: function `parser.Parser.YYStack.push(int
> state, YYSemanticType value, ref YYLocation loc)` is not callable using
> argument types `(int, immutable(YYSemanticType), YYLocation)`
> > cdc.p/parser.d(764):        cannot pass argument `yy_semantic_null` of
> type `immutable(YYSemanticType)` to parameter `YYSemanticType value`
> > cdc.p/parser.d(765): Error: function `parser.Parser.YYStack.push(int
> state, YYSemanticType value, ref YYLocation loc)` is not callable using
> argument types `(int, immutable(YYSemanticType), YYLocation)`
> > cdc.p/parser.d(765):        cannot pass argument `yy_semantic_null` of
> type `immutable(YYSemanticType)` to parameter `YYSemanticType value`
> >
> > using ldc2.
> >
> > Removing the user-defined classes from the union seems to fix it, but
> this cannot be done in the original code as they serve a purpose there.
> >
> > What is there at fault here? What could be a fix for this issue? Thanks
> in advance.
> >
>
>


reply via email to

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