2
Q
左保用秒差距
A
回答
1
假設你已經有
data Keyword
data AttributeValue
data Attribute = KeywordOnly Keyword
| KeywordWithAttribute Keyword AttributeValue
keyword :: Parser Keyword
attributeValue :: Parser AttributeValue
,那麼你可以先解析Keyword
,然後任選解析attribute
,然後將它們合併執行attribute :: Parser Attribute
:
attribute :: Parser Attribute
attribute = pack <$> keyword <*> optionMaybe attributeValue
where
pack :: Keyword -> Maybe AttributeValue -> Attribute
pack kw = maybe (KeywordOnly kw) (KeywordWithAttribute kw)
,而無需改變結構你的語法。
相關問題
- 1. 用秒差距
- 2. 用秒差距
- 3. 獲取秒差距的左輸入
- 4. 在秒差距
- 5. 使用秒差距與Data.Text
- 6. 解析用秒差距
- 7. 標的秒差距單子
- 8. 搜索與秒差距
- 9. 解析器使用秒差距
- 10. 與應用型風格秒差距
- 11. 哈斯克爾秒差距EOF
- 12. 哈斯克爾秒差距錯誤
- 13. 秒差距匹配單個Unicode字符
- 14. 浮點數,精度,秒差距
- 15. 二郎相當於秒差距庫
- 16. 哈斯克爾秒差距問題
- 17. 與日曆的毫秒差距太大
- 18. 平凡秒差距例子產生
- 19. 秒差距 - '多' 和錯誤消息
- 20. 想不通負前瞻與秒差距
- 21. 非貪婪重複與秒差距
- 22. 哈斯克爾秒差距的功能
- 23. 爲秒差距3.X Data.Text解析器
- 24. 秒差距產生奇怪的錯誤
- 25. 如何解析與秒差距
- 26. 秒差距不解析換行符
- 27. many1不再秒差距3.X
- 28. css浮動左差距問題
- 29. 頂部,右側和左側的CSS邊距差距
- 30. 如何做正確的情況下,用秒差距
你所顯示的語法有點不是左遞歸,所以它不需要左分解。 – pat
我對解析器瞭解不多,但是沒有使用因式分解來解決第一個/第一個衝突?我的問題在''分析器如何知道在''和'之間採取哪條路徑? –
Rogerp062
當規則中的第一個匹配是規則本身時,需要左分解,這會在遞歸下降解析器中導致無限循環。在這裏,如果沒有找到,或者使<爲可選項,並且刪除'',則只需使用'try'來允許解析器在''只有分支。 –
pat