TL; DR Да, вы можете анализировать Haskell, используя библиотеку monadi c синтаксического анализатора, такую как Parse c.
Некоторые языки программирования, такие как Haskell, не являются полностью без контекста. Это означает, что некоторая контекстная информация необходима для их анализа. Haskell не является полностью контекстно-свободным, потому что он чувствителен к отступам.
Некоторые библиотеки комбинаторов синтаксического анализа monadi c, такие как Parse c и Megaparse c, позволяют более легко анализировать контекстно-зависимые языки. Типы Parse c ParsecT
и Parsec
могут отслеживать контекстную информацию, которую библиотека называет «пользовательским состоянием», что позволяет анализировать контекстно-зависимые части языков, такие как уровень отступов. Доступ к «пользовательскому состоянию» осуществляется с помощью функций getState
, putState
и modifyState
. Сложнее всего смешивать парсеры, которые имеют «пользовательские состояния» разных типов (хотя в настоящее время я разрабатываю разветвление Parse c, которое облегчает эту задачу среди прочего).
Возможно используйте подходы, отличные от комбинаторов синтаксического анализа monadi c, однако они часто более ограничены и / или менее просты и могут потребовать больше обходных путей, чтобы заставить их работать. Например, библиотека генератора синтаксического анализатора, такая как Flex / Bison, может использоваться для анализа контекстно-свободных частей Haskell, однако для анализа контекстно-зависимых частей потребуется обходной путь, поскольку библиотеки генератора синтаксического анализатора могут анализировать только контекстно-свободные языки. .