【问题标题】:Context-free grammar for CC 的上下文无关文法
【发布时间】:2013-03-19 06:00:15
【问题描述】:

我正在开发 C 的解析器。我正在尝试查找 C 的所有上下文无关派生的列表。理想情况下,它应该是 BNF 或类似的。我确信这样的事情就在那里,但谷歌搜索并没有给我太多。

事实证明,阅读现有解析器/编译器的源代码更令人困惑,而不是有用,因为我发现的大多数比我正在构建的更雄心勃勃和复杂。

【问题讨论】:

  • 我可以确认这很好。就在前一周,我从该页面的 LEX/YACC 语法中构建了一个 flex/bison 解析器。
  • @CongXu,看起来不错,唯一的缺点是我看到它只是历史 C,既不是 C99 也不是 C11。
  • @JonathanLeffler 不,您仍然可以通过将声明中的类型名称解析为终端标识符并在语义级别执行检查来获得上下文无关语法。事实上,Clang 正是这样做的。
  • @ThuyNguyen 只是 GNU 预处理器 cpp。 Mcpp 是另一种具有更宽松许可证的替代方案

标签: c context-free-grammar bnf


【解决方案1】:

这是一个 ANSI-C 语法,已更新为 C11 标准。应该服务于您的目的。

http://www.quut.com/c/ANSI-C-grammar-y.html

【讨论】:

    【解决方案2】:

    您始终可以使用 C11 标准本身的附录 A。免费提供的标准草案将适用于您的目的,地址为http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2014-04-26
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多