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 正则表达式获得一些额外的字符 的相关文章

  • 使用加法求阶乘

    我正在尝试创建一个 C 代码来查找整数的阶乘 以便我可以将代码转换为汇编语言 我的代码似乎将第二个整数 乘 两次 即 5 4 4 3 我似乎无法找出原因 请帮助 define N 5 int main int j 0 int i 0 int
  • 使用 LINQ 获取二维数组的最大列数

    无论如何 有没有使用 LINQ 来获取二维数组每列的最大值 假设我有以下内容 var arrays new double 5 100 我想获得最大的arrays 0 arrays 1 arrays 4 如何使用LINQ来做呢 我可以使用这样
  • 提供通用服务接口最具体实现的依赖注入机制

    我觉得我和标题一起玩了流行语宾果游戏 这是我所要求的一个简洁示例 假设我有一些实体的继承层次结构 class BaseEntity class ChildAEntity BaseEntity class GrandChildAEntity
  • GetWindowText() 抛出错误并且没有被 try/catch 捕获

    当我为 GetWindowText 运行下面的代码时 我收到作为内部异常抛出的以下错误 尝试读取或写入受保护的内存 这通常表明其他内存已损坏 DllImport user32 dll EntryPoint GetWindowTextLeng
  • 如何从二维字节数组创建图像?

    在我的项目中 经过长时间的处理 我从红外摄像头获得了一个二维字节数组 字节数组中保存图像 如何在 C 中将该字节数组转换为图像 我知道通过 MemoryStream ms new MemoryStream byteArray System
  • 使用无状态会话延迟查找字典值

    在我的应用程序中 我设置了一个三元字典映射 以便对于给定用户 我可以检索属于该用户的对象的每个实例的 设置 也就是说 我有类似的东西 public class User public virtual IDictionary
  • 对于多重继承,使用隐式转换而不是 QueryInterface() 是否合法?

    假设我有一个类实现两个或多个 COM 接口 正如here https stackoverflow com questions 1742848 why exactly do i need an explicit upcast when imp
  • 网络驱动器在启动时不可用

    我有一个 C 应用程序 它在启动时加载 并将数据记录到网络驱动器 该驱动器安装为 X 当机器首次启动时 应用程序会抛出 X 不可用的错误 如果我重新启动应用程序 也会出现同样的错误 但是 如果我打开 Windows 资源管理器并双击浏览驱动
  • 多次重定义错误

    在了解了有关类和指针的更多信息后 我重构了一个程序并删除了超过 200 行代码 在此过程中创建了另外两个类 Location and Piece 问题是 在编译完所有内容后 链接器抱怨构造函数Piece被定义了多次 有很多错误 In fun
  • 如果启用优化,JIT 是否会始终内联此方法?

    我并不期望得到明确的 是 或 否 您可能拥有的任何知识我都会考虑作为答案 private String CalculateCharge Nullable
  • ASP .NET 按钮事件处理程序不会在第一次单击时触发,而是在回发后第二次单击时触发

    背景 我正在自定义现有的 ASP NET C 应用程序 它有自己的小 框架 和约定 供开发人员在扩展 定制其功能时遵循 我目前正在扩展它的一些管理功能 该框架提供了一个合同来强制执行GetAdministrationInterface 方法
  • 使用 Thread.Sleep 等待的替代方法

    首先我不是在问同样的问题C Thread Sleep 的替代方案 https stackoverflow com questions 5450353 c sharp alternative to thread sleep or C 中 Th
  • 创建一个重复 char n 次的编译时字符串

    我正在使用这样的函数将数据导出到 xml 文件中 注意 愚蠢的示例 void write xml file const std string path using namespace std string view literals Use
  • 如何使用 google test for C++ 来运行数据组合

    我有一个单元测试 需要针对 200 种可能的数据组合运行 生产实现在配置文件中有要测试的数据 我知道如何模拟这些值 我更喜欢为每个组合编写单独的测试用例 并使用某种方式循环数据 有没有使用 Google test for C 的直接方法 您
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • 实体框架 - SQL Server 2005 - IIS 服务器日期时间问题

    我正在使用 MVC3 和实体框架 在我的应用程序中 我需要通过 EF 调用 SQL Server 2005 中的存储过程来根据以下内容搜索一些数据datetime传递的参数 在当地环境中一切似乎都运行良好 但是将其托管到 IIS 后 我在尝
  • 通过单击内部小部件而不是标题栏来移动窗口

    在 Windows 中 当我创建 QMainWindow 时 我可以通过单击标题栏并拖动它来在屏幕上移动它 在我的应用程序中 我使用隐藏了标题栏setWindowFlags Qt CustomizeWindowHint 我正在尝试使用小部件
  • C# 和匿名对象数组

    这样的表达是什么意思呢 obj DataSource new new Text Silverlight Count 10 Link Tags Silverlight new Text IIS 7 Count 11 Link http iis
  • 在 yacc 中将多种数据类型分配给非终端

    我正在开发一个班级项目 我们必须在其中构建一个解析器 我们目前正处于在 yacc 中构建解析器的阶段 目前让我困惑的是我读到您需要为每个非终结符分配一个类型 在某些情况下 我会有类似的东西 union Type dataType int i
  • 使用 Boost::Spirit 解析 time_period 表达式

    我需要使用 Boost Spirit 解析以下 EBNF 表达式 period date part time part date part time part time part hours minutes seconds date par

随机推荐

  • 在浏览器中训练后,将模型合并并保存在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