首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Bison终止而不是移位错误

Bison终止而不是移位错误
EN

Stack Overflow用户
提问于 2017-06-11 19:03:27
回答 1查看 120关注 0票数 0

我有一个很好的语法,只是它不能容忍语法错误。我试图在error令牌中工作,以便它能够优雅地恢复。我已经阅读了关于错误恢复的野牛手册,但是有些东西并没有加起来。

下面是语法的一个片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%start start
%token WORD WORDB SP CRLF

%%

start : A B C
      | error CRLF start

A     : WORD SP WORD CRLF

...

下面是bison生成的用于描述语法的输出文件片段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
State 0

    0 $accept: . start $end

    error  shift, and go to state 1
    WORD   shift, and go to state 2

    start      go to state 3
    A          go to state 4

State 1

    2 start: error . CRLF start

    CRLF  shift, and go to state 5

State 5

    2 start: error CRLF . start

    error  shift, and go to state 1
    WORD   shift, and go to state 2

    start     go to state 25
    A         go to state 4

给定输入令牌WORDB CRLF WORD SP WORD CRLF .....,我希望状态转换为0 -> 1 -> 5 -> 2 -> ...,但是当我运行解析器时,它实际上生成以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--(end of buffer or a NUL)
--accepting rule at line 49 ("WORDB")
Starting parse
Entering state 0
Reading a token: Next token is token WORDB ()
syntax error, unexpected WORDB, expecting WORD

据我所知,如果解析器位于状态0,并且它看到的是WORD以外的令牌,那么它应该将令牌解释为error,并且应该转到State 1。实际上,它只是很难失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-11 22:02:09

error转换不会抑制对yyerror()的调用,因此如果yyerror实现执行类似于调用exit()的操作,则错误恢复将无法进行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44490848

复制
相关文章
何时使用MongoDB而不是MySql
MySQL 和 MongoDB 是两个可用于存储和管理数据的数据库管理系统。MySQL 是一个关系数据库系统,以结构化表格格式存储数据。相比之下,MongoDB 以更灵活的格式将数据存储为 JSON 文档。两者都提供性能和可扩展性,但它们为不同的应用场景提供了更好的性能。
wayn
2023/08/09
1K0
何时使用MongoDB而不是MySql
何时使用Kafka而不是RabbitMQ
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求。本文将比较 Kafka 和 RabbitMQ 的主要区别,并分析何时使用 Kafka 而不是 RabbitMQ。
wayn
2023/06/26
3590
何时使用Kafka而不是RabbitMQ
何时使用Elasticsearch而不是MySql
MySQL 和 Elasticsearch 是两种不同的数据管理系统,它们各有优劣,适用于不同的场景
wayn
2023/08/28
3120
何时使用Elasticsearch而不是MySql
何时使用Elasticsearch而不是MySql
MySQL 和 Elasticsearch 是两种不同的数据管理系统,它们各有优劣,适用于不同的场景。本文将从以下几个方面对它们进行比较和分析:
wayn
2023/08/09
6980
何时使用Elasticsearch而不是MySql
何时使用Kafka而不是RabbitMQ
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求。本文将比较 Kafka 和 RabbitMQ 的主要区别,并分析何时使用 Kafka 而不是 RabbitMQ。
wayn
2023/08/28
2640
何时使用Kafka而不是RabbitMQ
【错误记录】编译 Linux 内核报错 ( /bin/sh: 1: bison: not found )
文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 编译 Linux 内核 , 执行 make menuconfig 配置菜单命令 , 报如下错误 : root@ubuntu:~/kernel/linux-5.6.14# make menuconfig LEX scripts/kconfig/lexer.lex.c YACC scripts/kconfig/parser.tab.[ch] /bin/sh: 1: bison: not found scripts/Makefil
韩曙亮
2023/03/30
2.4K0
【错误记录】编译 Linux 内核报错 ( /bin/sh: 1: bison: not found )
Flex & Bison 开始
词法分析把这段代码分解为这样一些记号:alpha, =, beta, +, gamma, ;。接着语法分析确定了 beta + gamma 是一个表达式,而这个表达式被赋给了 alpha。
GoCoding
2022/11/07
1.6K0
做产品经理而不是功能经理
产品经理是个很奇怪的岗位,好像大多数人都能做,因为每个人对某个产品都有自己的看法,都能提出一些意见和想法,甚至能设计实现原理;也好像大多数人都做不好产品经理,因为互联网上成千上万个产品,大部分是垃圾,
用户1756920
2018/06/20
1.1K0
WideNet:让网络更宽而不是更深
这是新加坡国立大学在2022 aaai发布的一篇论文。WideNet是一种参数有效的框架,它的方向是更宽而不是更深。通过混合专家(MoE)代替前馈网络(FFN),使模型沿宽度缩放。使用单独LN用于转换各种语义表示,而不是共享权重。
deephub
2023/08/30
2210
WideNet:让网络更宽而不是更深
android推荐使用dialogFrament而不是alertDialog
DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。 在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。 2、 好处与用法 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。且Dia
xiangzhihong
2018/01/29
2.4K0
android推荐使用dialogFrament而不是alertDialog
云原生关乎文化,而不是容器
本文译自 Cloud-Native Is about Culture, Not Containers[1],文章洋洋洒洒上万字,作者总结了她见过的云原生失败的各种经验教训,还用生动的示例说明了什么不是云原生。译者是在周末闲暇时间仓促间翻译的,其中难免有不当之处,请读者指正。译者:宋净超(Jimmy Song)
xcbeyond
2021/04/02
5050
iis站点设置错误页面返回http状态码为404而不是302或其他
  今天一位客户说网站错误页面返回的状态码是302而不是404,问ytkah要如何处理。这个应该是设置没有正确的原因。我们一步步来排查一下。1、首先打开iis管理器,左侧选择具体的站点,在右侧窗口中点击404错误页,如下图所示
