是否可以使用Instaparse或其他Clojure库来解析基于缩进的语言?我见过使用Instaparse解析以EBNF/ABNF表示的语法的示例。有没有一种好的方法可以用它来解析像Python这样支持缩进的语言?
发布于 2013-05-28 06:14:08
显然,你不是第一个遇到Instaparse这个问题的人。
对于大多数解析器生成器,您可以使用自定义词法分析器来解决这个问题,使用@andrewcooke提出的方案的一些变体。然而,Instaparse的设计目的是避免对词法分析器的需要,因此没有提供使用词法分析器的接口。
这种不足是在issue 9中特别提出的,被issue 10取代;在后者中,Instaparse的作者建议了一种变通方法:
在此期间,您可能会采用一种变通方法。您可以将诸如INDENT和DEDENT之类的标记映射到未使用的字符,然后将其重新构建为字符串,然后对其运行instaparse。我认为ASCII字符0-8和11-31是未使用的,可以用作标记。
这当然是一种可能性,尽管这是一个美学判断,因为它是否“做了一些非常粗糙的事情”。尽管如此,你可以写一个这样的hack,希望一旦问题10得到解决,它就可以被移除。你可能想加入这个问题的讨论。
发布于 2013-05-28 04:17:37
通常,要进行基于缩进的解析,您需要三件事:
根据语言的不同,您可能需要从第三部分向第二部分反馈一些信息。
我对instaparse一无所知(我回答的唯一原因是那些问“到目前为止你都试过什么了?”这样的问题真的让我很恼火),所以你需要看看是否有办法在记号赋予器和解析器之间放置第二阶段(我扫描了文档,它似乎没有为你完成第二部分的任何东西,但你可以自己写)。但是它应该能够完成第一部分和第三部分的工作。
https://stackoverflow.com/questions/16779676
复制相似问题