gpt4 book ai didi

parsing - 耶尔瓦尔和联盟

转载 作者:行者123 更新时间:2023-12-02 23:33:38 25 4
gpt4 key购买 nike

yacc 文件中 union 的用途是什么?它与flex文件中的yylval直接相关吗?如果不使用yylval,那么就不需要使用union?

最佳答案

union的目的是允许将不同类型的对象存储到由flex发出的节点中。

为了更好地解释,您可以举个例子:

%union
{
int intValue;
float floatValue;
char *stringValue;
}

.y 中,如果您想为 intfloatstring 类型提供基本支持。你能用这个做什么?

有两件事:

首先,您可以在生成 token 时自动设置正确的值。想想前面例子的 .l 文件,你可以有:

[a-zA-Z][a-zA-Z0-9]* {
yylval.stringValue = strdup(yytext);
return IDENTIFIER;
}

[0-9]+ {
yylval.intValue = atoi(yytext);
return INTEGER;
}

[0-9]*\.[0-9]+"f"? {
yylval.floatValue = new atof(yytext);
return FLOAT;
}

此外,您还可以在 flex 语法中直接使用值:

nexp: nexp '+' nexp { $<floatValue>$ = $<floatValue>1 + $<floatValue>3 }

最后,如果您打算使用 OOP 语法树,您可以将 union 定义为

%union
{
class ASTNode *node;
}

其中ASTNode是任何类型语法节点的祖先类。

关于parsing - 耶尔瓦尔和联盟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1853204/

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