gpt4 book ai didi

Bison YYSTYPE : Trying to use char*

转载 作者:行者123 更新时间:2023-12-04 17:41:59 26 4
gpt4 key购买 nike

我需要使用 flex 和 bison 来解析一些代码。

YYSTYPE 的默认类型是 int ,尽管我从来没有那样声明过。这是野牛的默认设置吗?

将字符串传回对我有很大帮助。我读到这个: How to solve Bison warning "... has no declared type"这看起来是一个很好的方法。 (我还不需要联合的全部功能,只需要 char* 部分,但我不妨使用联合,因为它以后可能会有所帮助。)

它对我不起作用。我收到这些错误:

y:111.37-38: $1 of `ConstExpression' has no declared type
y:113.34-35: $1 of `ConstFactor' has no declared type
y:114.35-36: $1 of `ConstFactor' has no declared type
y:119.34-35: $1 of `Type' has no declared type
y:109.23-48: warning: type clash on default action: <str> != <>
y:115.23-27: warning: type clash on default action: <str> != <>
[...more of the same snipped...]

这是我的声明 y语法文件:
%union {
char *str;
}

%type<str> ConstExpression ConstFactor Type

这是我的 .l 中的一行文件:
[a-zA-Z]+[a-zA-Z0-9]*   { yylval.str = strdup(yytext); return yident;}

我还需要做什么来解决错误?

最佳答案

实际上,我很确定我不看语法就知道出了什么问题。

还必须声明终结符的类型,因为它们可以并且经常返回语义值。想想诸如 ID 之类的事情和 NUMBER , 其中有 yyval数据。但是yacc 没有办法知道它是否只是一个'x'或者更多,规则中的默认操作是:$$ = $1
例如,下面的语法通过 yacc 就好了,但是尝试从 %type 中再删除一个符号。以下:

%union {
char *s;
}

%type <s> r1 r2 'x'

%%

r1: r2;

r2: 'x' { printf("%s\n", $1); };

关于 Bison YYSTYPE : Trying to use char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778099/

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