gpt4 book ai didi

c - Yacc Yytext 被覆盖?

转载 作者:行者123 更新时间:2023-11-30 14:33:53 26 4
gpt4 key购买 nike

帖子下面的评论中提到了解决方案我遇到了一个问题,我有一个声明,例如i = ary[4];

lex 打印出“ary”,但是 yacc 由于某种原因打印出“[”,这意味着 yytext 被某种方式覆盖。

有人能告诉我如何解决这个问题吗?我一拿出来

PStmt         : Id '[' Expr ']'                                             { $$ = doRary($1, $3); };

那么我的程序没有问题,但是我无法再读取数组了。

在我的 lex 文件中,我有:

{letter}({letter}|{digit})*   { return Ident; }
{digit}{digit}* { return IntLit; }
...
\[ { return '['; }
\] { return ']'; }
...

[更新:我不得不删除这一部分]在我的 yacc 文件中,我有:


我将不胜感激任何关于如何处理这个问题的提示/解决方案,因为上述陈述似乎影响了语法的其他部分。

仅供引用:我遵循 C 优先规则。

最佳答案

yytext 是属于 (f)lex 生成的扫描器的内部缓冲区,其内容在每次调用 yylex() 时都会被修改。 bison/yacc 生成的解析器在不可预测的时刻调用 yylex() 。特别是,它将调用 yylex() 来获取先行标记,该标记不是当前产生式的一部分。

因此 yytext 不应在词法分析器操作之外使用。如果解析器需要扫描 token 的字符串值,则该 token 的词法分析器操作必须复制 yytext 并将其存储到 yylval 的相应成员中,以便在解析器中可用涉及该 token 的操作。 (有关更多详细信息,请参阅 bison manual。)

另请参阅this question ,以及许多其他人。

关于c - Yacc Yytext 被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59122129/

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