parsing - Haskell Parsec、MegaParsec 或 Happy 的简单 C 语法
问题描述
我开发了一个预处理器,将 C 语句的子集转换为 gcc _asm 语句。对于这个项目,我很乐意重用使用任何流行的 Haskell 技术编写的现有 C 语句解析器,或者只是从一些简单的 C 子集解析器开始以避免重做现有工作。
不幸的是,到目前为止,我发现除了 C 之外的所有语法。虽然我可以从 Java/Go 的 Parsec 语法开始,但似乎 MegaParsec 是更好的选择?
我可以快速开发小的 C 子集的语法,但是对于较大的 C 子集的即用型语法将允许我完全跳过 C 语句解析器的开发,而专注于项目的核心 - asm 代码生成。
最终,它可能会变成 C++ 代码的 LLVM pass 转译部分,但为了快速原型,我更喜欢 Haskell,特别是如果我能找到现成的解析器。
解决方案
有解析 C99 语法(和部分 C11)的 Haskell 库:
推荐阅读
- python - 安装后 GNU Radio 上的 ModuleNotFoundError
- javascript - MouseEvent.clientX 和 MouseEvent.clientY 使用 CSS 缩放变换的意外结果
- bash - bash 脚本的回显帮助以计算秒数(并覆盖)
- reactjs - 将 props.type 与 react styled-components 一起使用
- c# - 带有模型绑定的 Razor 页面 POST 多个表单
- r - R graphics/ggplot2 用突出显示的“活动”线再现刻面,其他线变灰
- maven - 从私人 bitbucket repo 和 jenkins 自动构建 maven 项目
- r - 如何使用 R 将日期时间格式转换为“ddmmyyyy”?
- python - 如何使用 re.compile 格式化 split 函数
- jmeter - 使用 JMeter 在 Tibco JMS 端点上执行负载测试