问题标签 [shift-reduce]

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 回答
597 浏览

parser-generator - 用一个小小的 Lemon 语法解决解析冲突

我正在尝试学习Lemon 解析器生成器的基础知识,但我很快就卡住了。

这是一个小语法:

它导致1个解析冲突:

然而,如果我将最后一条规则重写如下:

然后它不会引起冲突。但我认为这不是正确的方法。

如果有人能解释什么是正确的方法以及为什么,我将不胜感激。

0 投票
2 回答
3008 浏览

if-statement - bison 中的 if-else 语句

我正在尝试在野牛中执行 if-then 语句。问题是我正在研究一个每个人都说有效的解决方案,但它没有:(我的代码是:

声明:matchedstmt
| 无与伦比的
;matchstmt : if '(' 表达式 ')' 匹配stmt 否则匹配stmt

unmatchedstmt : if '(' 表达式 ')' 语句

otherstmt : 表达式

...

其中“if”和“else”是%token

!!在终端它说我有一个班次/减少。

我也试过 %nonassoc 和 %left

我能做些什么??

0 投票
0 回答
42 浏览

java - 为新语言训练斯坦福 RSS 和 Shift Reduce 解析器

我想用现有的树库训练基于选区的斯坦福解析器(RSS 和 Shift Reduce),但无法在网上找到足够的信息来做到这一点。两个关键问题:

  1. 我应该以什么格式导出我的树库以便能够训练每个解析器?(我注意到“标准树库格式”应该用于 SR 解析器 - 但我找不到这种格式的规范。如果它与 PENN 树库使用的格式相同,树应该如何拆分?在一个单个文件根据换行符分隔?在单独的文件中?)

  2. 我正在通过在 IDE 中编写一些 Java 代码以编程方式尝试此操作。假设我现在有正确的文件,我将如何训练每个解析器?应该以什么顺序使用哪些方法调用?

我无法从每个解析器的源代码或 Javadocs 中弄清楚这一点。任何建议将不胜感激。

0 投票
1 回答
51 浏览

parsing - 减少冲突

在我做的语法下面。

  1. S' -> 平方英尺
  2. sqf -> 声明
  3. 声明 -> 声明
  4. 声明 -> 声明声明
  5. 声明 -> 关系
  6. 声明 -> norelation
  7. 关系 -> 头体
  8. norelation -> 相关
  9. norelation -> 相关数据
  10. norelation -> 关联关联数据
  11. 头-> relname 属性
  12. 身体-> 相关数据
  13. 身体 -> 空的
  14. relname -> RELKW 标识符
  15. 属性-> 相关
  16. 属性 -> 空
  17. 相关人员-> attname
  18. relatts -> attname relatts
  19. reldata -> DATAKW 元组
  20. 相关数据-> DATAKW
  21. 元组 -> 元组
  22. 元组 -> 元组元组
  23. attname -> ATTKW 标识符
  24. 元组 -> 值
  25. 空 ->

问题是语法不明确,因为对于某些规则存在移位/减少冲突。特别

在以下针对 DATAKW 的规则中,我们有移位/减少冲突

  • 关系 -> 头体
  • 身体-> 相关数据
  • 身体 -> 空的
  • reldata -> DATAKW 元组
  • 相关数据-> DATAKW
  • *空 -> *

在以下针对 DATAKW 的规则中,我们有移位/减少冲突

  • norelation -> 相关
  • norelation -> 关联关联数据
  • reldata -> DATAKW 元组
  • 相关数据-> DATAKW

在下面的 ATTKW 规则中,我们有移位/减少冲突

  • 头-> relname 属性
  • 属性-> 相关
  • 属性 -> 空
  • 相关人员-> attname
  • relatts -> attname relatts
  • *空 -> *
  • attname -> ATTKW 标识符

在下面的 ATTKW 规则中,我们有移位/减少冲突

  • 相关人员-> attname
  • relatts -> attname relatts
  • 相关人员-> attname
  • relatts -> attname relatts
  • attname -> ATTKW 标识符

任何人都可以帮我解决这些冲突,拜托。

0 投票
2 回答
376 浏览

algorithm - 使用备选方案解析 CFG

我有一个相当简单的语言表示为 CFG。

由于存在左递归,递归下降解析器不会削减它。但是,我还需要找到所有可能的解释:给定v x v y v z,我需要我的解析器同时找到(v x (v y v)) z((v x v) y v) z

我有什么选择?添加回溯以查找所有可能性的 Shift-reduce 似乎很好,但我听说向 shift-reduce 解析器添加回溯可以使其时间复杂度呈指数级增长。这个 CFG 足够小,应该没关系,但我需要将它扩展到更大的语法(有数千个终端)。

0 投票
1 回答
210 浏览

bison - 由于 epsilon 规则,在第一状态中转移/减少冲突

我在野牛中有转移/减少冲突。

我检查了 parser.output 文件:

我有规则:

Prog 是开始符号。

我认为原因是结构的 epsilon 规则。如何在不改变含义的情况下解决它?

0 投票
0 回答
349 浏览

python - 使用 Shift Reduce Parser 的上下文无关语法

我正在尝试将 Shift Reduce Parser 用于以下句子:

He eats pasta with some anchovies in the restaurant

我创建了一些代码和语法,但语法仅适用于:

He eats pasta with some anchovies

现在我的尝试是添加Det NPNP -> 在此处输入图像描述

但显然Det NP是不正确的语法。哪个区域是我的错误,我将如何让 shift 解析器完全解析我的句子。

0 投票
1 回答
111 浏览

parsing - YACC 中以 Action 开头的规则的 Shift-Reduce Conflict

我的书说,当令牌是 A 时,会发生移位减少冲突,因为 yacc 会转换为代码。

我没有得到这个。这里开始的第二条规则转移,空规则减少。start 的第一个规则也发生了变化,所以第一个输入需要 A,而第二个规则需要 B。这怎么冲突?据我所知,一个规则必须减少,另一个应该改变,而不是两个规则应该期望相同的标记作为这种冲突的输入。但是,这里有一条规则既移动又减少(第一条规则),而第二条规则只移动,它们也期望在这些操作之后有不同的令牌。

0 投票
1 回答
54 浏览

c# - shift reduce 解析器如何知道何时减少?

我正在用 c# 编写一个 shift reduce 解析器。我看了一些解释它的文章,但没有一篇详细说明。有人可以指出我对 shift reduce 解析器的详细解释的方向,比如它如何知道何时减少?

0 投票
0 回答
25 浏览

bison - 在 Bison 中为布尔操作数创建产品的方法

我正在 Bison 中创建解析器,并尝试转换规则:

E还有其他规则,例如否定,当然,E可以是一个数字。我想知道制作这些作品的最佳方式是什么。我见过人们为每个操作数写出 $$ = $1 '+' $3 等的计算器示例。

我的 lex 文件返回操作数,{return yytext[0];}但我发现很难找到资源来创建其他产品(比较、&& 和否定)。我有 Levine 等人的 yacc & lex 书,但我仍然对如何去做这件事感到很困惑。

我相信我可以做exp '>' exp {$$ = $1 > $3}and exp '&' exp {$$ = $1 & $3},并返回一个 bool 值,我可以将其定义为一种类型,但我该怎么做呢?

如果有一种优雅的方式可以做到这一点,并且有任何资源可以帮助我编写生产规则,我会很高兴。我知道我可以编写 C 代码,但我对此很陌生,我很不确定