【问题标题】:Where can I find C# 3.0 grammar?在哪里可以找到 C# 3.0 语法?
【发布时间】:2010-12-06 09:35:34
【问题描述】:

我打算用 C# 编写一个 C# 3.0 编译器。我在哪里可以得到解析器生成的语法?

最好是无需修改即可与 ANTLR v3 一起使用。

【问题讨论】:

  • 您知道我们已经免费提供了一个编译 C# 3 的编译器,对吧? :-) 但说真的,你为什么要建立自己的?只是为了好玩,还是有一些商业目的? (我问的原因是因为我们非常有兴趣了解人们想要从我们的编译器中得到什么“服务”,而不是简单地“为这个源代码吐出一些 IL”。)
  • Eric:主要是为了好玩。但是,我不时会想出一些我希望可以测试的语言想法。
  • @Mehrdad,如果你有一些代码可以运行,我可以玩一下吗:)
  • @Mehrdad:“……语言理念”相当模糊。如果你想用 C#(或任何其他语言)做任何有趣的事情,你不仅需要一个解析器(因此是语法),还需要构建树、构建符号表、分析符号使用......还有很多这不仅仅是语法。 Mono 框架可能比您想象的更有帮助。
  • Ira:我当然看到过这个问题。我明确提到了 C# 3.0,因为我找到了一堆 1.0 的东西。 ——顺便说一句,我说“主要是为了好玩”。对我来说,编写自己的代码并用它来测试我的东西比尝试理解 Mono 人编写的代码结构更有趣。

标签: c# compiler-construction c#-3.0 antlr grammar


【解决方案1】:

您在寻找thisthis 之类的东西吗?

另请参考C# ANLTR grammar问题。

【讨论】:

  • 链接的语法不是 C# 3.0。它不支持 lambda。这对我来说特别重要。
  • 根据语法中的现有结构添加对 lambdas 的支持似乎相当简单,因为您只需要定义参数列表。但是,这可能需要 LL(),因为您可以解析 (a** 之类的内容,但不知道这是否最终会成为类似 (a**b) 的表达式(即,将 a 乘以取消引用的结果b) 或 lambda 表达式 (a** b) =>,直到您点击 =>。由于对间接的数量没有限制(指向...的指针),它看起来对我来说是 LL()。但是由于 ANTLR3 支持 opt-in LL(*),所以这不是问题。
  • @Pavel:不仅如此。它不支持泛型。如果找不到相当好的 C# 3.0 语法,我可能会从头开始编写自己的解析器或语法。
【解决方案2】:

看看COCO/R,好像他们有C# 3.0的语言规范。

【讨论】:

    【解决方案3】:

    看看C# Language Specification。在B 章中。语法你会找到语法。

    【讨论】:

    • 是的,规范当然包含语法。但是,该Word文档中的语法分散在整个文档中,不适合解析器生成。
    • 它不只是散布在各处;我们在最后有一个附录,将整个内容放在一个地方。您可能是对的,需要进行一些修改才能使其适用于解析器生成器。
    • Eric:哦,没注意到那个部分。感谢您指出。
    • Micheal:不到 40 页。当我想到它时,可以处理它并从头开始。 +1
    【解决方案4】:

    我遇到了ANTLR C# Grammar on CodePlex。这是一个相对较新的项目,使用 ANTLR 3.2。它说它支持 C# 4.0,并根据 Eclipse Public License (EPL) 获得许可。

    我玩了一下。它有一堆包含表达式的测试文件。它支持 lambdas、不安全的上下文……正如您自然期望的那样。它解析 C# 文件并为您提供抽象语法树。你可以用它做任何你想做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2012-03-23
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多