У меня проблема с двусмысленным анализом в insta. Вот грамматика:Неопределенность Instaparse в Clojure
(def yip-shape
(insta/parser
(str/join "\n"
["S = (list-item | heading | text-block)*"
;; lists and that
"list-item = list-level <ws> anything"
"list-level = #' {0,3}\\*'"
;; headings
"heading = heading-level <ws> (heading-keyword <ws>)? (heading-date <ws>)? anything <eol?>"
"heading-level = #'#{1,6}'"
"heading-date = <'<'> #'[\\d-:]+' <'>'>"
"heading-keyword = 'TODO' | 'DONE'"
"text-block = anything*"
"anything = #'.+'"
"<eol> = '\\r'? '\\n'"
"<ws> = #'\\s+'"])))
Проблема с заголовком, как ## TODO Done
- Я могу понять, почему существует неоднозначность, я просто не уверен, что лучший способ решить эту проблему. Например
(insta/parses yip-shape "## TODO Done.")
Производит:
([:S [:text-block [:anything "## TODO Done."]]]
[:S [:heading [:heading-level "##"] [:anything "TODO Done."]]]
[:S [:heading [:heading-level "##"] [:heading-keyword "TODO"] [:anything "Done."]]])
Последний из которых является результатом я ищу. Как лучше всего устранить двусмысленность и сузить результат до последнего в этом списке?