Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;带Bison的GLR解析器_Bison_Glr - Fatal编程技术网

C++;带Bison的GLR解析器

C++;带Bison的GLR解析器,bison,glr,Bison,Glr,我正在使用Bison生成一个解析器。我有一个转变/减少冲突,我真的需要野牛使用GLR而不是LALR来处理它。但是我已经传递了%glr parser指令,并且源文件仍然声明它是一个LALR解析器。我甚至发现了一个“GLR.CC”骨架,它是GLR C++分析器,它使用了代码> %Frase[GLR.CC ] < /C> >没有改变输出。Bison不是为所有目标语言提供所有算法吗?您只需要%glr parser就可以获得一个glr解析器。请注意,GLR解析器可能仍然存在冲突(shift/reduce或

我正在使用Bison生成一个解析器。我有一个转变/减少冲突,我真的需要野牛使用GLR而不是LALR来处理它。但是我已经传递了
%glr parser
指令,并且源文件仍然声明它是一个LALR解析器。我甚至发现了一个“GLR.CC”骨架,它是GLR C++分析器,它使用了代码> %Frase[GLR.CC ] < /C> >没有改变输出。Bison不是为所有目标语言提供所有算法吗?

您只需要
%glr parser
就可以获得一个glr解析器。请注意,GLR解析器可能仍然存在冲突(shift/reduce或reduce/reduce),只是生成的解析器将尝试这两种方法并统一结果


如果要关闭有关冲突的消息,可以使用
%expect
%expect rr
。Hoever,如果你不了解所有冲突是什么,那么盲目地使用GLR解析器是危险的——如果你不小心的话,生成的解析器可能需要指数级的时间来解析一些输入,或者在运行时可能会给你带来歧义错误。

我不知道你所说的“
%skeleton”GLR.cc“
没有更改输出”是什么意思,因为它是!你确定你真的重新生成了输出吗?如果有,请提供更多详细信息

$ echo "%% exp: '0'" > /tmp/f.y
$ bison -S lalr1.cc /tmp/f.y -o f1.cc
$ bison -S glr.cc /tmp/f.y -o f2.cc
$ ls -l f1.cc f2.cc
-rw-r--r--  1 akim  wheel  28373 30 oct 09:29 f1.cc
-rw-r--r--  1 akim  wheel  82767 30 oct 09:29 f2.cc

我也有同样的问题。我学到的东西-如果不能产生新的输出,野牛返回1。问题是:为什么?因为我已经禁用C++变体(<代码> %.定义API.Value.Type变体< /C> >),这在拜森中不受GLR的支持,但是忘记<代码> %.定义API .令牌.构造函数< /> >。而野牛没有长跑只是休息


祝您在故障排除方面好运。

bison是免费软件,因此您可以研究并改进其soruce代码。顺便问一下,你是否考虑过使用另一个分析器生成器,比如ANTLR?@巴西尔:我的语法不是LL。至于改进它的源代码,你的意思是,如果我还想通过60亿个支持实用程序。ANTLR在处理某些类型的非LL语法时有一些技巧。@Basile:我为什么在乎?野牛也是。我目前正在尝试使用的。省去我移动源代码的麻烦吧。我会在专门针对bison的邮件列表上问这样的问题……这并不能真正回答问题-我说我尝试了
%glr解析器
@DeadMG:然后你得到了一个glr解析器。只是GLR解析器与LALR解析器具有相同的shift/reduce和reduce/reduce冲突,它们只是以不同的方式处理冲突。我没有说我没有冲突,因为它仍然报告冲突,我说我仍然有冲突,因为源文件的注释仍然如此。那么,您可能有过时的生成文件。关于bison输出的详细信息以及令人困惑的评论可能真正有助于人们了解问题。