首页 > 解决方案 > Haskell Parsec、MegaParsec 或 Happy 的简单 C 语法

问题描述

我开发了一个预处理器,将 C 语句的子集转换为 gcc _asm 语句。对于这个项目,我很乐意重用使用任何流行的 Haskell 技术编写的现有 C 语句解析器,或者只是从一些简单的 C 子集解析器开始以避免重做现有工作。

不幸的是,到目前为止,我发现除了 C 之外的所有语法。虽然我可以从 Java/Go 的 Parsec 语法开始,但似乎 MegaParsec 是更好的选择?

我可以快速开发小的 C 子集的语法,但是对于较大的 C 子集的即用型语法将允许我完全跳过 C 语句解析器的开发,而专注于项目的核心 - asm 代码生成。

最终,它可能会变成 C++ 代码的 LLVM pass 转译部分,但为了快速原型,我更喜欢 Haskell,特别是如果我能找到现成的解析器。

标签: parsinghaskellparsechappymegaparsec

解决方案


有解析 C99 语法(和部分 C11)的 Haskell 库:

https://hackage.haskell.org/package/language-c


推荐阅读