编程语言是通过语法定义的,例如Java 在 JLS 中定义,请参阅here
这是一个最小的“压缩”语法,没有结构被使用两次:结果 - 对我来说 - 无用的语法描述,例如附加到 MethodOrFieldDecl 的 MethodDeclaratorRest> 正如你在这里看到的,我将其称为“最小的压缩方法”
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/