gpt4 book ai didi

yacc - 在 yacc 中为非终端分配多种数据类型

转载 作者:行者123 更新时间:2023-12-04 18:30:27 27 4
gpt4 key购买 nike

我正在为类项目工作,我们必须在其中构建解析器。我们目前正处于在 yacc 中构建解析器的阶段。目前让我感到困惑的是,我读到您需要为每个非终结符分配一个类型。在某些情况下,虽然我会有类似的东西:

...
%union {
Type dataType;
int integerConstant;
bool boolConstant;
char *stringConstant;
double doubleConstant;
char identifier[MaxIdentLen+1]; // +1 for terminating null
Decl *decl;
List<Decl*> *declList;
}

%token <identifier> T_Identifier
%token <stringConstant> T_StringConstant
%token <integerConstant> T_IntConstant
%token <doubleConstant> T_DoubleConstant
%token <boolConstant> T_BoolConstant

...

%%
...
Expr : /* some rules */
| Constant { /* Need to figure out what to do here */ }
| /* some more rules */
;

Constant : T_IntConstant { $$=$1 }
| T_DoubleConstant { $$=$1 }
| T_BoolConstant { $$=$1 }
| T_StringConstant { $$=$1 }
| T_Null { $$=$1 }
...

你怎么能将一个类型赋值给 expr 因为它有时不能是整数或 double 值或 bool 值等?

最佳答案

您可以通过在规则中添加类型

TypesConstant            :    T_IntConstant    { $<integerConstant>$=$1 }
| T_DoubleConstant { $<doubleConstant>$=$1 }
| ...

http://www.gnu.org/software/bison/manual/html_node/Action-Types.html#Action-Types更多细节。

关于yacc - 在 yacc 中为非终端分配多种数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905819/

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