在C#中使用RegEx和XML进行解析

时间:2009-03-05 04:55:43

标签: c# xml regex parsing

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

就像有一个打印命令一样:

  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%

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

这可能吗?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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