C#中的编译器编译器

时间:2009-07-14 10:23:46

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

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

7 个答案:

答案 0 :(得分:8)

那是Irony。一定要阅读讨论,因为那里有很多事情要做。使用11月份的旧版本或使用最新版本,但请确保您了解该版本中的内容以及不适用的版本。

对于大多数情况来说,11月发布应该很好(在宠物项目中使用它)。

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

答案 1 :(得分:8)

以下是您可能需要考虑的一些事项:

答案 2 :(得分:6)

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

答案 3 :(得分:0)

来自here

  

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

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

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

我使用递归下降解析器,它结合了我在我自己的语言项目中从头开始编写的解析和lexing。我发现它使编写语法规则相对容易。请参阅here for an example grammar并查看here for the unit tests

答案 6 :(得分:-1)

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