0

编程语言是通过语法定义的,例如 Java 在 JLS 中定义,见这里

这是一个最小的“压缩”语法,没有使用两次:结果是 - 对我来说 - 无用的语法描述,如MethodDeclaratorRest,它附加到MethodOrFieldDecl,如您在此处看到的,我称之为“最小,压缩方法”

方法或字段声明:
        类型标识符 MethodOrFieldRest

MethodOrFieldRest:
        VariableDeclaratorRest
        MethodDeclaratorRest

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

这通常没问题,但我希望有一个像下面这样的语法,其中列出了MethodDeclaration类型的所有必要信息,我称之为“自上而下的方法”:

方法声明:
   [Javadoc] {扩展修饰符}
          [ ]
        ( 类型 | void ) 标识符 (
        [ 形式参数
             { , 形式参数 } ] ) {[ ] }
        [ 抛出 TypeName { , TypeName } ] ( 块 | ; )

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

现在,我想使用“自上而下的方法”对编程语言 C 进行语法定义。

4

2 回答 2

1

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

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

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

希望这可以帮助

于 2010-11-11T11:25:50.173 回答
0

Kernighan 和 Ritchie 2e (pub. Prentice-Hall)的“The C Programming Language”有一个 (E)BNF 语法......也可能有一个可以在线访问的版本。

于 2011-04-12T07:39:07.420 回答