【发布时间】: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 中做到这一点?
【问题讨论】: