c - 编程语言 C 的非压缩、非最小语法

标签 c grammar bnf

编程语言是通过语法定义的,例如Java 在 JLS 中定义,请参阅here

这是一个最小的“压缩”语法,没有结构被使用两次:结果 - 对我来说 - 无用的语法描述,例如附加到 MethodOrFieldDeclMethodDeclaratorRest> 正如你在这里看到的,我将其称为“最小的压缩方法”

MethodOrFieldDecl:
        Type Identifier MethodOrFieldRest

MethodOrFieldRest:
        VariableDeclaratorRest
        MethodDeclaratorRest

MethodDeclaratorRest:
        FormalParameters {[]} [throws QualifiedIdentifierList] ( MethodBody |   ; )

这通常没问题,但我想要一个如下所示的语法,其中列出了 MethodDeclaration 类型的所有必要信息,我将其称为“自上而下” -方法”:

MethodDeclaration:
   [ Javadoc ] { ExtendedModifier }
          [  ]
        ( Type | void ) Identifier (
        [ FormalParameter 
             { , FormalParameter } ] ) {[ ] }
        [ throws TypeName { , TypeName } ] ( Block | ; )

在搜索“自上而下的语法方法”时,我找到了 Pete Jinks 的网站,使用“最小的压缩方法”: here

现在,我想使用“自顶向下方法”获得编程语言 C 的语法定义。

最佳答案

我不知道该形式是否有现成的来源,但将 BNF 版本的语法作为文本文件并执行一系列复制粘贴操作以转换为该形式是相当简单的。< br/> http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnf是C语言语法的基本形式。

“自上而下方法”的一个问题是您需要确定一个有用的扩展级别。但是,对所有这些细节都使用单一的 Translation_unit 定义真的有用吗?我同意一些较小范围的扩展可能会有用。例如,我认为函数定义至少分解到语句级别可以帮助理解。

另一方面,BNF 很常见,学习阅读这种形式是一项值得学习的技能......

希望这有帮助

关于c - 编程语言 C 的非压缩、非最小语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4153573/

相关文章:

c - C中使用链表时的指针问题

将字母排列与字典 C 进行比较

git - 用于确定时态的 CLI 语法检查器

scala - 语法、Scala 解析组合器和无序集

c++ - 在哪里可以找到 C++ 语言的标准 BNF 或 YACC 语法?

c++ - 编程在人工智能中的应用

C - 跟踪网络事件 - Lib pcap

regex - 为什么 Perl 6 语法原型(prototype)的正文中不能有任何内容?

c++ - Yacc 语法产生不正确的终端

javascript - 用于 ECMAScript 的 EBNF?