gpt4 book ai didi

c - 处理字符串时解析错误

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

%option case-insensitive
%option noyywrap
%option yylineno


id [a-zA-Z][a-zA-Z_0-9]*

integer (0[xX][0-9A-Fa-f]+)|([0-9]+)

real [0-9]*\.[0-9](e|E)?[0-9]*

undefined [^"\r\n \t]

%x STR
%%
\" string_buf_ptr = string_buf; BEGIN(STR);

<STR>\" { /* saw closing quote - all done */
BEGIN(INITIAL);
*string_buf_ptr = '\0';
/* return string constant token type and
* value to parser
*/

yylval.strVal = strdup(string_buf);
sprintf(yyout, yylval.strVal);
return STR;
}

<STR>\\n *string_buf_ptr++ = '\n';
<STR>\\t *string_buf_ptr++ = '\t';
<STR>\\r *string_buf_ptr++ = '\r';
<STR>\\b *string_buf_ptr++ = '\b';
<STR>\\f *string_buf_ptr++ = '\f';

<STR>\\(.|\n) *string_buf_ptr++ = yytext[1];

<STR>[^\\\n\"]+ {
char *yptr = yytext;

while ( *yptr )
*string_buf_ptr++ = *yptr++;
}

这是我的字符串词法分析代码的一部分。这段代码的目标是定位字符串(类似 C 的字符串,例如 "Hello World")并将它们返回给我们的解析器进行处理。

我还使用 Yacc 工具构建了一个解析器,它几乎是完美的,除非我们将字符串分配给变量(例如 x="Hello World";)当我这样做时,yyerror(const char*) 函数被调用并且消息是 unexpected $undefined. 我不明白为什么会这样。缩减应该识别一个left value x,一个assignment 和一个constant String "Hello World",我哪里错了?

最佳答案

问题是您显然已将 STR 定义为标记和 lex 开始状态。这两个实际上都是宏(扩展为整数常量文字),因此您可能会收到关于宏 STR 在编译器输出中某处被重新定义的警告。上面代码中的 return STR; 最终返回 STR 的起始状态代码,而不是 token 代码,野牛生成的解析器无法将其识别为有效 token 代码。

关于c - 处理字符串时解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36628196/

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