【问题标题】:Expression for .NET statements.NET 语句的表达式
【发布时间】:2011-05-13 05:59:16
【问题描述】:

我想为我的个人使用实现一个在线编辑器,所以我必须检查我在在线文本编辑器中编写的语句是否在形式是否正确

我想用正则表达式检查语句的形式,我找到了一个很好的IF语句表达式here,它是

if\s*\(((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^\(\)]|\((?1)\))*+)\)\s*{((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^{}]|{(?2)})*+)}\s*(?:(?:else\s*{((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^{}]|{(?3)})*+)}\s*)|(?:else\s*if\s*\(((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^\(\)]|\((?4)\))*+)\)\s*{((?:(?:(?:"(?:(?:\\")|[^"])*")|(?:'(?:(?:\\')|[^'])*'))|[^{}]|{(?5)})*+)}\s*))*;

现在我正在寻找表达式的其余部分,例如:

  • 同时
  • 变量定义(如:int xxx string xxx)
  • 开关盒
  • 新的(对象:类,枚举)
  • foreach

don't say that it's impossible,我可以用regular expressionIF expression 处理我的问题,我上面提到的工作得很好,其余的我需要这样的东西

提前谢谢你

【问题讨论】:

  • 哇,这是一大堆字符:P
  • 我不会说这是不可能的,但我会说词法解析通常使用 FSM(手动)或一些可以使用您的语法创建 AST 的第 3 方软件(如 ANTLR)完成。
  • 我非常怀疑正则表达式是否 100% 准确。如果您想要获得不错的准确性,IMO 正则表达式根本不适合解决这个问题。
  • 确实如此。 C# 的语法非常复杂,最好使用基于 BNF 语法的解析器生成器,例如 Gold Parser。这可以在 C# 中为您定义的任何常规语法生成解析器。我自己用它来解析 2 种语言,效果很好。
  • @Nasser Hadjloo: antlr.org/grammar/list -- 有很多语法,包括几个 c# 语法。

标签: c# .net regex editor


【解决方案1】:

尽管这不是您问题的直接答案 - 我坚持您改用 ANTLR

【讨论】:

  • 我下载了 C# 4.0 编译器的项目,现在我该如何使用它?
  • @Nasser Hadjloo:很抱歉很明显,但您可以从阅读文档开始使用它。
  • 我问是因为在 Codeplex 中提到,还没有它的文档。你可以在这里查看:[antlrcsharp.codeplex.com/documentation]
  • @Nasser Hadjloo: :-S 甚至都不知道。我只是接受并工作,没有特定于 c# 的文档。
【解决方案2】:

在这种情况下使用正则表达式不是一个好主意,你应该使用类似的东西 语法分析器

【讨论】:

    【解决方案3】:

    我使用正则表达式进行解析的经验是,它们仅在以下情况下才实用:

    • 您愿意自己编写和维护它们
    • 您可以接受它们并不严格正确

    由于您正在寻求帮助,因此您可能不符合第一个标准,因此我无法为您推荐它们。

    附:是的,我有时会在快速而肮脏的解析情况下自己使用它们。它们是无价的。

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 2012-04-29
      • 2013-12-07
      • 2017-01-25
      • 2011-03-19
      • 2021-04-07
      • 2011-03-28
      • 2016-03-17
      • 2012-01-01
      相关资源
      最近更新 更多