簡體   English   中英

轉變減少沖突

[英]Shift Reduce Conflicts

我在語法下面。

  1. S'-> sqf
  2. sqf->聲明
  3. 聲明->聲明
  4. 聲明->聲明聲明
  5. 聲明->關系
  6. 聲明-> norelation
  7. 關系->頭身
  8. 無關->相對
  9. 無關-> reldata
  10. norelation->相關reldata
  11. 頭-> relname屬性
  12. 正文-> reldata
  13. 正文->空
  14. relname-> RELKW標識符
  15. 屬性->關聯
  16. 屬性->空
  17. 相關-> attname
  18. 相對->相對名稱
  19. reldata-> DATAKW元組
  20. reldata-> DATAKW
  21. 元組->元組
  22. 元組->元組元組
  23. attname-> ATTKW IDENTIFIER
  24. 元組-> VALUE
  25. 空->

問題在於語法不明確,因為對於某些規則,存在移位/減少沖突。 尤其

在以下DATAKW的規則中,我們有轉移/減少沖突

  • 關系->頭身
  • 正文-> reldata
  • 正文->空
  • reldata-> DATAKW元組
  • reldata-> DATAKW
  • *空-> *

在以下DATAKW的規則中,我們有轉移/減少沖突

  • 無關->相對
  • norelation->相關reldata
  • reldata-> DATAKW元組
  • reldata-> DATAKW

在以下ATTKW的規則中,我們有轉移/減少沖突的方法

  • 頭-> relname屬性
  • 屬性->關聯
  • 屬性->空
  • 相關-> attname
  • 相對->相對名稱
  • *空-> *
  • attname-> ATTKW IDENTIFIER

在以下ATTKW的規則中,我們有轉移/減少沖突的方法

  • 相關-> attname
  • 相對->相對名稱
  • 相關-> attname
  • 相對->相對名稱
  • attname-> ATTKW IDENTIFIER

任何人都可以幫助我解決這一沖突。

問題在於語法無法確定一個declaration在哪里結束而下一個declaration在哪里開始。

此一般問題的一個簡單實例: norelation可能只是一個relatts ,可能是attname的列表。 因此,如果您有兩個連續的norelation ,則可能是attname的兩個序列。 如何將兩個連續的序列與一個較長的序列區分開? 還是三個較短的? 等等。

同一問題還有許多其他實例。

除非您錯誤地轉錄了語言,否則這是語言設計的問題,分號是常見的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM