问题标签 [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.

0 投票
1 回答
582 浏览

c - flex,定义字符

我想定义 char(即 'a AND 'a'),但在检查错误时遇到问题。这里我如何编写规则并检查:

代码

最后检查一下:

0 投票
2 回答
1307 浏览

yacc - Bison/Yacc,让文字标记返回自己的值?

以下是我的规则,当我用 '=' 替换 $2 时,我的代码有效。我知道默认情况下所有文字标记都使用它们的 ascii 值(因此为什么多字符标记需要定义)

以下不起作用。该函数使用 0 而不是我期望的'='调用。我可以设置一个选项吗?(通过手册页并没有这样显示)

在另一段代码中,我有MathOp: '=' | '+' | '%' ...因此我感兴趣的原因。

0 投票
3 回答
912 浏览

c++ - 在 C/C++ 中搜索字符串解析器

我从事一个专注于圣经文本的开源项目。我想创建一个标准的字符串格式来构建一个搜索字符串。然后我需要解析搜索字符串并使用给定的选项运行搜索。有许多不同的选项,从搜索范围到搜索多个文本,再到通配符等。

我在想使用 lex/yacc 之类的东西来为这种格式生成解析器可能是个好主意。我认为 Xapian 项目使用柠檬来实现类似的目标。我的问题是,使用这些工具中的一个(或多个)是完成此任务的最佳方式吗?

除了这个问题,我会很感激任何指向这些工具(以及任何其他可能是选项)的资源的链接。到目前为止,我遇到的最大问题是大多数示例和教程要么面向编程语言,要么面向计算器之类的简单工具,而不是解析字符串格式。

0 投票
2 回答
3463 浏览

gcc - 为什么我的 flex/yacc 编译器不能在另一台 linux 机器上正确编译

在我的机器(运行 cygwin 的 Windows)上,它可以正确编译。Flex 是 2.5.35 版,bison 是 2.3 版

在 linux 机器 1 上它可以正确编译。Flex 是 2.5.4 版,bison 是 1.875c 版。

在 linux 机器 2 上它不能正确编译。Flex 是 2.5.4 版本,bison 是 2.3。

通过查看 flex/bison 版本号,人们会期望,如果它在我的机器上正确编译,它会在机器 2 上正确编译,但事实并非如此。

在 linux 机器 2 上,当我运行 gcc -c y.tab.c 时,我多次收到以下警告

警告:内置函数“printf”的隐式声明不兼容

当我运行以下

gcc -o cminus y.tab.o lex.yy.o -ly -lfl

我收到以下错误。

这个错误可以通过去掉 gcc 中的 -ly 选项来消除,这样程序就可以编译了,但是编译后的程序不能像在我的机器和另一台 linux 机器上那样正常运行。

什么可能导致问题?

0 投票
5 回答
18470 浏览

yacc - 野牛文件结尾

如果我忘记在任何文件的末尾放置一个空行,我的程序就会出现语法错误。问题是我的语法需要换行符来结束当前行。由于不存在换行符,因此野牛会生成语法错误,因为它没有完成规则。

我该如何解决这个问题?我尝试<<EOF>>返回MY_EOF但当我这样做时 lex 崩溃了一个可怕的死亡。我猜它的默认 EOF 中有我没有调用的代码。我不知道它们可能是什么功能。使用 EOF 创建错误symbol EOF is used, but is not defined as a token and has no rules

0 投票
3 回答
6176 浏览

c++ - 如何解决 YACC 中的这种 Shift/Reduce 冲突

我有这样的语法:

“匹配一个或多个规则 1,其中规则 1 是一个或多个规则 2,其中规则 2 是一个或多个规则 3,等等。每个规则由换行符分隔”。看下面的例子。

这样做我会遇到 shift/reduce 冲突,如何更改语法以停止?本质上,它需要在新行之后分支并查看下一个是 TERMINAL2 还是 TERMINAL3。

0 投票
4 回答
1218 浏览

yacc - 野牛移位而不是减少。减少/减少错误

用我的语言我可以写

我的语法不支持语句之间的换行符。else 只能与 if 一起使用。当我在我的规则中添加 optionalNL

else 之前的 optionalNL 会导致 3 个减少/减少。原因是它可以使用 IfExpr 中的第二条规则减少或减少到 exprLoop ,它允许表达式之间有许多换行符。

无论我做什么(我尝试在 optionalNL 和 ELSE 之前编写 %prec )它总是减少到 exprLoop ,这种情况下野牛会给我一个语法错误。我如何告诉野牛此时转移(其他可选NL)而不是减少?(到 exprLoop 导致 else 是一个错误)。

用于测试的示例文件

y.output http://www.pastie.org/707448

替代 .y 和输出。您可以看到它向前看,看到 \n 并且不知道减少规则或继续前进。我改变改变规则的顺序以获得不同的结果。但它要么总是期待一个 \n 要么总是期待一个 else,因此一个规则总是最终被忽略。状态 15

感谢 Kinopiko的回答

我将他的代码更改为没有冲突,然后努力使其更灵活。这是我的文件

测试.y

测试.y

编译后自动运行的测试文件

0 投票
2 回答
110 浏览

c++ - 是否可以堆叠 Yacc 语法规则代码?

假设我每次匹配规则时都需要运行一些初始化代码如何减少冗余?

也有可能做类似的事情

0 投票
2 回答
8426 浏览

bison - 野牛 YYSTYPE:尝试使用 char*

我需要使用 flex 和 bison 来解析一些代码。

YYSTYPE 的默认类型是int,尽管我从来没有这样声明过。这是野牛的默认设置吗?

将字符串传回对我有很大帮助。我读到这个:如何解决 Bison 警告“...没有声明的类型” 这看起来是个好方法。(我还不需要联合的全部功能,只需要 char* 部分,但我不妨使用联合,因为它以后可能会有所帮助。)

它不适合我。我收到这些错误:

以下是我的y语法文件中的声明:

.l这是我文件中的一行:

我还需要做什么来解决错误?

0 投票
1 回答
1433 浏览

grammar - 在 Linux 上使用 Bison --graph=[file] 的技巧

最近(大约一个月前)我试图在我公司的内部扩展语言中引入新的结构,并且遇到了几个 reduce-reduce 错误。虽然我最终解决了这个问题,但深入研究y.output文件并不是一件轻松的事。

作为实验,我尝试使用 Bison 的--graph=<file>选项来输出DOT文件(请注意,我们的标准构建使用 Byacc,而不是 Bison)。由于我使用的是“交钥匙”Linux 机器,因此我没有安装 Graphviz,也无法从 RPM 轻松安装(在 Red Hat Enterprise Linux 4 上工作)。相反,我从源代码构建它。

作为初始实验,我尝试使用 Postscript 的输出运行dotty 。现在我们的内部语言是一般的本土语言、图灵完备的、动态类型的脚本语言,但我对接下来发生的事情毫无准备。dotty跑了四个多小时(2GHz 双核 AMD64 机箱)完成后,渲染的图形就不是我所说的可读性了。

所以,很简单,我正在寻求建议。是否有一组开关可以改善我采用的“默认”方法的结果?我正在寻找经验

  • 优化“渲染”时间
  • 提高图表的可读性
  • 关于更好的图形查看器的可能建议