我想爲Jade的子集編寫一個簡單解析器,生成一些XmlHtml以供進一步處理。解析器跳過行
該解析器非常簡單,但經常與Parsec,有點長。由於我不知道是否允許我製作這麼長的代碼帖子,因此我有完整的工作示例here。
我已經涉足Parsec之前,但很少成功。現在,我不太明白爲什麼它似乎吞下了以下幾行。例如,
.foo.bar
| Foo
| Bar
| Baz
玉輸入與parseTest tag txt
測試,返回此:
Element {elementTag = "div", elementAttrs = [("class","foo bar")], elementChildren = [TextNode "Foo"]}
我的解析器似乎能對付任何一種嵌套的,但從來沒有超過一行。我錯過了什麼?
使用令牌模塊通常習慣於與Parsec一起使用。但是,由於Jade顯然使用了空白區域,我認爲您建議編寫一個單獨的掃描程序是正確的,請參閱稍微過時的Parsec手冊的2.11節:http://research.microsoft.com/en-us /um/people/daan/download/parsec/parsec.pdf –
不幸的是,我在'tag'和'tagP'解析器的周圍添加了空格,並且結果仍然是... – Lanbo
@Scán - 雖然這是一個問題。由於Jade似乎對縮進非常敏感,因此您不能直接使用Parsec的'whiteSpace'或'lexeme'分析器,因爲它們會消耗所有的空白區域。縮進敏感的解析是相當先進的(有一些圖書館可以幫助Hackage - 我不知道它們有多麼有用或有何記錄)。如果你是Parsec /解析的新手,我建議選擇一種比Jade簡單一點的語言來練習一下。 –