0

在我做的语法下面。

  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 标识符

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

4

1 回答 1

0

一个问题是语法不能确定一个declaration结束和下一个开始的地方。

这个一般问题的一个简单例子:norelation可以只是一个 relatts可以是attnames 的列表。因此,如果您有两个连续norelation的 ,那可能是两个attnames 序列。你如何区分两个连续的序列和一个较长的序列?还是三个较短的?等等。

同样的问题还有很多其他的例子。

除非您错误地转录了语言,否则这是语言设计的问题,分号是一种常见的解决方案。

于 2018-03-28T14:58:57.423 回答