问题标签 [bison]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ide - Flex/Bison IDE?
我正在寻找一个良好的开发环境,可以在其中使用 flex 或 bison 或两者兼而有之。
是否有任何具有这些功能和/或适合此功能的 IDE?
(如果不是下一个最普遍的问题是是否有带有 IDE 的词法分析器/解析器生成器?)
谢谢~亚历克斯
bison - 将生成的文件添加到分发的最佳方法?
我有一个使用 autoconf / automake 的非常复杂的(C++)项目,其中包括一些“生成的”文件(foo.yy -> foo.cc)。实际构建是使用“控制脚本”(Gentoo .ebuild 对于那些熟悉该概念的人)在各种平台上完成的。
现在,其中一个目标平台不正确支持 foo.yy -> foo.cc 步骤,必须使用在 Linux 机器上生成的 foo.cc 文件。
现在我有两种方法可以解决这个问题:
1) 将 foo.cc 签入项目存储库,并以某种方式修补 configure.in(或其他)以包括对 foo.yy / foo.cc 的时间戳检查,如果在有问题的目标上运行时会生成一个可理解的错误消息,并且过时foo.cc;
2) 将 foo.cc 签入到控制脚本库中,并有脚本控制时间戳并给出错误消息。
我可以做 2) 没问题,但我认为这不是放置 foo.cc 的正确位置。
另一方面,我对 autoconf / automake 了解不多,也不知道如何在 configure.in (或任何地方)中实现时间戳检查 / 错误消息。
您有什么建议,这里有人知道如何解决解决方案 1)吗?
编辑:使用解决方案 3) 解决,调整有问题的目标框,直到它能够自己执行 foo.yy -> foo.cc 步骤。我的问题解决了。
但我会留下这个问题 - 如何使用 autoconf / automake 进行时间戳检查 / 可理解的错误消息?
c - 当我编写词法分析器时,tokens.h 有什么用?
我正在用 C 编写一个词法分析器,我在某处读到了有关头文件的信息tokens.h
。它在那里吗?如果是这样,它的用途是什么?
c++ - 在 vc6 中使用 bison 和 flex
当我在 vc6 中使用 bison 和 flex 时,出现以下错误
lex.yy.c(395):错误 C2146:语法错误:缺少 ';' 在标识符 'YY_PROTO' lex.yy.c(395) 之前:致命错误 C1004:发现意外的文件结尾
这是什么原因?请帮忙。
复制自评论:
c - 如何初始化 Bison 的 %union 值?
在野牛我有一个工会
我想像这样使用它
在 Lex 中:
而不是
轻松防止内存泄漏
但是我需要一些方法来分配一个 std::string 到 sval 开始。
我怎样才能做到这一点?
c - 使用 yacc 或 Bison 和 Flex 创建 foreach 关键字
我开发了一种解释型编程语言。它强烈基于 C。问题是,我想添加一个foreach
指令,但不知道如何添加。
我使用 Bison 和 Flex 作为解析器和词法分析器生成器。
compiler-construction - 如何使用缩进作为带有 bison 和 flex 的块分隔符
我了解如何在 bison + flex 中实现缩进作为块分隔符。就像在 python 中一样。我正在编写自己的编程语言(主要是为了好玩,但我打算将它与游戏引擎一起使用),我将尝试提出一些特别的东西,以最大限度地减少样板并最大限度地提高开发速度。
我已经用 C 编写了一个编译器(实际上是 Nasm 翻译器的“langToy”),但失败了。由于某种原因,它只能处理整个源文件中的一个字符串(好吧,我已经醒了超过 48 小时 - 所以......你知道,大脑崩溃了)。
我不知道大括号和/或开始 - > 结束是否更容易实现(我这样做没有问题)或者只是我的大脑被锁定了。
提前致谢!
更新:好的,我不知道如何用 flex 来做。我在将多个 DEDENT 返回到解析器时遇到问题。Flex/Bison 对我来说相对较新。
更新 2: 这是我迄今为止提出的 flex 文件;它不太明白:
您可以尝试使用它,也许您会看到我缺少的东西。在 Haxe ( return t_dedent( num ); ) 中返回多个 dedent 会很容易。
此代码并不总是正确匹配缩进/缩进。
更新 3:我认为我会放弃对 flex 的希望并以自己的方式去做,如果有人知道如何在 flex 中做到这一点,无论如何我都会很高兴听到它。
parsing - 在 yacc 中允许变长列表
我希望能够解析以下结构:
我正在使用 flex 进行标记,并且效果很好。我正在使用 yacc (bison) 进行解析。
允许这种结构的推荐方法是什么?现在,在我的 test.y 文件中,我有:
我怀疑 strcat() 是一个非常非常糟糕的主意。当谈到 lex/yacc(大约 3 小时的经验)时,我是一个真正的新手,所以在手腕上轻轻一拍,以及指向正确方向的指针会很棒。
编辑:这样做的目的是让我为外部应用程序构建测试工具。词法分析/解析将用于解释用户提供的测试脚本。一个命令允许用户向应用程序发送消息,然后我读取多行响应并与用户在脚本中提供的可变长度字符串列表进行比较。我在上面发布的片段是我认为让用户定义可能的响应的方式。
例如:
或者
c - 如何使用 Bison/Yacc 和递归规则构建数组
使用 Bison,我想出了如何将所有内容放入一个长字符串中,如下所示:
和:
但问题是我将不得不在第二条规则中再次拆分 $2 来解析它。有没有办法填充数组而不是仅仅使用连接?我会以错误的方式解决这个问题吗?
如果我需要构建一个有意义的链接列表之类的东西,只是不确定绑定到 arg_list 的正确方法是什么,然后清理内存。