如何创建简单的无限深度函数解析器

时间:2012-10-22 12:31:29

标签: c# parsing

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

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

然后MyParser将解析内部语法,并首先使用带有deepest命令的参数调用正确的方法,直到outest命令。所以它基本上会

  1. 下载( 'http://www.aaa.com')
  2. 完成下载将列出所有标记匹配并结束
  3. 它将再次调用下载,但带有重载下载(string [] param)
  4. 所以基本上我有这些方法

    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
    }
    

    如何创建这样的解析器并首先调用最深的方法?有人可以帮帮我吗?我是解析新手。我打算只提供一种语法来创建一个处理网页报废的库。

1 个答案:

答案 0 :(得分:1)

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

  1. 使用EBNF等符号定义要正确解析的语言。
  2. 使用基于您的语言的EBNF定义的解析器创建工具。
  3. 将生成的解析器代码集成到您的应用程序中,并调整您的应用程序以使用解析器代码从输入字符串生成的树结构。
  4. 创建解析器的好工具,包括在C#中,是http://goldparser.org的黄金解析器生成器。

    但请务必先在EBNF中正确定义您的语言。不要只是使用正则表达式来破解“解析器”,它们对于正确的语言解析来说太有限了。