1

我计划创建一个字符串命令,如下所示

string syntax = "Download(TagMatch(Download(\"http://www.aaa.com\"), \"<div title='aa'>\", \"</div>\"))";
MyParser.Execute(syntax);

然后 MyParser 将解析里面的语法,并首先使用最深命令的参数调用正确的方法,直到最外面的命令。所以基本上会

  1. 下载('http://www.aaa.com')
  2. 完成下载它将列出所有标签匹配并结束
  3. 它将再次调用 Download 但过载 Download(string[] param)

所以基本上我有这些方法

private string Download(string download)
{
//return single string
}

private string[] Download(string[] download)
{
//return string array
}

private string[] TagMatch(string webpage, string startTag, string endTag)
{
//return multiple Tag matches the array
}

如何创建这样的解析器并首先调用该方法?任何人都可以帮助我吗?我是解析的新手。我计划仅通过提供一种语法来创建一个处理网络抓取的库。

4

1 回答 1

2

为了创建一个像样的解析器,您需要做一些事情:

  1. 使用 EBNF 等符号定义您想要正确解析的语言。
  2. 使用基于您的语言的 EBNF 定义的解析器创建工具。
  3. 将生成的解析器代码集成到您的应用程序中,并调整您的应用程序以使用解析器代码从输入字符串生成的树结构。

用于创建解析器(包括在 C# 中)的一个好工具是位于http://goldparser.org的 Gold Parser Generator 。

但请确保首先在 EBNF 中正确定义您的语言。不要仅仅使用正则表达式将“解析器”组合在一起,它们对于正确的语言解析来说太有限了。

于 2012-10-22T13:11:32.983 回答