gpt4 book ai didi

c++ - 弹性和 Bison : C++ user-defined class

转载 作者:行者123 更新时间:2023-11-27 23:21:02 24 4
gpt4 key购买 nike

我不明白如何将 C++ 用户定义的类嵌入到 bison 解析器中。这是我所拥有的(只是一些必要的部分;如果您需要,我可以发布所有代码)。

扫描器.l

%{
#include "parser.tab.h"
#include "types.h"
#include <iostream>
#include <string>
#define YY_DECL extern "C" int yylex()
using namespace std;
int chars = 0;
int words = 0;
int lines = 0;
extern "C" {
int yylex(void);
} /* extern "C" */
%}

%%
"none" {
yylval.none_value = none_type();
return NONE;
} /* none type */

{DIGIT_BIN}|{DIGIT_OCT}|{DIGIT_DEC}|{DIGIT_HEX} {
yylval.int_value = atoi(yytext);
return INT;
} /* int type */

解析器.y

%{
#include "types.h"
#include <iostream>
using namespace std;
void yyerror(const char *error) {
cerr << error << endl;
} /* error handler */
extern "C" {
int yylex(void);
int yyparse(void);
int yywrap() { return 1; }
} /* extern "C" */
%}

%union {
none_type none_value; /* HERE IS WHAT I WANT */
int int_value;
} /* union */

%token <none_value> NONE
%token <int_value> INT

types.h

#include <iostream>

class none_type {
public:
none_type(void);
~none_type();
}; /* none_type */

如您所见,此处的代码并不完整,但足以描述我想要的内容。我对默认 C++ 类型所做的一切都很好;我可以实现自己的类吗?

编译器返回这样的错误:

parser.y:20:3: error: 'none_value' does not name a type
In file included from scanner.l:3:0:
parser.y:20:3: error: 'none_value' does not name a type
scanner.l: In function 'int yylex()':
scanner.l:54:32: error: cannot convert 'none_type' to 'int' in assignment
make: *** [caesar] Error 1

提前致谢!

最佳答案

当我用 bison/g++ 编译你的代码时,我得到了错误:

parser.y:16:15: error: member ‘none_type YYSTYPE::none_value’ with constructor not allowed in union
parser.y:16:15: error: member ‘none_type YYSTYPE::none_value’ with destructor not allowed in union
parser.y:16:15: note: unrestricted unions only available with -std=c++0x or -std=gnu++0x

它确切地告诉您问题出在哪里——您不能将非 POD 类型放入 union 中,因为编译器无法告诉它调用哪个 ctor/dtor。请注意您可以在 C++ 11 中执行此操作的注释,但这并没有真正帮助,因为在那种情况下它不会自动为您调用 ctor/dtor,因此不会正确构造或销毁内容。

关于c++ - 弹性和 Bison : C++ user-defined class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13053472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com