![]() |
1
9
首先,如果您想学习解析,那么就编写自己的递归下降解析器。您定义的语言只需要少量的产品。我建议使用python的
有关实际的分析选项,请阅读… 快速而肮脏的解决方案是使用python本身:
有几种方法可以实现这一技巧,例如,这里有一种使用类的更干净(尽管有些不寻常)的方法:
作为完整解析器的中间步骤,您可以使用“附带电池”的python解析器,它解析python语法并返回一个ast。AST很深,有很多(IMO)不必要的级别。您可以通过剔除任何只有一个子节点的节点,将它们过滤到一个更简单的结构中。使用这种方法,您可以执行如下操作:
这种方法确实有其局限性。最后一个AST仍然有点嘈杂,您定义的语言必须解释为有效的Python代码。例如,你不能支持这个…
…因为此语法不作为python代码解析。但是,它的最大优点是可以控制AST转换,因此不可能注入任意的Python代码。 |
![]() |
2
5
同样,不要教你解析,但是你的格式非常接近于法律 YAML 你可能只想重新定义你的语言作为yaml的一个子集并使用 standard YAML parser . |
![]() |
4
1
正如“marcelo cantos”所建议的,您可以使用python dict,好处是您不必解析任何东西,您可以在服务器端使用与python dict相同的规则,在客户端使用javascript对象,并可以将它们作为json从服务器传递到客户机或viceversa。 如果你真的想自己分析,看看这个 http://nedbatchelder.com/text/python-parsers.html 但我不确定您是否能够轻松地解析缩进语言。 |
![]() |
5
1
您所展示的示例语言可能太复杂,无法为编写简单(并且没有bug)的解析函数。我建议阅读解析技术,如递归下降或表驱动解析,如ll(1)、ll(k)等。 但这可能过于笼统和/或复杂。将规则语言简化为诸如分隔文本之类的简单内容可能会更容易。 例如,
巧克力:甜
这将更容易解析,并且可以在没有正式的解析器的情况下完成。 |
![]() |
7
0
定制文件结构的动机是什么?是否可以将您的数据重新构造为一个更为知名的结构,如XML?如果是这样,您可以使用多个文件中的一个来解析您的文件。使用一个可接受的分析工具可能会节省大量的调试时间,如果考虑到这一点,它可能会使您的文件更具可读性。 |