我正在尝试在 Bison 中编写一些解析 C 代码的语法。我是野牛新手,我正在尝试从网上找到的示例中学习。我正在编写 AST。如果这是我定义的语法(最基本的用例)
declarator
: IDENTIFIER { $$ = $1;}
| declarator '(' ')' { $$ = new functionDecl($1); }
现在,当我编译此代码时,会抛出一条错误消息,指出“声明符”没有类型。
我知道我可以使用 %type 声明性来定义类型。但我希望“声明符”与变体类型相关联:
%code {
class Stmt
{
public:
std::string id;
Stmt(std::string aId)
: id(aId)
{}
};
typedef std::variant<std::string, Stmt> decl_type;
}
%define api.value.type variant
%token <std::string> IDENTIFIER
%type <decl_type> declarator
我也无法编译此代码。它抛出 decl_type 未知的错误。我错过了什么?