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

时间:2010-11-11 10:45:49

标签: c grammar bnf

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

这是一个最小的“压缩”语法,没有使用两次构造:结果是 - 对我来说 - MethodDeclaratorRest 之类的无用语法描述附加到 MethodOrFieldDecl 正如你在这里看到的,我称之为“最小化,压缩的方法”

MethodOrFieldDecl:
        Type Identifier MethodOrFieldRest

MethodOrFieldRest:
        VariableDeclaratorRest
        MethodDeclaratorRest

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

这一般都没问题,但是我希望有一个类似下面的语法,其中列出了 MethodDeclaration 类型的所有必要信息,我称之为“自上而下” -approach“:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

希望这有帮助

答案 1 :(得分:0)

Kernighan和Ritchie 2e(pub.Prentice-Hall)的“C编程语言”中有一个(E)BNF语法......可能还有一个可在线访问的版本。