【问题标题】:Compiler compiler in C#C#中的编译器编译器
【发布时间】:2009-07-14 10:23:45
【问题描述】:

我正在寻找一个可自定义的解析器和/或词法分析器,它可以让我在 C# 中构建自定义语法检查器。本质上,用户将输入一行代码(自定义),语法检查器将能够响应它是否正确编写。

【问题讨论】:

  • 只是语法高亮还是需要执行用户输入的代码?

标签: c# parsing compiler-construction syntax-highlighting


【解决方案1】:

那是Irony。请务必阅读讨论,因为那里发生了很多事情。使用 11 月的旧版本或使用最新版本,但请确保您了解该版本中的内容和不包含的内容。

在大多数情况下,11 月的版本应该运行良好(在宠物项目中使用它)。

Irony 允许从您可以直接在 C# 代码中定义的任何语法构建抽象语法树 (AST)。它还支持评估(即解释代码),甚至不难从中构建代码。或者,好吧,将其转换为 DLR(动态语言运行时)AST。

【讨论】:

  • +1 For Irony,除了游戏测试没有用过,但看起来很不错的 CC(Compiler Compiler)。
  • 我将它用于表达式评估(即计算器)。这很棒,因为它让事情变得容易多了。我喜欢它,因为它不需要学习另一种语法语言来创建您的语法 - 它全部在 C# 中,并且很容易将代码注入其中以支持作者不打算的东西。
【解决方案2】:

以下是您可能需要考虑使用的几件事:

【讨论】:

    【解决方案3】:

    我喜欢ANTLRit supports C# 以及 Java、Python、C 等。使用 ANTLR 的优点是非常好的文档(示例、书籍、教程等)和广泛的使用。

    【讨论】:

      【解决方案4】:

      来自here

      LINQPad 使用了许多第三方 UI 中的组件。查询 编辑器使用 Actipro 的 SyntaxEditor 控制(非常抛光的产品);这 “IntelliSense”功能依赖于 Actipro 库的组合 软件和 ICSharpCode(来自 SharpDevelop 项目)。

      我没有使用过该摘录中提到的任何产品(除了我强烈推荐的 LINQPad!),但我认为它可能会让你朝着正确的方向前进。

      【讨论】:

        【解决方案5】:

        如果用户输入的是与传统表达式相对应的一行代码,您可以在最多几个小时内为此手动编写递归下降解析器并完成它。

        如果您的输入是复杂语言的片段(例如,您想接受一行 C# 代码),您将需要一个非常强大的解析器,并且建议使用解析器生成器。

        但是,您会发现大多数解析器生成器并没有为您提供解析您定义的语言的片段的好方法,但是您可以通过定义根来解决这个问题语法规则来提及与您愿意接受的“行”相对应的非终结符。

        【讨论】:

          【解决方案6】:

          我使用了一个递归下降解析器,它结合了我在自己的语言项目中用 C# 从头开始​​编写的解析和词法分析。我发现它使编写语法规则变得相对容易。见here for an example grammar,见here for the unit tests

          【讨论】:

            【解决方案7】:

            我一直在使用 QWhale .NET 编辑器。它不是免费的,但相当不错。

            【讨论】:

              猜你喜欢
              • 2015-09-25
              • 1970-01-01
              • 2019-07-20
              • 1970-01-01
              • 2013-07-10
              • 1970-01-01
              • 1970-01-01
              • 2013-05-03
              • 2013-07-06
              相关资源
              最近更新 更多