gpt4 book ai didi

c - 柔性规范 yytext

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:07 25 4
gpt4 key购买 nike

我正在尝试为 k 符号构建一个 flex 规范,例如:3k5 = 3500。我有以下内容:

[0-9]+{LETTER}      { yyless(yyleng-1); yy_push_state(X_REAL); aux = atof(yytext); }
<X_REAL>"k"[0-9]+ { yytext[0] = "." ; printf("%f", ((atof(yytext) * 10^(3)) + aux * 10^(3))); }

但是,当我尝试将 "." 放入 yytext 的第一个字符时出现错误:

In member function ‘virtual int AtScanner::yylex()’: error: invalid conversion from ‘const char*’ to ‘char’ error: invalid operands of types ‘double’ and ‘int’ to binary ‘operator^’

如何操作 yytext?

最佳答案

你不能修改yytext,它是const

你应该换一种方式:也许只是使用 strdup 分配一个新字符串?

其他问题:yytext[0] 是一个char,rhs 也应该是。所以我们需要 '.' 而不是 ".".

还有一个问题:10^3 不产生 1000,在 C 中它是按位异或运算符(感谢@Chris 指出了这一点)。所以只需输入普通的 1000。

所以,最终的代码应该是这样的:

<X_REAL>"k"[0-9]+   { char* number = strdup(yytext);
number[0] = '.';
printf("%f", ((atof(number) * 1000) + aux * 1000));
free(number); }

请注意,我没有检查计算的正确性。


根据@rici的评论,修改yytext应该就可以了,所以代码可以简化如下:

<X_REAL>"k"[0-9]+   { yytext[0] = '.';
printf("%f", ((atof(yytext) * 1000) + aux * 1000)); }

关于c - 柔性规范 yytext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5479089/

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