ytkah
2019/09/25
3.3K0
iis站点设置错误页面返回http状态码为404而不是302或其他
Spring Boot 容器选择 Undertow 而不是 Tomcat
Spring Boot内嵌容器支持Tomcat、Jetty、Undertow。为什么选择Undertow?
lyb-geek
2022/03/09
1.9K0
a标签点击后下载图片而不是打开
如果遇到图片等格式是会直接打开,如果我们需要这种也维持下载的话,加个download属性即可
阿超
2022/08/16
2.1K0
使用HSB而不是RGB来定义颜色
有多种方法可以在代码中定义颜色。最常用的方法是指定三种基色的值 - 红色、绿色和蓝色 (RGB)。本文通过指定色调、饱和度和亮度 (HSB) 的值来探索替代机制的使用。可以以更直观的方式使用 HSB 属性来创建颜色搭配良好的调色板。
韦弦zhy
2023/01/06
2.7K0
使用HSB而不是RGB来定义颜色
重要的是图表思维,而不是工具
很久没有作图了,主要是一时找不到应该练手的案例。 然后昨天逛网易数独栏目的数据新闻,看到一幅还不错的案例,对于我来说值得一试,然后就手痒给照葫芦画瓢弄出来了。(主要是其中涉及到的细节处理很麻烦) 当然过程是花了些时间的,主要是需要慢慢打磨其中的细节,需要利用很多技术来处理图形版面的交接位置。 令我感触最深的是,想要用ggplot2随心所欲的画图,ggplot2掌握的再熟练,也只是勉强过的了技术关,而图表背后的思维和结构更考验人,更具有挑战性。 好在我学习R语言之前,就已经利用Excel临摹了大量的高难度信息
数据小磨坊
2018/04/11
9180
重要的是图表思维,而不是工具
innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree
链表和数组相比,数组可以通过下标快速定位,或者通过二分查找,查询复杂度为O(logn),而链表只能按照顺序挨个查找,复杂度为O(n)。
大忽悠爱学习
2023/03/23
2.4K0
innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree
JDBC为什么要使用PreparedStatement而不是Statement
前言 这篇博客不是我写的,是由刘志军大大翻译的,真心觉得很棒,而且是必学要掌握的东西,所以就转载过来了,我个人的第一篇转载文章。 开始 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时Prepar
roobtyan
2018/06/04
1.4K0
为什么特征工程要用 SQL 而不是 Python
我们常说机器学习是一门实验科学。所以相比较传统工程而言,机器学习分成两个大的阶段:
用户2936994
2022/05/18
8240
为什么特征工程要用 SQL 而不是 Python
需要学习的是编程,而不是编程语言
我们不仅是程序员,而且是个(与时俱进的)学习者。鲜见的是有多少人认为他们是在学习编程的呢。原翻译传送门is here
Jimmy_is_jimmy
2023/05/24
4640

相似问题

Bison:冲突:1移位/减少错误

21

类C语言的Bison移位/减少错误

11

为什么Bison给出冲突:2移位Reduce错误

10

bison shift而不是reduce使用reduce/reduce错误

33

Bison移位/减少冲突

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文