2017-07-21 63 views
7

我想知道,如果Haskell中有一種標準的規範方式,不僅要爲特定的文件格式編寫解析器,而且還要編寫一個編寫器。在Haskell中解析和漂亮的打印相同的文件格式

在我的情況下,我需要解析一個數據文件進行分析。但是,我也模擬要分析的數據並將其保存爲相同的文件格式。我現在可以使用Parsec或類似的東西編寫一個解析器,並編寫以需要的方式執行文本輸出的函數,但每當我更改文件格式時,我都必須更改我的代碼中的兩個函數。有沒有更好的方法來實現這個目標?

謝謝 多米尼克

+1

我認爲最簡單的做法是定義一個表示文件語法的數據類型,然後按照您的想法編寫單獨的解析器和漂亮的打印機。這是大多數語言庫所做的例子。 – jozefg

+2

以下是reddit上近期的一些相關主題:[1](https://www.reddit.com/r/haskell/comments/6aqvgj/parser_libraries_with_ast_output/),[2](https://www.reddit.com/ r/haskell/comments/66o3lp/i_think_this_is_a_really_stupid_question_inverse /)IMO這項技術似乎仍然頗具實驗性。 –

+0

你想要做的是定義一個語法,並使用一些庫自動生成解析器和漂亮的打印機。有一些圖書館聲稱能夠做到這一點,但推薦一個可能是OT(如果我有任何經驗的話,我會這樣做) – jberryman

回答

2

的BNFC-元包https://hackage.haskell.org/package/BNFC-meta-0.4.0.3

可能是你在尋找什麼

「具體地,給出準引用LBNF語法(如使用的BNF轉換器)它生成(使用模板哈斯克爾)一個LALR解析器和漂亮的語言打印機。「

+0

非常感謝您的意見和答案。這確實是我正在尋找的/語法/概念。除了BNFC-meta軟件包,夏莉瑤夏的[第二鏈接](https://www.reddit.com/r/haskell/comments/66o3lp/i_think_this_is_a_really_stupid_question_inverse/)也提到了有趣的[語法](https: //hackage.haskell.org/package/syntax)庫。 –