Lex 正则表达式获得一些额外的字符

2023-12-19

我的 lex 文件中有以下定义:

L   [a-zA-Z_]                                           
A   [a-zA-Z_0-9] 
%%
{L}{A}*                 { yylval.id = yytext; return IDENTIFIER; }

我在 YACC 文件中执行以下操作:

primary_expression
    : IDENTIFIER            { puts("IDENTIFIER: "); printf("%s", $1); }

我的源代码(我正在分析的源代码)具有以下分配:

ab= 10;

由于某种原因,那printf("%s", $1);部分正在打印ab=而且不仅是ab.

我很确定那是正在打印的部分ab=因为当我删除printf("%s", $1);标识符根本不被打印。

我真的没有主意了。我究竟做错了什么?

让我知道是否可以说得更清楚。


我究竟做错了什么?

您假设该字符串指向yytext是恒定的。它不是。

指向的字符串的生命周期yytext是关联规则的词汇动作。如果这条规则最终回归,yytext将存活到下一次yylex叫做。就是这样。

bison- 生成的解析器具有单符号前瞻功能。因此,当解析器执行语义操作时,yylex已被再次调用(用于前瞻);因此,您不能使用保存的值yytext即使对于规则中的最后一个(或唯一的)标记也是如此。

解决办法:复制字符串。 (我用strdup,但无论出于何种原因,有些人喜欢 malloc 和 strcpy。如果这样做,请不要忘记 NUL 终止符。)并记住free()当你完成它时,复制它。

以供参考:Flex 手册所说的内容。 http://westes.github.io/flex/manual/A-Note-About-yytext-And-Memory.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lex 正则表达式获得一些额外的字符 的相关文章

随机推荐

  • 在浏览器中训练后,将模型合并并保存在tensorflow.js中

    我正在关注tensorflow jstutorial https codelabs developers google com codelabs tensorflowjs teachablemachine codelab index htm
  • 带时间延迟的单步遍历数组

    我的页面上有选项卡 每个选项卡都包含独特的内容 我想自动旋转选项卡和内容而不点击它们 页面加载后我希望这个函数开始使用window onload function 我有以下 JavaScript 数组 var HomeTabs 1 3 5
  • Create React App 4.0无法解析公共文件夹中的图像路径

    我已经升级到最新的Create React App 4 0 现在scss无法解析公用文件夹中的图像资源 我之前使用的是CRA 3 4 1 效果很好 有任何想法吗 我不想用npm eject icon svg 位于public images
  • 不同行的html表格单元格宽度[重复]

    这个问题在这里已经有答案了 可能的重复 表格单元格宽度问题 https stackoverflow com questions 5937774 table cell width issue 我有一张桌子设置为 table width 100
  • 将 log4j 与 JBoss 7.1 结合使用

    如何将 log4j 与 JBoss 7 1 一起使用 我的 WebContent WEB INF lib 文件夹中有一个 log4j 1 2 16 jar 当我输出结果时Logger getRootLogger getClass toStr
  • 由 lambda 包装器对可变参数模板函数调用引起的 gcc 分段错误

    我今天花了好几个小时试图理解为什么这段代码 http melpon org wandbox permlink HfrjVkob1QP476QT出现段错误g 6 2 and g 7 0 同时按预期愉快地工作clang 3 9 and 4 0
  • 在 Windows 上构建 google v8 作为共享库?

    是否可以在 Windows 上使用 gyp 将 googles v8 构建为共享库 msvc 2012 我尝试的一切都不起作用 我尝试过的 python build gyp v8 Dcomponent shared library pyth
  • 将双精度值四舍五入到小数点后两位

    我有一个双精度值 22 368511 我想将其四舍五入到小数点后两位 即它应该返回 22 37 我怎样才能做到这一点 与大多数语言一样 格式是 2f 你可以看到更多的例子here http www roseindia net tutoria
  • 如何在服务器上配置 Elixir、NGINX、Websockets

    我正在设置一个带有 Phoenix 应用程序的服务器 该应用程序将使用 websockets 本地 websocket 可以工作 但我在临时服务器上设置它时遇到问题 有人可以帮我在我的服务器上设置 websockets 吗 我的 nginx
  • 从 Excel 复制后剪贴板中出现奇怪的内容

    我正在尝试使用以下方法获取应用程序中剪贴板的内容以确保 Excel 兼容性 Clipboard clipboard new Clipboard Display getDefault String contents String clipbo
  • 什么是 NSAssert1?

    我正在 iOS 上开发一个应用程序 我看到有一个宏叫做NSAssert1 它是做什么用的 两者在使用上有什么区别NSLog and NSAssert1 请指导我或建议我可以阅读的教程 NSAssert变体接受一个条件和一条消息 如果条件不满
  • 从 C# 托管代码调用 win32 CreateProfile()

    快速问题 希望如此 如何从 C 托管代码 正确调用 win32 函数 CreateProfile 我尝试自行设计解决方案 但没有成功 CreateProfile 的语法是 HRESULT WINAPI CreateProfile in LP
  • 将 iframe 添加到 JSF 组件

    是否可以从支持 bean 将 iframe 添加到 JSF 组件 RichFaces PrimeFaces 我需要在我的主页中嵌入外部网页 用户需要设置这个url 我无法使用 jQuery 我无法找到任何 iframe 等效的 JSF 组件
  • Yarn MapReduce 作业问题 - Hadoop 2.3.0 中的 AM 容器启动错误

    我已经设置了 Hadoop 2 3 0 的 2 节点集群 它工作正常 我可以成功运行 Distributedshell 2 2 0 jar 示例 但是当我尝试运行任何 MapReduce 作业时 我收到错误 我已经设置了 MapRed xm
  • 在 PHP 中将一种日期格式转换为另一种日期格式

    PHP 中是否有一种简单的方法将一种日期格式转换为另一种日期格式 我有这个 old date date y m d h i s works middle strtotime old date returns bool false new d
  • 查找支持的 GLSL 版本

    如何以一种可以可靠地以编程方式使用的方式找到 OpenGL 实现支持的 GLSL 版本 是获得的最好方法GL SHADING LANGUAGE VERSION字符串并尝试解析它 是否可以可靠地以明确定义的格式返回 我的英特尔驱动程序返回1
  • 将 ROR 应用程序部署到无法访问 Internet 的计算机

    我完成了一个简单的 Ror hello world 应用程序 现在我面临的问题是如何将其部署到另一台物理上无法连接到 Internet 的 Windows 计算机 我可以通过 USB 复制文件和应用程序 但是我怎样才能将 gem 安装到该机
  • PHP 字符串反转而不使用额外内存

    如何在不使用任何额外内存变量的情况下将 str hello n 反转为 olleh n 我查找了预构建的函数 但它们都使用内存 而且 我认为字符串是不可变的 所以基本上可以在不进行任何调整的情况下完成此操作 或者创建新字符串是唯一的选择吗
  • R随机森林:数据(x)有0行

    我在用randomForestrandomForest 包中的函数查找最重要的变量 我的数据框称为城市 我的响应变量是数字收入 urban random forest lt randomForest revenue y urban reve
  • Lex 正则表达式获得一些额外的字符

    我的 lex 文件中有以下定义 L a zA Z A a zA Z 0 9 L A yylval id yytext return IDENTIFIER 我在 YACC 文件中执行以下操作 primary expression IDENTI