【发布时间】:2009-07-14 10:23:45
【问题描述】:
我正在寻找一个可自定义的解析器和/或词法分析器,它可以让我在 C# 中构建自定义语法检查器。本质上,用户将输入一行代码(自定义),语法检查器将能够响应它是否正确编写。
【问题讨论】:
-
只是语法高亮还是需要执行用户输入的代码?
标签: c# parsing compiler-construction syntax-highlighting
我正在寻找一个可自定义的解析器和/或词法分析器,它可以让我在 C# 中构建自定义语法检查器。本质上,用户将输入一行代码(自定义),语法检查器将能够响应它是否正确编写。
【问题讨论】:
标签: c# parsing compiler-construction syntax-highlighting
【讨论】:
我喜欢ANTLR、it supports C# 以及 Java、Python、C 等。使用 ANTLR 的优点是非常好的文档(示例、书籍、教程等)和广泛的使用。
【讨论】:
来自here:
LINQPad 使用了许多第三方 UI 中的组件。查询 编辑器使用 Actipro 的 SyntaxEditor 控制(非常抛光的产品);这 “IntelliSense”功能依赖于 Actipro 库的组合 软件和 ICSharpCode(来自 SharpDevelop 项目)。
我没有使用过该摘录中提到的任何产品(除了我强烈推荐的 LINQPad!),但我认为它可能会让你朝着正确的方向前进。
【讨论】:
如果用户输入的是与传统表达式相对应的一行代码,您可以在最多几个小时内为此手动编写递归下降解析器并完成它。
如果您的输入是复杂语言的片段(例如,您想接受一行 C# 代码),您将需要一个非常强大的解析器,并且建议使用解析器生成器。
但是,您会发现大多数解析器生成器并没有为您提供解析您定义的语言的片段的好方法,但是您可以通过定义根来解决这个问题语法规则来提及与您愿意接受的“行”相对应的非终结符。
【讨论】:
我使用了一个递归下降解析器,它结合了我在自己的语言项目中用 C# 从头开始编写的解析和词法分析。我发现它使编写语法规则变得相对容易。见here for an example grammar,见here for the unit tests。
【讨论】:
我一直在使用 QWhale .NET 编辑器。它不是免费的,但相当不错。
【讨论】: