当前位置:  开发笔记 > 编程语言 > 正文

需要有关使用pyparsing制作递归解析器的帮助

如何解决《需要有关使用pyparsing制作递归解析器的帮助》经验,为你挑选了1个好方法。

我正在尝试使用python pyparsing进行解析.在制作递归解析器时我陷入了困境.

让我解释一下这个问题

我想制作元素的笛卡尔积.语法是

cross({elements },{element})

我提出了更具体的方式

cross({a},{c1}) or cross({a,b},{c1}) or cross({a,b,c,d},{c1}) or 

所以一般形式是第一组将有n个元素(a,b,c,d).第二组将有一个元素,因此最终输出将是笛卡尔积.

语法是递归的,因为它可以像n级一样

cross(cross({a,b},{c1}),{c2})

这意味着用c1交叉a,b.让我们说结果我们.我们再次与c2交叉

这可以直到n级交叉(交叉(交叉(交叉......)

我想要的是使用setparseAction初始化对象

所以我将有2节课

class object1(object):
     This will be used by a,b,c,d 

class object2(object):
       This will hold cross elements

我需要帮助,我无法做出递归解析器.



1> S.Lott..:

您应该查看其他语言的定义,以了解通常如何处理这些语言.

例如,看看如何定义乘法.

事实并非如此

{expression} * {expression}

因为递归很难处理,并且没有暗示的从左到右的排序.你经常看到的是像

{term} + {factor}
{factor} * {unary-expression}

这为运营商提供了优先级和从左到右的排序.

看一下像http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnf这样的例子来说明这样的事情是如何构建的.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有