【问题标题】:Parser using RegEx and XML, in C#在 C# 中使用 RegEx 和 XML 的解析器
【发布时间】:2009-03-05 04:55:42
【问题描述】:

我正在制作一个应用程序,我需要验证每一行的语法,其中包含一个包含关键字作为第一个单词的命令。
此外,如果语法正确,我需要检查关键字中使用的变量的类型。

如果有打印命令:

  print "string" < variable < "some another string" //some comments

  print\s".*"((\s?<\s?".*")*\s?<\s?(?'string1'\w+))?(\s*//.*)?

所以我做了以下正则表达式:

  \s*[<>]\s*((?'variant'\w+)(\[\d+\])*) 

这是访问变体组中的所有单词以提取使用的变量并验证它们的类型。
像这样我的工具有很多关键字,目前我正在为每个关键字粗略地编写正则表达式。如果明天有变化,我会在每个关键字的任何地方都替换相应的变化。
我将每个关键字的正则表达式存储在 XML 文件中。但是我有兴趣让它可扩展,如果说规范明天会改变,所以我只需要改变一次,它会反映在所有地方,比如我将打印正则表达式转换为:

print %string% (%<% %string%|%variable%)* %comments%

现在像这样,我为每个关键字编写一个规范,并将字符串、变量、cmets 的定义写入另一个存储它们的正则表达式的文件中。然后我编写一个解析器来解析这个字符串并为我创建一个正则表达式字符串。

这可能吗?

有没有更好的方法可以做到这一点,或者有什么方法可以在 XML 中做到这一点?

【问题讨论】:

    标签: c# xml regex parsing


    【解决方案1】:

    上次我问这样的问题时,有人指给我http://www.antlr.org/。享受。 :-)

    【讨论】:

      【解决方案2】:

      我有了一个想法并制作了自己的替代品。我使用 %myname% 类型的标签来定义我的正则表达式,我使用正则表达式分别编写了 %myname% 标签的定义。然后我递归地扫描字符串并将 %myname% 标记的出现转换为它们所拥有的规范。它完成了我的工作。谢谢任何方式

      【讨论】:

        猜你喜欢
        • 2010-09-25
        • 2015-08-25
        • 2013-01-13
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 2013-01-06
        • 2011-09-25
        相关资源
        最近更新 更多